[ОТВЕТИТЬ]
Опции темы
26.08.2014 11:47
 
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 снаружи или вычислена внутри. Т.е. лучше бы найти то место, где все скидки вычисляются изначально, там и менять базовую цену.
"Спасибо" vdm от:
26.08.2014 13:54
 
сейчас доберусь до нормального компа проверю
спасибо

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


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





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

вот как было

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

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

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

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

Так что я вижу одно правильное решение - не использовать стандартный механизм скидок.
26.08.2014 15:07
 
я уже его и не использую. этот подходит
но тут такое НО
выгрузка в яндекс маркет подгребает цену из карточки (
она не соответствует цене pricegd после вышеперечисленных манипуляций
26.08.2014 17:23
 
Цитата:
aldemko выгрузка в яндекс маркет подгребает цену из карточки (
О чем и речь, предупреждали же.
А стандартную скидку выгрузка в маркет учитывает?
26.08.2014 17:55
 
да учитывает(
но не отображает на сайте
палка в 2 концах
стандартная скидка действует на яндекс, но не действует на сайт - пинком с яндекса - мол не соответствие цены
не стандартная скидка не соответствует яндуксу но соответствует цене на сайте - яндекс спс на сайте все ок вы нам не верные данные прислали, досвидания
26.08.2014 20:20
 
Значит дописывать pricegd для учета стандартной скидки.
Т.о. ищи битриксописателя любой квалификации, задача несложная, должно быть недорого.
Поглядел описание компонент - добавить параметр можно, несложно, но браться за это с нулевой квалификацией - боюсь снова костыли городить.
"Спасибо" vdm от:
29.08.2014 08:02
 
Да. будем отдавать кому-то в след месяце.
чтобы переделали.
а еще такой вопросик.
скидки сейчас которые 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
 
Ну выведи математику, посмотри сам

К примеру - так
[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
 
Конечно по-нормальному там округление нужно (в настройках цен есть где-то параметры округления?). Но рубль это как-то много.

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


Опции темы



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

Все в прочитанное - Донат - RSS - - Карта - Вверх

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