Способ оплаты и тип доставки указываем на странице с корзиной
Запись от 24.09.2014
Задача стояла такая: на странице с корзиной (/basket/) пользователь выбирает способ доставки и оплаты, после переходит на страницу подтверждения заказа (/basket/confirm/).
Для её решения я вывел список способов доставки и оплаты в шаблоне компонента корзина:
../components/bitrix/sale.basket.basket/basket-page/result_modifier.php:
Затем вывел эти массивы в файле basket_items.php:
Теперь осталось поймать выбранные значения способов доставки и оплаты. Делать это нужно на странице с корзиной - /basket/ в моем случае:
Как видите, я решил сохранить данные в пользовательских полях пользователя, поэтому их нужно предварительно создать.
И по традиции - если кто-то предложит лучшее решения, буду очень рад
Но за последние сутки на форуме никто не решился изучить этот вопрос.
P.S. История получила продолжение. При очередном просмотре ТЗ заказчик сказал "а зачем нам выбирать оплату и заказ на странице корзины? давайте уберем!"...
Для её решения я вывел список способов доставки и оплаты в шаблоне компонента корзина:
../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. История получила продолжение. При очередном просмотре ТЗ заказчик сказал "а зачем нам выбирать оплату и заказ на странице корзины? давайте уберем!"...