Выделяем сообщение для каждой группы пользователей в XenForo

kasim

Регистрация
31.01.16
Сообщения
28
Симпатии
11
#1
Обычно, на форумах присутствуют различные группы пользователей, например, модератор, администратор, VIP-пользователи и т.д. Выделить группы пользователей можно по разному, например, окрасить имена администраторов в красный цвет, а в зелёный - модераторов. Можно пойти дальше и выделять целые сообщения отдельных групп пользователей. Как раз об этой возможности я и хочу рассказать.

Всё очень просто. Смотрите, за отображение отдельно взятого сообщения отвечает шаблон message. В нём есть следующий участок кода:

HTML:
<li id="{$messageId}" class="message {xen:if $message.isDeleted, 'deleted'} {xen:if '{$message.is_staff}', 'staff'} {xen:if $message.isIgnored, ignored}" data-author="{$message.username}">
Разберём его на составные части:
  • {$messageId} - присваивает сообщению идентификатор.
  • {xen:if $message.isDeleted, 'deleted'} - если сообщение удалено, то присваивается класс deleted.
  • {xen:if '{$message.is_staff}', 'staff'} - если сообщение написал пользователь из группы поддержки форума, то присваивается класс staff.
  • {xen:if $message.isIgnored, ignored} - если сообщение смотрит пользователь, а автор этого сообщения находится в игнор-листе у этого пользователя, то присваивается класс ignored.
Всё бы хорошо, но у нас на форуме много групп. Как сделать так, чтобы ID группы пользователя также добавлялся в этот список классов? Очень просто!

Нужно составить примерно такую конструкцию:

Код:
{xen:if '{xen:helper ismemberof, $message, XX}', 'userGroup-XX'}
Где XX - это ID группы. Далее, добавляем эту конструкцию в вышеприведённый код, вот так:

HTML:
<li id="{$messageId}" class="message {xen:if $message.isDeleted, 'deleted'} {xen:if '{$message.is_staff}', 'staff'} {xen:if $message.isIgnored, ignored} {xen:if '{xen:helper ismemberof, $message, XX}', 'userGroup-XX'}" data-author="{$message.username}">
Всё! Каждое сообщение на форуме содержит класс нашей группы. Теперь необходимо всего лишь добавить в EXTRA.css темизацию для нашей группы:

Код:
/**
- * Theming Message for User Group
- * by WebNull.info
- */

.message.userGroup-XX {
  /* темизация для всего сообщения */
}

.message.userGroup-XX .messageContent {
  /* темизация для блока с контентом */
}

.message.userGroup-XX .messageUserInfo {
  /* темизация для блока с информацией о пользователе */
}

Рабочий пример

Например, применим темизацию для сообщений, автором которых является администратор (группа ID = 3). Конструкция будет выглядеть следующем образом:

Код:
{xen:if '{xen:helper ismemberof, $message, 3}', 'userGroup-3'}
Добавляем эту конструкцию в код формирования сообщения:

HTML:
<li id="{$messageId}" class="message {xen:if $message.isDeleted, 'deleted'} {xen:if '{$message.is_staff}', 'staff'} {xen:if $message.isIgnored, ignored} {xen:if '{xen:helper ismemberof, $message, 3}', 'userGroup-3'}" data-author="{$message.username}">
Добавляем темизацию в EXTRA.css:

Код:
/**
- * Theming Message for User Group
- * by WebNull.info
- */

.message.userGroup-3 {
  /* темизация для всего сообщения */
}

.message.userGroup-3 .messageContent {
  /* темизация для блока с контентом */
}

.message.userGroup-3 .messageUserInfo {
  /* темизация для блока с информацией о пользователе */
}