Как запретить гостям оформлять заказы (TPL)
Задача: Сделать невозможным оформить заказ незарегистрированным пользователям, но при этом оставить все другие возможности интернет магазина. Гость может смотреть каталог, добавлять товары в корзину, но не может оформить заказ, пока не пройдет авторизацию
Решение: В TPL шаблонезаторе данная задача решается не очевидным на первый взгляд способом.
Мы будем строить описанную в задаче логику на основе макроса %users auth()%. Данный макрос выводит форму авторизации для пользователя либо информацию об авторизованном пользователе. Для наших целей, мы создадим еще один шаблон для данного макроса. Шаблоны для макроса хранятся в папке ~\tpls\users\. Для примера назовем этот шаблон basket.tpl.
Суть данного шаблона заключается в том, что он будет отвечать за внешний вид кнопки "Оформить заказ". Если пользователь авторизован, он будет выводить кнопку, для оформления заказа, если же пользователь - гость, то в шаблоне можно написать информационное сообщение или дать ссылку на страницу авторизации.
Для примера наш шаблон будет выглядеть следующим образом:
<?php $FORMS = Array();
$FORMS['login'] = <<<END
<input type="submit" value="ДЛЯ ОФОРМЛЕНИЯ ЗАКАЗА ТРЕБУЕТСЯ АВТОРИЗОВАТЬСЯ" />
END;
$FORMS['logged'] = <<<END <form action="%pre_lang%/emarket/purchase/"> <input type="submit" value="Оформить заказ" /> </form> END; ?>
Теперь нам нужно вставить вызов данного шаблона вместо кнопки оформить заказ в шаблоне карзины. Для этого перейдем в шаблон корзины в файле ~\tpls\emarket\default.tpl, и заменим:
<form action="%pre_lang%/emarket/purchase/"> <input type="submit" value="Оформить заказ" /> </form>
на вызов нашего шаблона
%users auth('basket')%
Теперь блок $FORMS['order_block'] = <<<END должен выглядеть следующим образом:
$FORMS['order_block'] = <<<END
Информация о покупателе
%emarket getCustomerInfo()%
Список покупок
<thead> </thead> <tbody> %items% </tbody># | Наименования | Опции | Q | Цена | Сумма | Скидки |
---|
<a href="/emarket/basket/remove_all/">Очистить корзину</a>
Скидка на заказ
%emarket discountInfo(%discount_id%)%
Доставка
%delivery-price%
Сумма
%total-price%
Товаров в корзине: %total-amount%
%users auth('basket')%
END;
После этих действий все незарегистрированные пользователи уже не смогут оформлять заказы, но при этом смогут просматривать каталоги и пользоваться корзиной.