[ОТВЕТИТЬ]
25.08.2014 15:13
vdm
 
Постучаться чтоль в вашу компанию кулибиных.
Битрикс я вообще не видел, php в основном "по гуглу", так что...

Просмотрел тему, вопросы:
- ты добавил скидку, аналогичную "под заказ 5%", с фиксированной суммой и без указания склада?
- переделал в pricegd - result_modifier.php вывод скидки с пустым складом на "Новая цена:" ?
- нужно этой скидочной ценой заменить основную, которая на желтом фоне?
- зачеркнутая старая цена и сумма скидки (серым цветом) вроде не нужны?
- непонятно, вот выведешь тут цену с данной конкретной скидкой, а где еще она (цена) используется. Например при добавлении товара в корзину - с какой ценой он туда попадет, с базовой?

В общем неясен мне смысл замены основной цены в одном месте, "на экране". Вывести ее как ты хочешь конечно можно, а дальше...
25.08.2014 15:49
aldemko
 
- ты добавил скидку, аналогичную "под заказ 5%", с фиксированной суммой и без указания склада? -да
- переделал в pricegd - result_modifier.php вывод скидки с пустым складом на "Новая цена:" ? -да (если НОВОЙ ЦЕНЫ нет оставить прежнюю цену)
- нужно этой скидочной ценой заменить основную, которая на желтом фоне? - да
- зачеркнутая старая цена и сумма скидки (серым цветом) вроде не нужны? - да
- непонятно, вот выведешь тут цену с данной конкретной скидкой, а где еще она (цена) используется. Например при добавлении товара в корзину - с какой ценой он туда попадет, с базовой? -

корзины, как вы заметили нет
есть только стоимость доставки
да в данный момент нужно, просто заменить цену на екране
25.08.2014 15:53
vdm
 
Ну выложи текущий pricegd, чего там поменял.
25.08.2014 15:56
aldemko
 
вот
(особо ничего не менял, просто нашел не используемый склад, не склада - вот и решил воспользоватся на быструю руку, так сказать, если работа со стандартной скидкой требует намного больше времени в данный момент, чем есть для решения задачи)
pricegd:
[php]<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

//echo $arResult['DISCOUNTS']['col'];
/*echo "<pre>";
print_r ($arResult['DISCOUNTS']);
echo "</pre>";*/

$osn_price = $arResult['DISCOUNTS']['price_osn'][''] + 0;//это ноль прибавлен доля того, чтобы из 5000.00 стало 5000 (убрали .00)

if ($arResult['DISCOUNTS']['price_osn'][''] != "")
{
echo '<div class="item_current_price" id="">Цена: '.$osn_price.' руб.</div><br />'; - Это выводит цену
}
else
{
echo '<div class="item_current_price" id="">Цена: по запросу</div><br />';
}

for($i = 0; $i < $arResult['DISCOUNTS']['col']; $i++)//погнали скидки выводить
{
if ($arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i] && $arResult['DISCOUNTS']['price_osn'][''] != "")
{
$type_s_out = "";
if ($arResult['DISCOUNTS']['type_s'][$i] == "Процент")
{
$type_s_out = $arResult['DISCOUNTS']['val_s'][$i]."%";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Под заказ")
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Под заказ, цена со скидкой : <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Владивосток")
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> во Владивостоке: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Москва")
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> в Москве: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "") - это выводит НОВАЯ ЦЕНА
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;НОВАЯ ЦЕНА: <span style='font-size: 16px;' >".$type_s_out."</span> <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
}

if ($arResult['DISCOUNTS']['comment'][$i] != "")
{
echo "<span style='font-style: italic; color:#000; font-size: 12px;'>&nbsp;&nbsp;&nbsp;".$arResult['DISCOUNTS']['comment'][$i]."</span><br />";
}


}

}

?>[/php]



вот результат
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 21 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.
25.08.2014 16:57
vdm
 
Тупо просматриваются скидки и если есть с пустым складом - цену берет оттуда. Соответственно дальше вывод этой цены закомментирован. Для красоты вроде можно покороче, без цикла, но дай бог заработает и так.

pricegd - template.php:

SQL код:
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

//echo $arResult['DISCOUNTS']['col'];
/*echo "<pre>";
print_r ($arResult['DISCOUNTS']);
echo "</pre>";*/

$osn_price $arResult['DISCOUNTS']['price_osn'][''] + 0;//это ноль прибавлен доля того, чтобы из 5000.00 стало 5000 (убрали .00)

if ($arResult['DISCOUNTS']['price_osn'][''] != "")
{
    for(
$i 0$i $arResult['DISCOUNTS']['col']; $i++)
    { 
        if (
$arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i])
        {
            if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "")
            {
                
$osn_price $arResult['DISCOUNTS']['skid'][$i];
                break;
            }
        }
    }

    echo 
'<div class="item_current_price" id="">Цена: '.$osn_price.' руб.</div><br />';
}
else
{
    echo 
'<div class="item_current_price" id="">Цена: по запросу</div><br />';
}

for(
$i 0$i $arResult['DISCOUNTS']['col']; $i++)//погнали скидки выводить 

    if (
$arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i] && $arResult['DISCOUNTS']['price_osn'][''] != "")
    {
$type_s_out "";
        if (
$arResult['DISCOUNTS']['type_s'][$i] == "Процент")
        {
            
$type_s_out $arResult['DISCOUNTS']['val_s'][$i]."%";
        }

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Под заказ")
        {
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Под заказ, цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span>: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
        }

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Владивосток")
        {
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> во Владивостоке: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
        }

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Москва")
        {
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> в Москве: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
        }

//        if ($arResult['DISCOUNTS']['sklad_s'][$i] == "")
//        {
//            echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой: <span style='font-size: 16px;' >".$type_s_out."</span> <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
//        }

        
if ($arResult['DISCOUNTS']['comment'][$i] != "")
        {
            echo 
"<span style='font-style: italic; color:#000; font-size: 12px;'>&nbsp;&nbsp;&nbsp;".$arResult['DISCOUNTS']['comment'][$i]."</span><br />";
        }


    }

}

?>
25.08.2014 17:25
aldemko
 
оО спасибо
заработало


теперь бы такой же фокус к
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 21 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.


понимаю что это временное решение, и нужно будет в итоге все равно возвращаться к советам
Цитата:
KirillHome Дальше надо читать в гугле по запросу "IncludeComponent передать параметр" и пробовать, пробовать, пробовать....
Параметр то был передан, а вот как его обработать? Я "с разбега" не разобрался....
но на данный момент меня и этот вариант очень как спасает


так же есть моменты некоторые, но пка, для отвода глаз не заметно будет
но все же
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 21 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.

скидка под заказ 5% все равно берется от суммы 270 000
но это уже след етап



если правильно понял
catalog.section
есть код
SQL код:
<div class="bx_catalog_item_title"><a href="<? echo $arItem['DETAIL_PAGE_URL']; ?>" title="<? echo $arItem['NAME']; ?>"><? echo $arItem['NAME']; ?></a></div>
<div class="bx_catalog_item_price"><div id="<? echo $arItemIDs['PRICE']; ?>" class="bx_price"><?
    
    
//компонент цен и скидок сюда

    
$APPLICATION->IncludeComponent("hard:pricegd""catalogspisok"
    array(
    
"ELEMENT_ID" => $arItem['ID']
    ),
    
false,
    array(
    
"ACTIVE_COMPONENT" => "Y"
    
)
);
он тоже обращается к pricegd
но почему он оттуда не берет данные ?(
25.08.2014 18:23
vdm
 
Цитата:
aldemko скидка под заказ 5% все равно берется от суммы 270 000
Или откопать, где формируется $arResult['DISCOUNTS']
Или во втором цикле вычесть со всех прочих скидок разницу цен, полученную в первом цикле.
Логика получается конечно... чем дальше в лес...

Цитата:
aldemko если правильно понял
catalog.section
есть код
SQL код:
<div class="bx_catalog_item_title"><a href="<? echo $arItem['DETAIL_PAGE_URL']; ?>" title="<? echo $arItem['NAME']; ?>"><? echo $arItem['NAME']; ?></a></div>
<div class="bx_catalog_item_price"><div id="<? echo $arItemIDs['PRICE']; ?>" class="bx_price"><?
    
    
//компонент цен и скидок сюда

    
$APPLICATION->IncludeComponent("hard:pricegd""catalogspisok"
    array(
    
"ELEMENT_ID" => $arItem['ID']
    ),
    
false,
    array(
    
"ACTIVE_COMPONENT" => "Y"
    
)
);
он тоже обращается к pricegd
но почему он оттуда не берет данные ?(
Тут другое имя template - catalogspisok. Это другие файлы?
25.08.2014 18:31
aldemko
 
сейчас поищу. это не моих рук произведение
нашел его template - catalogspisok (содержимое было таким же как и pricegd) - да это был отдельный файл и лежал он вообще по другому адрессу
bitrix/components/hardp/ricegdt/emplates/catalogspisok
содержимое было аналогично оригинальному pricegd
заменил на
код:
Цитата:
vdm
pricegd - template.php:

SQL код:
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

//echo $arResult['DISCOUNTS']['col'];
/*echo "<pre>";
print_r ($arResult['DISCOUNTS']);
echo "</pre>";*/

$osn_price $arResult['DISCOUNTS']['price_osn'][''] + 0;//это ноль прибавлен доля того, чтобы из 5000.00 стало 5000 (убрали .00)

if ($arResult['DISCOUNTS']['price_osn'][''] != "")
{
    for(
$i 0$i $arResult['DISCOUNTS']['col']; $i++)
    { 
        if (
$arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i])
        {
            if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "")
            {
                
$osn_price $arResult['DISCOUNTS']['skid'][$i];
                break;
            }
        }
    }

    echo 
'<div class="item_current_price" id="">Цена: '.$osn_price.' руб.</div><br />';
}
else
{
    echo 
'<div class="item_current_price" id="">Цена: по запросу</div><br />';
}

for(
$i 0$i $arResult['DISCOUNTS']['col']; $i++)//погнали скидки выводить 

    if (
$arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i] && $arResult['DISCOUNTS']['price_osn'][''] != "")
    {
$type_s_out "";
        if (
$arResult['DISCOUNTS']['type_s'][$i] == "Процент")
        {
            
$type_s_out $arResult['DISCOUNTS']['val_s'][$i]."%";
        }

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Под заказ")
        {
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Под заказ, цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span>: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
        }

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Владивосток")
        {
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> во Владивостоке: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
        }

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Москва")
        {
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> в Москве: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
        }

//        if ($arResult['DISCOUNTS']['sklad_s'][$i] == "")
//        {
//            echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой: <span style='font-size: 16px;' >".$type_s_out."</span> <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
//        }

        
if ($arResult['DISCOUNTS']['comment'][$i] != "")
        {
            echo 
"<span style='font-style: italic; color:#000; font-size: 12px;'>&nbsp;&nbsp;&nbsp;".$arResult['DISCOUNTS']['comment'][$i]."</span><br />";
        }


    }

}

?>


уже хорошо.
простите за наглость:)
может еще подскажите как сделать что бы
скидка под ценой расчитывалась из строки ЦЕНА?
ее как не меняй хоть миллион поставь а скидка снизу все равно не меняется
25.08.2014 20:24
vdm
 
1. Я что-то пропустил наверно, но уточни плиз, зачем вообще вот таким образом подменять основную цену скидочной? Почему нельзя сразу выгрузить уменьшенную базовую цену на группу из 1С или откуда там она берется?

2. Опять же распиши, о чем речь в "ее как не меняй хоть миллион поставь а скидка снизу все равно не меняется". Скидочная цена, которая "под заказ 5%"? Покажи где что меняешь.
26.08.2014 04:32
aldemko
 
1. почему таким образом решил подменить основную цену?

потому что
1:
https://olegon.ru/showpost.php?p=183480&postcount=19

2:
https://olegon.ru/showpost.php?p=183572&postcount=34

3:
https://olegon.ru/showpost.php?p=183574&postcount=35

4:
https://olegon.ru/showpost.php?p=183659&postcount=38

5:
https://olegon.ru/showpost.php?p=183676&postcount=51

6:
https://olegon.ru/showpost.php?p=183683&postcount=56




2. Опять же распиши, о чем речь в "ее как не меняй хоть миллион поставь а скидка снизу все равно не меняется". Скидочная цена, которая "под заказ 5%"? Покажи где что меняешь.

код:
[php]<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

//echo $arResult['DISCOUNTS']['col'];
/*echo "<pre>";
print_r ($arResult['DISCOUNTS']);
echo "</pre>";*/

$osn_price = $arResult['DISCOUNTS']['price_osn'][''] + 0;//это ноль прибавлен доля того, чтобы из 5000.00 стало 5000 (убрали .00)

if ($arResult['DISCOUNTS']['price_osn'][''] != "")
{
for($i = 0; $i < $arResult['DISCOUNTS']['col']; $i++)
{
if ($arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i])
{
if ($arResult['DISCOUNTS']['sklad_s'][$i] == "")
{
$osn_price = $arResult['DISCOUNTS']['skid'][$i];
break;
}
}
}

echo '<div class="item_current_price" id="">Цена: '.$osn_price.' руб.</div><br />';
}
else
{
echo '<div class="item_current_price" id="">Цена: по запросу</div><br />';
}

for($i = 0; $i < $arResult['DISCOUNTS']['col']; $i++)//погнали скидки выводить
{
if ($arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i] && $arResult['DISCOUNTS']['price_osn'][''] != "")
{
$type_s_out = "";
if ($arResult['DISCOUNTS']['type_s'][$i] == "Процент")
{
$type_s_out = $arResult['DISCOUNTS']['val_s'][$i]."%";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Под заказ")
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Под заказ, цена со скидкой : <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Владивосток")
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> во Владивостоке: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Москва")
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> в Москве: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
}

// if ($arResult['DISCOUNTS']['sklad_s'][$i] == "")
// {
// echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой: <span style='font-size: 16px;' >".$type_s_out."</span> <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$arResult['DISCOUNTS']['skid'][$i]." руб.</span></span><br />";
// }

if ($arResult['DISCOUNTS']['comment'][$i] != "")
{
echo "<span style='font-style: italic; color:#000; font-size: 12px;'>&nbsp;&nbsp;&nbsp;".$arResult['DISCOUNTS']['comment'][$i]."</span><br />";
}


}

}

?>[/php]


ссылка:
http://25gus.ru/catalog/rezinovye_gusenitsy_new/rezinovaya_gusenitsa_800x150x67/?clear_cache=Y

как видим цена уже подменена, через тот вариант который вы мне вчера дали
но ниже есть цена под заказ со скидкой 5% (5% я пока затер, но смысл там в том что там именно скидка 5%)
а если отнять 5% от той цены которая сейчас то там никак не выходит 5%
он берет 5% от оригинальной цены а не от подменной.
в идеале конечно было бы сделать через нормальные скидки, но о проблемах этого добиться немного выше (в 1ом пункте)

вообще во хорошему в этом шаблоне который выше указан
хотелось бы видеть osn_price = то что там сейчас - disc
но как это реализовать пока не понятно
и ниже скидки что бы уже от этой суммы плясали
26.08.2014 11:47
vdm
 
1. Эээ, ты не ответил Зачем подменять базовую цену скидочной, вместо того чтобы сразу выгрузить ее уменьшенной? Разве что размер "скидки" должен контроллироваться во "фронте"?

2. Вставил пересчет скидочных цен. Проверяй.
pricegd - template.php:
SQL код:
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

//echo $arResult['DISCOUNTS']['col'];
/*echo "<pre>";
print_r ($arResult['DISCOUNTS']);
echo "</pre>";*/

$osn_price $arResult['DISCOUNTS']['price_osn'][''] + 0;//это ноль прибавлен доля того, чтобы из 5000.00 стало 5000 (убрали .00)
$disc 0;
$osn_price2 $osn_price;

if (
$arResult['DISCOUNTS']['price_osn'][''] != "")
{
    for(
$i 0$i $arResult['DISCOUNTS']['col']; $i++)
    {
        if (
$arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i])
        {
            if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "")
            {
                
$disc $osn_price $arResult['DISCOUNTS']['skid'][$i];
                
$osn_price $arResult['DISCOUNTS']['skid'][$i];
                break;
            }
        }
    }

    echo 
'<div class="item_current_price" id="">Цена: '.$osn_price.' руб.</div><br />';
}
else
{
    echo 
'<div class="item_current_price" id="">Цена: по запросу</div><br />';
}

for(
$i 0$i $arResult['DISCOUNTS']['col']; $i++)//погнали скидки выводить
{
    if (
$arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i] && $arResult['DISCOUNTS']['price_osn'][''] != "")
    {
        
$type_s_out "";
        
$disc2_percent = ( ($osn_price2-$arResult['DISCOUNTS']['skid'][$i])/$osn_price2 ) * 100;
        
$disc2 $disc - ( ($disc $disc2_percent) / 100 );
        
$price2 $arResult['DISCOUNTS']['skid'][$i] - $disc2;
        if (
$arResult['DISCOUNTS']['type_s'][$i] == "Процент")
        {
            
$type_s_out $arResult['DISCOUNTS']['val_s'][$i]."%";
        }

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Под заказ")
        {
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Под заказ, цена со скидкой : <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />";
        }

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Владивосток")
        {
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> во Владивостоке: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />";
        }

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Москва")
        {
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> в Москве: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />";
        }

//        if ($arResult['DISCOUNTS']['sklad_s'][$i] == "")
//        {
//            echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой: <span style='font-size: 16px;' >".$type_s_out."</span> <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />";
//        }

        
if ($arResult['DISCOUNTS']['comment'][$i] != "")
        {
            echo 
"<span style='font-style: italic; color:#000; font-size: 12px;'>&nbsp;&nbsp;&nbsp;".$price2."</span><br />";
        }


    }

}

?>

3. А чем отличается текущая скидка от той, что была раньше, сумму которой ты хочешь передать "по нормальному". Я пока вижу разницу только в том, как эта сумма скидки попадет в pricegd. А там все равно придется пересчитывать все прочие скидки, неважно, получена $disc снаружи или вычислена внутри. Т.е. лучше бы найти то место, где все скидки вычисляются изначально, там и менять базовую цену.
26.08.2014 13:54
aldemko
 
сейчас доберусь до нормального компа проверю
спасибо

[php]1. Эээ, ты не ответил Зачем подменять базовую цену скидочной, вместо того чтобы сразу выгрузить ее уменьшенной? Разве что размер "скидки" должен контроллироваться во "фронте"?[/php]
потому как я не знаю, как можно еще вывести скидку на товар именно в цене
если я делаю просто скидку через стандартный модуль скидок, цена не меняется (


скидка которая передается сейчас, это не стандартный модуль скидок, а переделанный через справочники (





PS еще раз спасибо. работает.
костыли. понимаю (((
но сделать и костыли сам не могу, не говоря уже про нормальную цену передаваемую из карточки товаров и скидку на нее + доп скидки через справочники которые

вот как было

скидка вроде откидывает 300 р о чем пишет ниже, но цена не менялась
26.08.2014 14:22
KirillHome
 
Цитата:
aldemko ...
потому как я не знаю, как можно еще вывести скидку на товар именно в цене
если я делаю просто скидку через стандартный модуль скидок, цена не меняется (
Зарекался, но - не выдержал.
Есть стандартный модуль формирования цены и скидок (при этом стандартный механизм скидок довольно универсален - вплоть до идентификации клиента).

К нему приделали "костыль" (pricegd), который знает про базовую цену, но не знает про механизм базовых скидок, и при этом что-то как-то делает "в себе".

На мой взгляд решение может быть одно из двух:
1) Не использовать стандартный механизм скидок.
2) Переписать pricegd с тем, что бы он знал о стандартном механизме скидок.

Как я понял, переписать pricegd (изменив, к примеру, количество и состав передаваемых параметров) просто через правку текстов (PHP-кода) представляется несколько проблематичным (особенности Bitrix-а?).

Так что я вижу одно правильное решение - не использовать стандартный механизм скидок.
26.08.2014 15:07
aldemko
 
я уже его и не использую. этот подходит
но тут такое НО
выгрузка в яндекс маркет подгребает цену из карточки (
она не соответствует цене pricegd после вышеперечисленных манипуляций
26.08.2014 17:23
vdm
 
Цитата:
aldemko выгрузка в яндекс маркет подгребает цену из карточки (
О чем и речь, предупреждали же.
А стандартную скидку выгрузка в маркет учитывает?
26.08.2014 17:55
aldemko
 
да учитывает(
но не отображает на сайте
палка в 2 концах
стандартная скидка действует на яндекс, но не действует на сайт - пинком с яндекса - мол не соответствие цены
не стандартная скидка не соответствует яндуксу но соответствует цене на сайте - яндекс спс на сайте все ок вы нам не верные данные прислали, досвидания
26.08.2014 20:20
vdm
 
Значит дописывать pricegd для учета стандартной скидки.
Т.о. ищи битриксописателя любой квалификации, задача несложная, должно быть недорого.
Поглядел описание компонент - добавить параметр можно, несложно, но браться за это с нулевой квалификацией - боюсь снова костыли городить.
29.08.2014 08:02
aldemko
 
Да. будем отдавать кому-то в след месяце.
чтобы переделали.
а еще такой вопросик.
скидки сейчас которые 5% отлично действуют.
включил скидку другую
немного не читабельно отображает
в примере
28200
скидка 2000
должно быть 26200
а выходит 26221.052631579 руб.

откуда берется 1.052631579 руб. не понятно



использую код который дали, ничего не менял

код:
[php]<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

//echo $arResult['DISCOUNTS']['col'];
/*echo "<pre>";
print_r ($arResult['DISCOUNTS']);
echo "</pre>";*/

$osn_price = $arResult['DISCOUNTS']['price_osn'][''] + 0;//это ноль прибавлен доля того, чтобы из 5000.00 стало 5000 (убрали .00)
$disc = 0;
$osn_price2 = $osn_price;

if ($arResult['DISCOUNTS']['price_osn'][''] != "")
{
for($i = 0; $i < $arResult['DISCOUNTS']['col']; $i++)
{
if ($arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i])
{
if ($arResult['DISCOUNTS']['sklad_s'][$i] == "")
{
$disc = $osn_price - $arResult['DISCOUNTS']['skid'][$i];
$osn_price = $arResult['DISCOUNTS']['skid'][$i];
break;
}
}
}

echo '<div class="item_current_price" id="">Цена: '.$osn_price.' руб.</div><br />';
}
else
{
echo '<div class="item_current_price" id="">Цена: по запросу</div><br />';
}

for($i = 0; $i < $arResult['DISCOUNTS']['col']; $i++)//погнали скидки выводить
{
if ($arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i] && $arResult['DISCOUNTS']['price_osn'][''] != "")
{
$type_s_out = "";
$disc2_percent = ( ($osn_price2-$arResult['DISCOUNTS']['skid'][$i])/$osn_price2 ) * 100;
$disc2 = $disc - ( ($disc * $disc2_percent) / 100 );
$price2 = $arResult['DISCOUNTS']['skid'][$i] - $disc2;
if ($arResult['DISCOUNTS']['type_s'][$i] == "Процент")
{
$type_s_out = $arResult['DISCOUNTS']['val_s'][$i]."%";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Под заказ")
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Под заказ, цена со скидкой: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Владивосток")
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> во Владивостоке: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />";
}

if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Москва")
{
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> в Москве: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />";
}

// if ($arResult['DISCOUNTS']['sklad_s'][$i] == "")
// {
// echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой: <span style='font-size: 16px;' >".$type_s_out."</span> <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />";
// }

if ($arResult['DISCOUNTS']['comment'][$i] != "")
{
echo "<span style='font-style: italic; color:#000; font-size: 12px;'>&nbsp;&nbsp;&nbsp;".$price2."</span><br />";
}


}

}

?>[/php]
29.08.2014 09:44
KirillHome
 
Ну выведи математику, посмотри сам

К примеру - так
[php]
if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Владивосток")
{
echo "<span style='font-weight:bold; font-size: 15px;'>&nbsp;disc2_percent = <span style='font-weight:bold; font-size: 16px;'>".$disc2_percent."</span></span><br />";
echo "<span style='font-weight:bold; font-size: 15px;'>&nbsp;disc2 = <span style='font-weight:bold; font-size: 16px; '>".$disc2."</span></span><br />";
echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> во Владивостоке: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />";
}
[/php]

Т.е. выведя значения переменных, вычисляемых функций - увидишь, что и почему "считается не так".
29.08.2014 09:57
vdm
 
Конечно по-нормальному там округление нужно (в настройках цен есть где-то параметры округления?). Но рубль это как-то много.

28200 - это исходная цена или со стандартной скидкой? Сумма скидки какая?
2000 - параметры этой скидки какие?
29.08.2014 11:34
aldemko
 
Параметры скидки

вот:


но это те-же скидки что и выше, они реализованы через pricegd

28200 это уже со скидкой которую вы мне помогали делать через pricegd вывести ен скидку а сформировать цену. скрипт выше

но опять же цена может быть и без скидки в цене
а скидка например 2000 внизу может быть.
29.08.2014 13:33
vdm
 
Все равно без исходных данных непонятно.
Тебе же дали направление движения - выведи промежуточные расчеты на экран.
SQL код:
        if ($arResult['DISCOUNTS']['sklad_s'][$i] == "Владивосток"
        { 
            echo 
"<span style='font-weight:bold; font-size: 15px;'>&nbsp;osn_price2 = <span style='font-weight:bold; font-size: 16px;'>".$osn_price2."</span></span><br />"
            echo 
"<span style='font-weight:bold; font-size: 15px;'>&nbsp;disc = <span style='font-weight:bold; font-size: 16px;'>".$disc."</span></span><br />"
            echo 
"<span style='font-weight:bold; font-size: 15px;'>&nbsp;disc2_percent = <span style='font-weight:bold; font-size: 16px;'>".$disc2_percent."</span></span><br />"
            echo 
"<span style='font-weight:bold; font-size: 15px;'>&nbsp;disc2 = <span style='font-weight:bold; font-size: 16px; '>".$disc2."</span></span><br />"
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> во Владивостоке: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />"
        } 
29.08.2014 15:06
KirillHome
 
Скорее всего происходит следующее:
1) Вычисляется абсолютная скидка
2) Вычисляется процент, который составляет абсолютная скидка
3) Данный процент заново применяется к цене без скидки.

И я не уверен, что процент хранится до хотя бы 4 знаков после запятой.
Отсюда и расхождение (вместо скидки в 2000 получается скидка в 1998,947.....).
29.08.2014 16:26
vdm
 
Топикстартер темнит...
Т.к. по его же словам разница там между 26200 и 26221.052631579.
Т.е. не рубль, а 21р.
29.08.2014 16:33
KirillHome
 
Ну, если посчитать округление до двух знаков, то у меня вообще получилось 26 :)
Вложения
Тип файла: xls Тест округления.xls (5.5 Кб, 145 просмотров)
30.08.2014 19:20
aldemko
 
возможно обсчитался. в заботах весь был
и не заметил разницы
да 21 с копейками разница (
30.08.2014 23:40
KirillHome
 
Так что с промежуточными расчётами?
31.08.2014 15:28
aldemko
 
HDD на компе помер.
проверил другие товары.
парочка:
Цена: 31000 руб.
29019.169329073 руб.

Цена: 31400 руб.
29418.927444795 руб.

Цена: 32300 руб.
Цена со скидкой во Владивостоке: 30318.404907975 руб.


как видно, ценна со скидкой везде плавает и суммы разные получаются

дальше за испытуемую карточку вял вот
товар:
Цена: 32300 руб.
Цена со скидкой во Владивостоке: 30318.404907975 руб.

после подставил код промежуточных данных
вышла такая картина


Цена: 32300 руб.
osn_price2 = 32600
disc = 300
disc2_percent = 6.1349693251534
disc2 = 281.59509202454
Цена со скидкой во Владивостоке: 30318.404907975 руб.


osn_price2 и disc ровно считают
а дальше идут с точками
31.08.2014 16:58
aldemko
 
Цитата:
aldemko HDD на компе помер.
проверил другие товары.
парочка:
Цена: 31000 руб.
29019.169329073 руб.

Цена: 31400 руб.
29418.927444795 руб.

Цена: 32300 руб.
Цена со скидкой во Владивостоке: 30318.404907975 руб.


как видно, ценна со скидкой везде плавает и суммы разные получаются

дальше за испытуемую карточку вял вот
товар:
Цена: 32300 руб.
Цена со скидкой во Владивостоке: 30318.404907975 руб.

после подставил код промежуточных данных
вышла такая картина


Цена: 32300 руб.
osn_price2 = 32600
disc = 300
disc2_percent = 6.1349693251534
disc2 = 281.59509202454
Цена со скидкой во Владивостоке: 30318.404907975 руб.


osn_price2 и disc ровно считают
а дальше идут с точками
вся разгадка здесь
1:
$type_s_out = "";
$disc2_percent = ( ($osn_price2-$arResult['DISCOUNTS']['skid'][$i])/$osn_price2 ) * 100;
$disc2 = $disc - ( ($disc * $disc2_percent) / 100 );
$price2 = $arResult['DISCOUNTS']['skid'][$i] - $disc2;

но как можно повлиять на этот алгоритм, что бы числа ровными были
31.08.2014 17:42
vdm
 
Переделано.
Доп. скидки на фиксированную сумму считаются по-своему.
Для процентных добавлено округление до 10р.
код:

SQL код:
<? 
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); 

//echo $arResult['DISCOUNTS']['col']; 
/*echo "<pre>"; 
print_r ($arResult['DISCOUNTS']); 
echo "</pre>";*/ 

$osn_price $arResult['DISCOUNTS']['price_osn'][''] + 0;//это ноль прибавлен доля того, чтобы из 5000.00 стало 5000 (убрали .00) 
$disc 0
$osn_price2 $osn_price
$round_prec = -1// округление до 10р

if ($arResult['DISCOUNTS']['price_osn'][''] != ""

    for(
$i 0$i $arResult['DISCOUNTS']['col']; $i++) 
    { 
        if (
$arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i]) 
        { 
            if (
$arResult['DISCOUNTS']['sklad_s'][$i] == ""
            { 
                
$disc $osn_price2 $arResult['DISCOUNTS']['skid'][$i]; 
                
$osn_price $arResult['DISCOUNTS']['skid'][$i]; 
                break; 
            } 
        } 
    } 

    echo 
'<div class="item_current_price" id="">Цена: '.$osn_price.' руб.</div><br />'

else 

    echo 
'<div class="item_current_price" id="">Цена: по запросу</div><br />'


for(
$i 0$i $arResult['DISCOUNTS']['col']; $i++)//погнали скидки выводить 

    if (
$arResult['DISCOUNTS']['dnk_s'][$i] == $arResult['DISCOUNTS']['dnk_out'][$i] && $arResult['DISCOUNTS']['price_osn'][''] != ""
    { 
        
$type_s_out ""
        if (
$arResult['DISCOUNTS']['type_s'][$i] == "Процент"
        { 
            
$type_s_out $arResult['DISCOUNTS']['val_s'][$i]."%";
            
$disc2_percent = ( ($osn_price2-$arResult['DISCOUNTS']['skid'][$i])/$osn_price2 ) * 100;
            
$disc2 $disc - ( ($disc $disc2_percent) / 100 );
            
$price2 round($arResult['DISCOUNTS']['skid'][$i] - $disc2$round_prec);
        }
        else
        {
            
$disc2 $osn_price2-$arResult['DISCOUNTS']['skid'][$i];
            
$price2 $osn_price $disc2;
        } 

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Под заказ"
        { 
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Под заказ, цена со скидкой: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />"
        } 

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Владивосток"
        { 
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> во Владивостоке: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />"
        } 

        if (
$arResult['DISCOUNTS']['sklad_s'][$i] == "Москва"
        { 
            echo 
"<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой <span style='font-size: 16px;' >".$type_s_out."</span> в Москве: <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />"
        } 

//        if ($arResult['DISCOUNTS']['sklad_s'][$i] == "") 
//        { 
//            echo "<span style='font-weight:bold; color:#00A80D; font-size: 15px;'>&nbsp;&nbsp;Цена со скидкой: <span style='font-size: 16px;' >".$type_s_out."</span> <span style='font-weight:bold; font-size: 16px; color: #FA8C00;'>".$price2." руб.</span></span><br />"; 
//        } 

        
if ($arResult['DISCOUNTS']['comment'][$i] != ""
        { 
            echo 
"<span style='font-style: italic; color:#000; font-size: 12px;'>&nbsp;&nbsp;&nbsp;".$price2."</span><br />"
        } 


    } 



?>


Опции темы


Часовой пояс GMT +3, время: 04:20.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.