Несколько маленьких полезных функций для верстальщиков и разработчиков

Я не случайно в названии этой статьи верстальщиков поставил впереди. Разработчики и так придумают, как получить функционал, описанный ниже, а вот для верстальщиков (которые ни разу не разработчики) это более напряжно. Хотя, думаю, и разработчики заценят эти маленькие фишки, т.к. они позволяют получить результат меньшим числом нажатий на клавиши. E::IsUser() — авторизован ли пользователь на сайте
E::IsAdmin() — авторизован ли пользователь и является ли он админом
E::UserId() — если пользователь авторизован, то возвращает его ID
E::User() — если пользователь авторизован, то возвращает сущность User
E::ActivePlugin(имя_плагина) — проверяет, активирован ли указанный плагин

Примеры использования в шаблонах:
{if !E::IsUser()}
  {* включаем шаблон, который показываем только неавторизованным посетителям *}
  {include file="template_for_guests.tpl"}
{/if}
{if E::IsAdmin()}
  {* здесь может быть какая-то инфа только для админов *}
{/if}
{if $oTopic->GetUserId()==E::UserId()}
  {* тут какие-то действия для автора топика *}
{/if}
{if E::IsUser()}
  Ваш логин: {E::User()->GetLogin()}
{/if}
{if E::ActivePlugin("yametrika")}
  Ура! У нас есть Яндекс.Метрика!
{/if}
Я специально примеры пишу для использования в шаблонах, хотя, разумеется, эти функции работают, где угодно — и в экшенах, и в модулях и т.д. Но, разработчики сами разберуться, как грамотно их заюзать. И, кстати, о разработчиках — последняя фишка уже для них.

В большинстве компонентов движка для доступа к методам модулей можно использовать такую конструкцию:
$this->Module_Method();
Но иногда такой подход не годится (например, в плагинах/функциях для Viewer). И там приходится писать более громоздкие конструкции:
Engine::getInstance()->Module_Method();
Вот для таких случаев и придуман более простой вариант:
E::Module_Method();
Ничего принципиально нового эта форма записи не несет, только лишь сокращает запись и все.

Похожие статьи


19 комментариев

0
Спасибо, конечно это очень пригодится для тех кто ни разу не разработчик, вроде меня.
0
Я могу многого не понимать, но в чем отличие E::IsUser() от {if $oUserCurrent}? Именно на практике.
0
Уже отвечал на подобный вопрос, но скопирую ответ сюда.

$oUserCurrent — это переменная, которая передается в шаблон из экшена (и/или модуля). Если ее передать — она будет работать, а если нет — всегда будет возвращать false, даже если пользователь на сайте авторизован. Т.е. получается, что все от программиста зависит — забыл/не забыл он эту переменную передать в шаблон.

А E::IsUser() — это функция, которая всегда отработает в шаблоне корректно и гарантированно вернет результат — авторизован ли юзер.

Собственно, это то же самое, если написать:
(bool)Engine::getInstance()->User_GetUserCurrent()
Только гораздо короче, и запомнить проще.
Отредактирован:
0
Плагины, написанные с использованием этих функций, будут совместимы с LS?
0
Нет, в ЛС таких функций нет
+1
Наверное, для LS был бы востребован плагин совместимости LS с Alto… :)
0
Наверное, для LS был бы востребован плагин совместимости LS с Alto… :)
))))))))) Смешная шутка.
0
… да в ней намёк
0
Почему я написал в блоке условие
{if E::IsUser()}
текст
{/if}
он мне выдает такое сообщение
Fatal error: Call to a member function getId() on a non-object in
сайт на последней версии alto из github
0
Наверняка проблема не в функции E::IsUser(), а в чем-то другом
0
не думаю, т.к. вот такая конструкция ошибки не дает
{if !E::IsUser()}
тут пусто
{else}
то, что мне надо
{/if}

файл block.blogs_top.tpl
0
И это как раз подтверждает мои слова. Если б проблема была в E::IsUser(), то !E::IsUser() точно так же ошибку выдавало бы
0
как в шаблоне зная id вытащить его логин?
0
Как-то так:
{$oUser = E::User_GetUserById($nId)}
{if $oUser}
  {$sUserLogin = $oUser->GetLogin}
{/if}

И если все ОК, то в $sUserLogin будет логин юзера. Но это плохая практика, все же лучше это не в шаблоне делать, а в экшене или через сущность
0
Мне на время, потом всеравно переписать часть кода придется.
0
Не работает. Если даже явно указать {$oUser = E::User_GetUserById(1)}
0
А, ну конечно, скобки забыл:
{$sUserLogin = $oUser->GetLogin()}
0
Спасибо.
0
Почему-то не работает эта конструкция

{if E::ActivePlugin("yametrika")}
  Ура! У нас есть Яндекс.Метрика!
{/if}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.