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

Материал из Umicms
Версия от 07:30, 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
<h3>Информация о покупателе</h3>
<p>%emarket getCustomerInfo()%</p>
<h3>Список покупок</h3>

<table width="100%" rules="rows" cellspacing="0" cellpadding="0" border="0" id="order_block">
	<thead>
		<tr class="orow_hat">
			<th>#</th>
			<th>Наименования</th>
			<th>Опции</th>
			<th>Q</th>
			<th>Цена</th>
			<th>Сумма</th>
			<th>Скидки</th>
			<th>&nbsp;</th>
		</tr>
	</thead>
	<tbody>
		%items%
	</tbody>
</table>
<div class="basket_remove_all">
<a href="/emarket/basket/remove_all/">Очистить корзину</a>
</div>
<h3>Скидка на заказ</h3>
%emarket discountInfo(%discount_id%)%

<h3>Доставка</h3>
%delivery-price%

<h3>Сумма</h3>
%total-price%
<p>Товаров в корзине: %total-amount%</p>

%users auth('basket')%

END;

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