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 - параметры этой скидки какие?
Часовой пояс GMT +3, время: 08:47.

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