celvin59691
Заблокирован
- Сообщения
- 14
- Реакции
- 11
- Баллы
- 5,500
Многие из вас встречались с проблемой, когда надо в шаблонах сделать условие (пример: чтобы гость видел текст, а пользователи - нет; чтобы гости видели одно, а пользователи другое; и т.д.), но не знали какие теги использовать.
Я нашёл на официальном сайте тему от модератора, где он описывает популярные условия.
Оригинальный автор: celvin59691
Авторы перевода: celvin59691
Мы их перевели специально для xenforo.info Если будете копировать на свой сайт - оставляйте ссылку на авторов перевода и на XFR!
Операторы можно расширить используя AND, OR, xen:else и xen:elseif.
Замена == на != в примерах ниже будет менять условие с положительного на отрицательное.
К примеру, <xen:if is="{$visitor.user_id} == x"> является положительным, а <xen:if is="{$visitor.user_id} != x"> отрицательным.
Там, где аргумент имеет только один параметр, вставка ! перед параметром имеет тот же самый эффект.
К примеру, <xen:if is="{$visitor.user_id}"> является положительным, а <xen:if is="!{$visitor.user_id}"> уже будет отрицательным.
При работе с массивами ставьте ! прямо перед аргументом.
К примеру, <xen:if is="in_array({$forum.node_id}, array(x, y, z))"> будет положительным, а <xen:if is="!in_array({$forum.node_id}, array(x, y, z))">отрицательным.
Используя xen:else и xen:elseif, мультиоператоры можно укомплектовать в один.
Самая проста форма использования xen:else выглядит так:
<xen:if is="{$forum.node_id} == x">
Этот контент будет показан в форуме x
<xen:else />
Этот контент будет показан в любом другом месте
</xen:if>
Более расширенное условие с мультиоператорами используя xen:elseif будет выглядеть так:
<xen:if is="{$forum.node_id} == x">
Этот контент будет показан в форуме x
<xen:elseif is="{$forum.node_id} == y" />
Этот контент будет показан в форуме y
<xen:elseif is="{$forum.node_id} == z" />
Этот контент будет показан в форуме z
<xen:else />
Этот контент будет показан в любом другом месте
</xen:if>
В зависимости от того с каким шаблоном вы ведёте работу, Вам может понадобится использовать $user вместо $visitor; $visitor всегда является записью текущего залогиненного пользователя, а $user это запись обработчика (пример: автор сообщения, список пользователей, список пользователей онлайн и т.д.)
При работе с шаблоном PAGE_CONTAINER можно передавать переменные из шаблонов представления (category_view, forum_view,thread_view и т.д.), используя xen:container. Это справедливо ко всем шаблонам, которые подключаются к шаблону PAGE_CONTAINER(допустим, шаблоны header или ad_header). Например, чтобы использовать переменную $forum.node_id, нужно добавить в шаблон следующее:<xen:container var="$forumId">{$forum.node_id}</xen:container>.
Точно так же, для переменной $threadId нужно добавить следующее: <xen:container var="$threadId">{$thread.thread_id}</xen:container>.
Переменные X, Y или Z, использующиеся в примерах, должны быть заменены на их актуальные значения.
Отображение содержимого только авторизованным пользователям (не показывать гостям):
<xen:if is="{$visitor.user_id}">
Содержимое видно только авторизованным пользователям
</xen:if>
Отображение содержимого только гостям (не показывать авторизованным пользователям):
<xen:if is="!{$visitor.user_id}">
Содержимое видно только гостям
</xen:if>
Отображение различного содержимого гостям и авторизованным:
<xen:if is="{$visitor.user_id}">
Это содержимое видно только авторизованным пользователям
<xen:else />
Это содержимое видно только гостям
</xen:if>
Отображение содержимого определенной группе пользователей:
<xen:if is="{xen:helper ismemberof, $visitor, X}">
Это содержимое видно только группе с ID=X
</xen:if>
Скрытие содержимого от определенной группы пользователей:
<xen:if is="!{xen:helper ismemberof, $visitor, X}">
Это содержимое скрыто от группы с ID=X
</xen:if>
Отображение содержимого нескольким группам пользователей:
<xen:if is="{xen:helper ismemberof, $visitor, X, Y}">
Это содержимое видно только группам с ID=X и ID=Y
</xen:if>
Скрытие содержимого от нескольких групп пользователей:
<xen:if is="!{xen:helper ismemberof, $visitor, X, Y}">
Это содержимое скрыто от групп с ID=X и ID=Y
</xen:if>
Отображение содержимого только администраторам:
<xen:if is="{$visitor.is_admin}">
Это содержимое видно только администраторам
</xen:if>
Отображение содержимого только модераторам:
<xen:if is="{$visitor.is_moderator}">
Это содержимое видно только модераторам
</xen:if>
Отображение содержимого только администраторам и модераторам:
<xen:if is="{$visitor.is_admin} OR {$visitor.is_moderator}">
Это содержимое видно толькоадминистраторам и модераторам
</xen:if>
Отображение содержимого только определенному пользователю:
<xen:if is="{$visitor.user_id} == X">
Это содержимое видно только пользователю с ID=X
</xen:if>
Отображение содержимого нескольким пользователям:
<xen:if is="in_array({$visitor.user_id}, array(X, Y, Z))">
Это содержимое видно только пользователям с ID=X, ID=Y и ID=Z.
</xen:if>
Отображение содержимого после первого сообщения в теме:
<xen:if is="{$post.position} == 0">
Это содержимое видно после первого сообщения в теме
</xen:if>
Отображение содержимого после первого сообщения в теме или личной переписке:
<xen:if is="{$post.position} == 0 AND !{$message.conversation_id}">
Это содержимое видно после первого сообщения в теме или личной переписке
</xen:if>
Отображение содержимого после X сообщений в теме на каждой странице:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == X AND !{$message.conversation_id}">
Это содержимое видно после X сообщений в теме на каждой странице
</xen:if>
Отображение содержимого после X сообщений в теме или личной переписке на каждой странице:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == X">
Это содержимое видно после X сообщений в теме или личной переписке на каждой странице
</xen:if>
Отображение содержимого после X сообщений в теме на каждой странице, только в разделах Y или Z:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == X AND in_array({$thread.node_id}, array(Y, Z))">
Это содержимое видно после X сообщений в теме на каждой странице, только в разделах Y и Z
</xen:if>
Отображение содержимого после X сообщений в теме на каждой странице, кроме разделов Y и Z:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x AND !in_array({$thread.node_id}, array(Y, Z))">
Это содержимое видно после X сообщений в теме на каждой странице, кроме разделов Y и Z
</xen:if>
Отображение содержимого только на определенных страницах:
<xen:if is="{$contentTemplate} == 'XYZ'">
Это содержимое видно только на странице XYZ
</xen:if>
Отображение содержимого только в определенной категории:
<xen:if is="{$category.node_id} == X">
Это содержимое видно только в категории X
</xen:if>
Примечание: чтобы это работало, необходимо включить опцию "Создавать страницы для категорий" в настройках:
Панель администратора -> Настройки -> Список разделов форума и узлов.
Отображение содержимого только в определенном разделе:
<xen:if is="{$forum.node_id} == X">
Это содержимое видно только в разделе X
</xen:if>
Отображение содержимого только в нескольких определенных разделах:
<xen:if is="in_array({$forum.node_id}, array(X, Y, Z))">
Это содержимое видно только в разделах X, Y и Z
</xen:if>
Отображение содержимого только в определенной теме:
<xen:if is="{$threadId} == X">
Это содержимое видно только в теме X
</xen:if>
Отображение содержимого только в нескольких определенных темах:
<xen:if is="in_array({$threadId}, array(X, Y, Z))">
Это содержимое видно только в темах X, Y и Z
</xen:if>
Отображение содержимого только в определенном сообщении:
<xen:if is="{$postId} == X">
Это содержимое видно только в сообщении X
</xen:if>
Отображение содержимого только в нескольких определенных сообщениях:
<xen:if is="in_array({$postId}, array(X, Y, Z))">
Это содержимое видно только в сообщениях X, Y и Z
</xen:if>
Отображение содержимого если автор сообщения является автором темы:
<xen:if is="{$post.user_id} == {$thread.user_id}">
Это содержимое видно если автор является автором темы
</xen:if>
Отображение содержимого пользователям, у которых 0 сообщений:
<xen:if is="{$visitor.message_count} == 0">
Это содержимое видно только пользователям, у которых 0 сообщений
</xen:if>
Отображение содержимого пользователям, у которых более X сообщений:
<xen:if is="{$visitor.message_count} > X">
Это содержимое видно только пользователям, у которых более X сообщений
</xen:if>
Отображение содержимого пользователям, у которых менее X сообщений:
<xen:if is="{$visitor.message_count} < X">
Это содержимое видно только пользователям, у которых менее X сообщений
</xen:if>
Отображение содержимого пользователям, которые не подтвердили свой почтовый адрес:
<xen:if is="{$isAwaitingEmailConfirmation}">
Это содержимое видно только пользователям, которые не подтвердили свой почтовый адрес
</xen:if>
Отображение содержимого пользователям, которые пришли с поисковых систем:
<xen:if is="{$visitor.from_search}">
Это содержимое видно только пользователям, которые пришли с поисковых систем
</xen:if>
Первый пост будет периодически обновляться новыми примерами. Был бы очень рад помощи в виде примеров и их описании в комментариях!
Я нашёл на официальном сайте тему от модератора, где он описывает популярные условия.
У Вас недостаточно прав для просмотра ссылок.
Вход или Регистрация
Авторы перевода: celvin59691
Мы их перевели специально для xenforo.info Если будете копировать на свой сайт - оставляйте ссылку на авторов перевода и на XFR!
Операторы можно расширить используя AND, OR, xen:else и xen:elseif.
Замена == на != в примерах ниже будет менять условие с положительного на отрицательное.
К примеру, <xen:if is="{$visitor.user_id} == x"> является положительным, а <xen:if is="{$visitor.user_id} != x"> отрицательным.
Там, где аргумент имеет только один параметр, вставка ! перед параметром имеет тот же самый эффект.
К примеру, <xen:if is="{$visitor.user_id}"> является положительным, а <xen:if is="!{$visitor.user_id}"> уже будет отрицательным.
При работе с массивами ставьте ! прямо перед аргументом.
К примеру, <xen:if is="in_array({$forum.node_id}, array(x, y, z))"> будет положительным, а <xen:if is="!in_array({$forum.node_id}, array(x, y, z))">отрицательным.
Используя xen:else и xen:elseif, мультиоператоры можно укомплектовать в один.
Самая проста форма использования xen:else выглядит так:
<xen:if is="{$forum.node_id} == x">
Этот контент будет показан в форуме x
<xen:else />
Этот контент будет показан в любом другом месте
</xen:if>
Более расширенное условие с мультиоператорами используя xen:elseif будет выглядеть так:
<xen:if is="{$forum.node_id} == x">
Этот контент будет показан в форуме x
<xen:elseif is="{$forum.node_id} == y" />
Этот контент будет показан в форуме y
<xen:elseif is="{$forum.node_id} == z" />
Этот контент будет показан в форуме z
<xen:else />
Этот контент будет показан в любом другом месте
</xen:if>
В зависимости от того с каким шаблоном вы ведёте работу, Вам может понадобится использовать $user вместо $visitor; $visitor всегда является записью текущего залогиненного пользователя, а $user это запись обработчика (пример: автор сообщения, список пользователей, список пользователей онлайн и т.д.)
При работе с шаблоном PAGE_CONTAINER можно передавать переменные из шаблонов представления (category_view, forum_view,thread_view и т.д.), используя xen:container. Это справедливо ко всем шаблонам, которые подключаются к шаблону PAGE_CONTAINER(допустим, шаблоны header или ad_header). Например, чтобы использовать переменную $forum.node_id, нужно добавить в шаблон следующее:<xen:container var="$forumId">{$forum.node_id}</xen:container>.
Точно так же, для переменной $threadId нужно добавить следующее: <xen:container var="$threadId">{$thread.thread_id}</xen:container>.
Переменные X, Y или Z, использующиеся в примерах, должны быть заменены на их актуальные значения.
Отображение содержимого только авторизованным пользователям (не показывать гостям):
<xen:if is="{$visitor.user_id}">
Содержимое видно только авторизованным пользователям
</xen:if>
Отображение содержимого только гостям (не показывать авторизованным пользователям):
<xen:if is="!{$visitor.user_id}">
Содержимое видно только гостям
</xen:if>
Отображение различного содержимого гостям и авторизованным:
<xen:if is="{$visitor.user_id}">
Это содержимое видно только авторизованным пользователям
<xen:else />
Это содержимое видно только гостям
</xen:if>
Отображение содержимого определенной группе пользователей:
<xen:if is="{xen:helper ismemberof, $visitor, X}">
Это содержимое видно только группе с ID=X
</xen:if>
Скрытие содержимого от определенной группы пользователей:
<xen:if is="!{xen:helper ismemberof, $visitor, X}">
Это содержимое скрыто от группы с ID=X
</xen:if>
Отображение содержимого нескольким группам пользователей:
<xen:if is="{xen:helper ismemberof, $visitor, X, Y}">
Это содержимое видно только группам с ID=X и ID=Y
</xen:if>
Скрытие содержимого от нескольких групп пользователей:
<xen:if is="!{xen:helper ismemberof, $visitor, X, Y}">
Это содержимое скрыто от групп с ID=X и ID=Y
</xen:if>
Отображение содержимого только администраторам:
<xen:if is="{$visitor.is_admin}">
Это содержимое видно только администраторам
</xen:if>
Отображение содержимого только модераторам:
<xen:if is="{$visitor.is_moderator}">
Это содержимое видно только модераторам
</xen:if>
Отображение содержимого только администраторам и модераторам:
<xen:if is="{$visitor.is_admin} OR {$visitor.is_moderator}">
Это содержимое видно толькоадминистраторам и модераторам
</xen:if>
Отображение содержимого только определенному пользователю:
<xen:if is="{$visitor.user_id} == X">
Это содержимое видно только пользователю с ID=X
</xen:if>
Отображение содержимого нескольким пользователям:
<xen:if is="in_array({$visitor.user_id}, array(X, Y, Z))">
Это содержимое видно только пользователям с ID=X, ID=Y и ID=Z.
</xen:if>
Отображение содержимого после первого сообщения в теме:
<xen:if is="{$post.position} == 0">
Это содержимое видно после первого сообщения в теме
</xen:if>
Отображение содержимого после первого сообщения в теме или личной переписке:
<xen:if is="{$post.position} == 0 AND !{$message.conversation_id}">
Это содержимое видно после первого сообщения в теме или личной переписке
</xen:if>
Отображение содержимого после X сообщений в теме на каждой странице:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == X AND !{$message.conversation_id}">
Это содержимое видно после X сообщений в теме на каждой странице
</xen:if>
Отображение содержимого после X сообщений в теме или личной переписке на каждой странице:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == X">
Это содержимое видно после X сообщений в теме или личной переписке на каждой странице
</xen:if>
Отображение содержимого после X сообщений в теме на каждой странице, только в разделах Y или Z:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == X AND in_array({$thread.node_id}, array(Y, Z))">
Это содержимое видно после X сообщений в теме на каждой странице, только в разделах Y и Z
</xen:if>
Отображение содержимого после X сообщений в теме на каждой странице, кроме разделов Y и Z:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x AND !in_array({$thread.node_id}, array(Y, Z))">
Это содержимое видно после X сообщений в теме на каждой странице, кроме разделов Y и Z
</xen:if>
Отображение содержимого только на определенных страницах:
<xen:if is="{$contentTemplate} == 'XYZ'">
Это содержимое видно только на странице XYZ
</xen:if>
Отображение содержимого только в определенной категории:
<xen:if is="{$category.node_id} == X">
Это содержимое видно только в категории X
</xen:if>
Примечание: чтобы это работало, необходимо включить опцию "Создавать страницы для категорий" в настройках:
Панель администратора -> Настройки -> Список разделов форума и узлов.
Отображение содержимого только в определенном разделе:
<xen:if is="{$forum.node_id} == X">
Это содержимое видно только в разделе X
</xen:if>
Отображение содержимого только в нескольких определенных разделах:
<xen:if is="in_array({$forum.node_id}, array(X, Y, Z))">
Это содержимое видно только в разделах X, Y и Z
</xen:if>
Отображение содержимого только в определенной теме:
<xen:if is="{$threadId} == X">
Это содержимое видно только в теме X
</xen:if>
Отображение содержимого только в нескольких определенных темах:
<xen:if is="in_array({$threadId}, array(X, Y, Z))">
Это содержимое видно только в темах X, Y и Z
</xen:if>
Отображение содержимого только в определенном сообщении:
<xen:if is="{$postId} == X">
Это содержимое видно только в сообщении X
</xen:if>
Отображение содержимого только в нескольких определенных сообщениях:
<xen:if is="in_array({$postId}, array(X, Y, Z))">
Это содержимое видно только в сообщениях X, Y и Z
</xen:if>
Отображение содержимого если автор сообщения является автором темы:
<xen:if is="{$post.user_id} == {$thread.user_id}">
Это содержимое видно если автор является автором темы
</xen:if>
Отображение содержимого пользователям, у которых 0 сообщений:
<xen:if is="{$visitor.message_count} == 0">
Это содержимое видно только пользователям, у которых 0 сообщений
</xen:if>
Отображение содержимого пользователям, у которых более X сообщений:
<xen:if is="{$visitor.message_count} > X">
Это содержимое видно только пользователям, у которых более X сообщений
</xen:if>
Отображение содержимого пользователям, у которых менее X сообщений:
<xen:if is="{$visitor.message_count} < X">
Это содержимое видно только пользователям, у которых менее X сообщений
</xen:if>
Отображение содержимого пользователям, которые не подтвердили свой почтовый адрес:
<xen:if is="{$isAwaitingEmailConfirmation}">
Это содержимое видно только пользователям, которые не подтвердили свой почтовый адрес
</xen:if>
Отображение содержимого пользователям, которые пришли с поисковых систем:
<xen:if is="{$visitor.from_search}">
Это содержимое видно только пользователям, которые пришли с поисковых систем
</xen:if>
Первый пост будет периодически обновляться новыми примерами. Был бы очень рад помощи в виде примеров и их описании в комментариях!