Как запретить гостям оформлять заказы (TPL)

Материал из Umicms
Версия от 07:23, 17 февраля 2012; Romario (обсуждение | вклад) (Новая страница: «Задача: Сделать невозможным оформить заказ незарегистрированным пользователям, но при эт…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Задача: Сделать невозможным оформить заказ незарегистрированным пользователям, но при этом оставить все другие возможности интернет магазина. Гость может смотреть каталог, добавлять товары в корзину, но не может оформить заказ, пока не пройдет авторизацию

Решение: В 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;

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