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

Тема в разделе "Инструкции и основная информация", создана пользователем kasim, 04.03.16.

  1. kasim

    kasim Участник

    Сообщения:
    28
    Репутация:
    6
    Рейтинг:
    +10 / -0
    Обычно, на форумах присутствуют различные группы пользователей, например, модератор, администратор, 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 {
      /* темизация для блока с информацией о пользователе */
    }