Инструменты пользователя

Инструменты сайта


limb3:ru:tutorials:shop:step4-3

Шаг4.3 Отображение профайла пользователя

Различные способы передачи данных в MACRO-шаблон

Для отображения информации по текущему пользователю необходимо передать объект пользователя в шаблон. Это можно сделать несколькими способами:

  • Передавать пользователя в шаблон из контроллера. Для этого можно создать базовый контроллер, который будет заниматься передачей данных в шаблон, а остальные контроллеры отнаследовать от него.
  • Получать пользователя при помощи php-вставки непосредственно в MACRO-шаблоне.
  • Передавать данные о пользователе при помощи специального фильтра.
  • Получение данных прямо в шаблоне через toolkit.

Мы покажем все способы и остановимся на получение данных в шаблоне через toolkit.

Передача данных в шаблон из контроллера

Для этого способа необходоимо создать базовый класс BaseShopController со следующим кодом:

class BaseShopController extends lmbController
{
  function performAction()
  {
    $this->view->set('user', $this->toolkit->getUser());
    return parent :: performAction();
  }
}

После этого в MACRO шаблоне объект пользователя будет доступен в корневом контейнере данных, то есть можно будет использовать такие выражения:

<? if($this->user()->is_logged_in) { ?>
  Logged in as :{{$#user.name}}
<? } ?>

Использование php-вставок в MACRO-шаблоне

MACRO-позволяет использовать обычные php-вставки. Поэтому мы можем легко получить тулкит прямо в шаблоне и передать объект user в нужный нам контейнер данных, например:

[...]
<dl id="profile">
<dt>Profile</dt>
<dd>
<? if(lmbToolkit :: instance()->getUser()->is_logged_in) { ?>
  Logged in as :{{$#user.name}}
<? } ?>
</dd>
</dl>
[...]

Если ваш верстальщик нормально относится к подобным php-вставкам в шаблонах - можете смело воспользоваться таким методом.

Использование фильтра

Этот способ предусматривает добавление нескольких строк в фильтр:

class SampleFilter implements lmbInterceptingFilter
{
  function run($filter_chain)
  {
    $toolkit = lmbToolkit :: instance();
    $user = $toolkit->getUser();
    [...]
    $toolkit->getView()->set('user', $user);  
    [...]
  }
}

Данная небольшая модификация позволит использовать user из корневого контейнера данных, как в способе с базовым контроллером.

Получение данных прямо в шаблоне через toolkit

Начиная с версии пакета WEB_APP 0.4 (соответствует релизу 2007.2) toolkit поддерживает получение данных через базовые методы get(), к кому же toolkit стал доступен в шаблоне в корневой контейнере данных. Все это позволяет даже не заботиться о передаче user-а в шаблон, а действовать в стиле PullView:

[...]
<?php
  $user = lmbToolkit :: instance()->getUser();
  if($user->is_logged_in) { ?>
    <dl id="profile">
      <dt>Profile</dt>
      <dd>
	<p>Logged in as :{$user.name}</p>
	<p>email: {$user.email}</p>
	<p><a href="/user/logout">Logout</a></p>
      </dd>
    </dl>
  <? } ?>
[...]

На этом способе мы и остановимся.

Как видите, способов достаточно много. Начиная с релиза 2007.2, мы рекомендуем использовать способ получения данных в шаблоне через toolkit.

Предварительные итоги

Если вы модифицировали шаблон front_page_layout.phtml, то теперь после аутентификации на странице /login вы сможете увидеть данные своей учетной записи в левой части страницы.

Далее

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
     __ ______  __  __  _   __   ___ 
 __ / //_  __/ / / / / | | / /  / _ \
/ // /  / /   / /_/ /  | |/ /  / , _/
\___/  /_/    \____/   |___/  /_/|_|
 
limb3/ru/tutorials/shop/step4-3.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)