+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Способ оплаты и тип доставки указываем на странице с корзиной

Задача стояла такая: на странице с корзиной (/basket/) пользователь выбирает способ доставки и оплаты, после переходит на страницу подтверждения заказа (/basket/confirm/).

Для её решения я вывел список способов доставки и оплаты в шаблоне компонента корзина:
../components/bitrix/sale.basket.basket/basket-page/result_modifier.php:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

// Способы доставки
$resDelivery = CSaleDelivery::GetList(Array(),Array("LID" => SITE_ID, "ACTIVE" => "Y"),false,false,Array());

if($arDelivery = $resDelivery->Fetch()) {
   do {
      $arResult["DELIVERY_TYPE"][] = $arDelivery;
   } while ($arDelivery = $resDelivery->Fetch());
}

// Способы оплаты
$arPaySystem   = Array();
$resPaySystem   = CSalePaySystem::GetList();

while ($arPaySystemItem = $resPaySystem->Fetch()) {
   $arResult["PAY_SYSTEM"][] = $arPaySystemItem;
}

Затем вывел эти массивы в файле basket_items.php:
<?if($arResult["DELIVERY_TYPE"]):?>
   <div class="delivery-type">
      <header>Способ доставки:</header>
      <?foreach($arResult["DELIVERY_TYPE"] as $key=>$arDType):?>
         <input type="radio" name="DELIVERY_TYPE" id="dtype<?=$arDType["ID"]?>" value="<?=$arDType["ID"]?>" <?if(!$key):?>checked<?endif;?> />
         <label for="dtype<?=$arDType["ID"]?>"><?=$arDType["NAME"]?></label>
      <?endforeach;?>
   </div>
<?endif;?>

<?if($arResult["PAY_SYSTEM"]):?>
   <div class="pay-system">
      <header>Способ оплаты:</header>
      <?foreach($arResult["PAY_SYSTEM"] as $key=>$arPSystem):?>
         <input type="radio" name="PAY_SYSTEM" id="psystem<?=$arPSystem["ID"]?>" value="<?=$arPSystem["ID"]?>" <?if(!$key):?>checked<?endif;?> />
         <label for="psystem<?=$arPSystem["ID"]?>"><?=$arPSystem["NAME"]?></label>
      <?endforeach;?>
   </div>
<?endif;?>

Теперь осталось поймать выбранные значения способов доставки и оплаты. Делать это нужно на странице с корзиной - /basket/ в моем случае:
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Корзина покупок");

if($_REQUEST["BasketOrder"] == 'BasketOrder') { // Если был отправлен заказ
   $user      = new CUser;
   $fields   = Array(
      "UF_DELIVERY_TYPE"   => $_REQUEST["DELIVERY_TYPE"],
      "UF_PAY_SYSTEM"   => $_REQUEST["PAY_SYSTEM"]
   );
   $user->Update($USER->GetID(), $fields);
}

Как видите, я решил сохранить данные в пользовательских полях пользователя, поэтому их нужно предварительно создать.

И по традиции - если кто-то предложит лучшее решения, буду очень рад :)
Но за последние сутки на форуме никто не решился изучить этот вопрос.

P.S. История получила продолжение. При очередном просмотре ТЗ заказчик сказал "а зачем нам выбирать оплату и заказ на странице корзины? давайте уберем!"...

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA