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 снаружи или вычислена внутри. Т.е. лучше бы найти то место, где все скидки вычисляются изначально, там и менять базовую цену.
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 для учета стандартной скидки.
Т.о. ищи битриксописателя любой квалификации, задача несложная, должно быть недорого.
Поглядел описание компонент - добавить параметр можно, несложно, но браться за это с нулевой квалификацией - боюсь снова костыли городить.
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, время: 10:18.

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