По мере того как темы становятся более амбициозными, мы ищем способы позволить им управлять основным серверным поведением. Хотя они никогда не получат такого же уровня контроля, как плагины, мы можем предоставить темы некоторые предопределенные хуки для управления.
Представляем: модификаторы тем ![]()
Они указываются с помощью ключа modifiers в файле about.json вашей темы.
Для получения 100% актуального списка модификаторов обратитесь к схеме базы данных в конце файла theme_modifier_set.rb, но вот краткое резюме того, что у нас есть на данный момент:
-
serialize_topic_excerptsboolean (по умолчанию false) — всегда включать отрывки при сериализации списков тем. -
csp_extensionsмассив строк — добавлять директивы в CSP. Работает так же, как старый метод настройки темы “extend_content_security_policy”. Но помните, что простые теги<script src="">разрешены автоматически. -
svg_iconsмассив строк — список иконок, которые должны быть включены в подмножество иконок. -
topic thumbnailsмассив размеров — запрашивать дополнительные разрешения в наборе миниатюр тем. Обратите внимание, что они генерируются асинхронно, поэтому вы должны использовать исходное изображение в качестве запасного варианта, если запрошенный размер не предоставлен. Дополнительная информация доступна в сообщении коммита. -
serialize_post_user_badgesмассив строк — список имен значков (соответствующих записям в таблице значков), которые нужно сериализовать вместе с данными поста. При настройке система включает указанные значки пользователя для каждого поста для рендеринга на стороне клиента.
Одной из тем, которая активно использует эти новые хуки, является Topic List Thumbnails — ознакомьтесь с кодом, чтобы увидеть, как это работает.
Модификаторы, зависящие от настроек
Модификаторы тем также могут быть настроены так, чтобы брать свое значение из настройки темы, позволяя администраторам сайта переопределять поведение модификаторов без редактирования кода темы. Чтобы сделать модификатор зависимым от настройки, используйте следующий синтаксис в вашем файле about.json:
{
"modifiers": {
"modifier_name": {
"type": "setting",
"value": "setting_name"
}
}
}
Например, если у вас есть настройка темы с именем show_excerpts и вы хотите, чтобы она управляла модификатором serialize_topic_excerpts:
В файле settings.yml:
show_excerpts:
default: false
В файле about.json:
{
"modifiers": {
"serialize_topic_excerpts": {
"type": "setting",
"value": "show_excerpts"
}
}
}
При изменении настройки show_excerpts значение модификатора автоматически обновится в соответствии с ней. Это обеспечивает гибкость для администраторов сайта, позволяя настраивать поведение темы через интерфейс администратора.
Этот документ находится под версионным контролем — предложите изменения на GitHub.

