Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Помогите пожалуйста новичку

00 голосов
6
Здравствуйте!
Помогите пожалуйста новичку решить следующую задачу: необходимо добавить возможность изменять цену доставки на последнем этапе формирования заказа (перед его подтверждением) НО только для пользователей с 1 единственного IP адреса (для операторов Интернет-магазина принимающих телефонные заказы в Область - где нужно в ручную расчитывать стоимость доставки)... Насколько я понял для этого требуется отредактировать файл: order_full.php
Как грамотно подправить код для решения этой задачи?
спросил 10 Сен, 13 от Lexius (120 баллов)

6 Ответы

00 голосов
После кода:

GetMessage("SALE_CONTENT_DELIVERY")?>:</b></font>
</td>
<td class="tablebody" align="right" colspan="3">
<font class="tablebodytext"><?= SaleFormatCurrency($DELIVERY_PRICE, $BASE_LANG_CURRENCY) ?></font>

Прописываю код:
if (getenv('REMOTE_ADDR') == '88.88.88.888')
{
<form id="del_correct" name="del_correct" method="post" action="">
<label>
Исправить стоимость доставки (для заказов с доставкой в Московскую Область):
<input type="text" name="del" id="del" value="'.$DELIVERY_PRICE.'"/>
</label>
<input type="submit" name="submit" id="submit" value="OK" />
</form>
$DELIVERY_PRICE = $_POST['del'];
}

Но не работает smile:(
ответил 10 Сен, 13 от Kania (5,180 баллов)
00 голосов
<?
if(getenv('REMOTE_ADDR') == '88.88.88.888')
{
echo '<br>Исправить стоимость доставки (для заказов с доставкой в Московскую Область):';
echo '<input type="Text" name="del" value="'.$DELIVERY_PRICE.'"><input type="Hidden" name="del" value="'.$DELIVERY_PRICE.'">';
$DELIVERY_PRICE = $_POST['del'];
}
?>

Такой код заработал НО сумма доставки в сформированном заказе не меняется smile:(
ответил 07 Дек, 13 от Lexius (120 баллов)
00 голосов
Поделюсь дальнейшими соображениями. Насколько я понял код нужно вводить в другом формате:

<?
if(getenv('REMOTE_ADDR') == '88.88.88.888')
{
echo '<br>Если нужно - исправьте стоимость доставки (для заказов с доставкой в Область):';
echo '<input type="text" name="del" size="33" class="inputtext">';
$DELIVERY_PRICE1 = $_REQUEST["del"];
}
?>

И на 3-м шаге (выбор службы доставки).

Далее я нашел код исполняемый после 3-го шага и добавил туда условия для детектирования доставки с ID "170" и "5":

// DELIVERY
// Рассчитываем стоимость доставки
// $DELIVERY_ID == 128 - почтовая доставка
$DELIVERY_ID = IntVal($_REQUEST["DELIVERY_ID"]);
$DELIVERY_PRICE = 0;
if (($DELIVERY_ID > 0) && !($arDeliv = CSaleDelivery::GetByID($DELIVERY_ID))) $errorMessage .= GetMessage("SALE_DELIVERY_NOT_FOUND")."<br>";
elseif (($DELIVERY_ID == 128) && $arDeliv) $DELIVERY_PRICE = $ORDER_PRICE / 10 * 3;
elseif (($DELIVERY_ID == 170) && $arDeliv) $DELIVERY_PRICE = $DELIVERY_PRICE1 + 300;
elseif (($DELIVERY_ID == 5) && $arDeliv) $DELIVERY_PRICE = $DELIVERY_PRICE1;
elseif (($DELIVERY_ID > 0) && $arDeliv) $DELIVERY_PRICE = roundEx(CCurrencyRates::ConvertCurrency($arDeliv["PRICE"], $arDeliv["CURRENCY"], $BASE_LANG_CURRENCY), SALE_VALUE_PRECISION);

НО вся проблема в том что $DELIVERY_PRICE1 НЕ передается в код приведенный выше. Где ошибка? smile;)
ответил 20 Март, 14 от Lexius (120 баллов)
00 голосов
Совершенно неясно как правильно делать форму. Код типа:

Код
<form method="post"> 
<input type="text" name="DELIVERY_PRICE1" size="40" class="inputtext">;
<input type="submit" name="submit" id="submit" value="OK" />  
</form>


Не прокатывает smile:( После нажатия ОК происходит откат с третьей на самую первую форму (выбор физического или юридического лица) и все-равно ничего не запоминается smile:(

А вот этот код ТОЧНО работает:

Код
// DELIVERY 
// Рассчитываем стоимость доставки 
// $DELIVERY_ID == 128 - почтовая доставка 
$DELIVERY_ID = IntVal($_REQUEST["DELIVERY_ID"]); 
$DELIVERY_PRICE = 0; 
$DELIVERY_PRICE1 = IntVal($_REQUEST["DELIVERY_PRICE1"]);
if (($DELIVERY_ID > 0) && !($arDeliv = CSaleDelivery::GetByID($DELIVERY_ID))) $errorMessage .= GetMessage("SALE_DELIVERY_NOT_FOUND")."<br>"; 
elseif (($DELIVERY_ID == 128) && $arDeliv) $DELIVERY_PRICE = $ORDER_PRICE / 10 * 3; 
elseif (($DELIVERY_ID == 170) && $arDeliv) $DELIVERY_PRICE = $DELIVERY_PRICE1 + 300; 
elseif (($DELIVERY_ID == 5) && $arDeliv) $DELIVERY_PRICE = $DELIVERY_PRICE1; 
elseif (($DELIVERY_ID > 0) && $arDeliv) $DELIVERY_PRICE = roundEx(CCurrencyRates::ConvertCurrency($arDeliv["­PRICE"], $arDeliv["CURRENCY"], $BASE_LANG_CURRENCY), SALE_VALUE_PRECISION);


Причем если ЗДЕСЬ прописать скажем $DELIVERY_PRICE1 = 999;
то стоимость доставки станет такой или +300 рублей в зависимости от типа доставки. Так что такой код рабочий. Проблема в том что я не понимаю как правильно сделать ФОРМУ, получить из нее значение и передать его в переменную DELIVERY_PRICE1 ? Может подскажете? smile;)
ответил 12 Июль, 14 от Lexius (120 баллов)
00 голосов
На всякий случай приведу кусок кода с этапом 3:

Код
        //------------------ STEP 3 ---------------------------------------------- 
        elseif ($CurrentStep == 3): 
        //------------------------------------------------------------------------ 
        if(CModule::IncludeModule("statistic")) 
        { 
            $event1 = "eStore"; 
            $event2 = "Step4_3"; 

            foreach($arProductsInBasket as $ar_prod) 
            { 
                $event3 .= $ar_prod["PRODUCT_ID"].", "; 
            } 
            $e = $event1."/".$event2."/".$event3; 

            if(!in_array($e, $_SESSION["ORDER_EVENTS"])) // проверим не было ли такого события в сессии 
            { 
                    CStatistic::Set_Event($event1, $event2, $event3); 
                    $_SESSION["ORDER_EVENTS"][] = $e; 
            } 
        } 
         
        // создать список доставки 
        $dbDelivery = CSaleDelivery::GetList( 
            array("SORT"=>"ASC", "NAME"=>"ASC"), 
            array("LID" => SITE_ID, 
                    "+<=WEIGHT_FROM" => $ORDER_WEIGHT, 
                    "+>=WEIGHT_TO" => $ORDER_WEIGHT, 
                    "+<=ORDER_PRICE_FROM" => $ORDER_PRICE, 
                    "+>=ORDER_PRICE_TO" => $ORDER_PRICE, 
                    "ACTIVE" => "Y", 
                    "LOCATION" => $DELIVERY_LOCATION 
                    ) 
            ); 
        $bFirst=True; 
        $sout=''; 
        while($arDelivery = $dbDelivery->Fetch()) 
            { 
            if(IntVal($DELIVERY_ID) == IntVal($arDelivery["ID"]) || IntVal($DELIVERY_ID) <= 0 && $bFirst) 
                { $s_checked=' checked';} 
            else{ $s_checked='';} 
             
            $bFirst = False; 
             
            $sout.='<tr><td class="tablebody" valign="top" width="0%"> 
                <input type="radio" class="inputradio" id="ID_DELIVERY_ID_'.$arDelivery["ID"].'" name="DELIVERY_ID"  
                value="'.$arDelivery["ID"].'"'.$s_checked.'> 
                </td> 
                <td class="tablebody" valign="top" width="100%"> 
                <font class="tablebodytext"><label for="ID_DELIVERY_ID_'.$arDelivery["ID"].'"><b>'.$arDelivery["NAME"].'</b><br>'; 
             
            if(IntVal($arDelivery["PERIOD_FROM"]) > 0 || IntVal($arDelivery["PERIOD_TO"]) > 0) 
                { 
                $sout.=GetMessage("SALE_DELIV_PERIOD"); 
                if(IntVal($arDelivery["PERIOD_FROM"]) > 0) $sout.=" ".GetMessage("SALE_FROM")." ".IntVal($arDelivery["PERIOD_FROM"]); 
                if(IntVal($arDelivery["PERIOD_TO"]) > 0) $sout.=" ".GetMessage("SALE_TO")." ".IntVal($arDelivery["PERIOD_TO"]); 
                if($arDelivery["PERIOD_TYPE"] == "H") $sout.=" ".GetMessage("SALE_PER_HOUR")." "; 
                    elseif($arDelivery["PERIOD_TYPE"]=="M") $sout.=" ".GetMessage("SALE_PER_MONTH")." "; 
                    else $sout.=" ".GetMessage("SALE_PER_DAY")." "; 
                $sout.="<br>"; 
   &nbsp
ответил 12 Ноя, 14 от Lexius (120 баллов)
00 голосов
Такая форма также не срабатывает:

Код
<? 
if(getenv('REMOTE_ADDR') == '88.88.888.888') 
{ 
echo '<br>Если нужно - исправьте стоимость доставки (для заказов с доставкой в Область):'; 
echo '<input type="text" name="DELIVERY_PRICE1" size="40" class="inputtext">';
} 
?>


Вставляю ее сразу после участка кода:

Код
 //echo GetMessage("STOF_SELECT_DELIVERY")."<br><br>"; - старый вариант 
                            echo "Выберите способ доставки, с помощью которого должен быть доставлен Ваш заказ, и нажмите кнопку ''Продолжить''. <strong><font color='red'>Если Вы не видите ни одного доступного способа доставки, значит сумма Вашего заказа меньше 1000 рублей! Нажмите кнопку ''Назад'' для отмены или дополнения Вашего заказа!</strong></font><br><br>"; 
                            ?></font></td> 
                            </tr> 
                            <?=$sout?> 
                            </table> 
                        </td></tr></table> 
                    </td> 
                </tr> 


Всю голову уже сломал, не пойму в чем дело smile:( Вроде все правильно а НЕ РАБОТАЕТ smile:(
ответил 09 Март, 15 от Lexius (120 баллов)

Похожие вопросы

0 голосов
1 ответ
спросил 31 Март, 14 от heroy (100 баллов)
0 голосов
3 ответов
спросил 27 Март, 14 от MARRIGAN (100 баллов)
0 голосов
2 ответов
спросил 05 Март, 14 от Soulmir (100 баллов)
0 голосов
1 ответ
0 голосов
3 ответов
спросил 08 Май, 14 от HuT (100 баллов)