2 заметки с тегом

update announcement

Material Admin: обновление шаблонизатора

О, сколько боли в этом скрипте.
Когда я брался за его поддержку в 2015-2016 годах, я и не подозревал, что мне его придётся ещё долгое время поддерживать. Сейчас уже начало 2021 года, а я уже несколько дней, лежа на самоизоляции с COVID-19 (отдельная история) обновляю его для работы на PHP 8.

В общем, этот «аннонсмент» преимущественно для тех, кто делает или модифицирует шаблоны Material Admin.
В связи с обновлением шаблонизатора с Smarty v2 до Smarty v3, произошло несколько изменений как со стороны синтаксиса, так и со стороны встроенного функционала. Я не буду покрывать в этой заметке изменения самого Smarty (с этим прекрасно справится заметка от авторов), затрону лишь то, что было сделано мной в рамках «расширения функционала».

Функции

Было введено несколько вспомогательных функций, блоков и модификаторов. К примеру, теперь, благодаря функции avatar, стало возможным вывести аватарку там, где ранее это не было возможно (в бан-листе, например). Эта функция так же использует кеш, как и сам МА повсюду, и её вызов вернёт ссылку на аватар. Если аватарки в кеше нет — сходит в Steam API, достанет её и вернёт ссылку, так же записав в кеш.
Но, так же, вывод аватарок там, где нужно, не стал бы возможен без другой, отличной функции steam, которая берёт на вход SteamID и преобразует его в нужный формат. Точно так же, как и «внутрикапотовая» функция GetUserAvatar(), avatar в шаблонах хочет Community ID. Потому нужна возможность перегонять стимы в любой формат прямо в шаблонах, и она была реализована. Это позволяет так же избавиться от вызовов преобразования в пыхокоде, и вынести всё в шаблоны, не делая лишней работы.

Блоки

Иногда может понадобиться обернуть какую-то часть разметки в какие-то блоки. Раньше для этого приходилось писать «бойлерплейт» (дублировать нужные куски кода). Smarty v3 позволяет включать другие шаблоны в Ваш, но это не всегда удобно, т. к. приводит к коду вида:

<html>
  <head>
    ...
  </head>
  <body>
    {include file="page_header.tpl"}
      ... ваш шаблон ...
    {include file="page_footer.tpl"}
  </body>
</html>

Согласитесь, выглядит не красиво, и не очень-то и удобно. Мы представляем тег wrap, который позволит один раз написать шаблон вида:

<div class="card">
  <div class="card-body">
    {$innerContent} <!-- на месте {$innerContent} будет выведен обёрнутый в тег код -->
  </div>
</div>

И подключать его в нужных местах:

{wrap template="page_card.tpl"}
  <h1>Привет, мир!</h1>
{/wrap}

«Обёртки» получают все параметры рендера текущего шаблона, что позволяет, к примеру, заводить переменную $title с текущим заголовком страницы, и использовать её в подобных шаблонах.

Управление «зависимостями» (CSS, JS)

Если Вам понадобится в своём шаблоне подключить какой-то JS-файл или CSS в «шапке», Вы можете теперь это сделать! Мы вводим функции js и css. Основная их задача — пометить тот или иной файл в «очередь на подключение» в нужном блоке. Они не умеют пока что подключать динамический код, но заставить загрузиться нужный скрипт прямо перед отрисовкой всей страницы или после — без проблем.
К примеру, в SourceBans очень много мест, где вместо классического содержимого, выводятся вкладки.

Пример вкладок

При переключении между вкладками, меняется основное содержимое страницы. Следующий код мы используем для подключения и запуска таб-менеджера — нового функционала для работы с вкладками:

{js block="head" src="theme/js/core/tabs.js"}
<script type="text/javascript">TabManager.setup({$uniqueContainerId|json});</script>

block указывает область, где должен быть подключен JS-скрипт, src — место расположения скрипта.
Если Вы укажете скрипт, расположенный локально, мы так же добавим GET-параметр для их загрузки с UNIX Timestamp модификации файла. Это полезно для борьбы с жёстким кешем, навроде CloudFlare, когда требуется сбрасывать кеш в самом CloudFlare и браузере для обновления JS-скрипта. Скажи «Нет» постоянным сбросам кешей! 😃

Вы можете объявлять свои блоки. В случае такого кода:

{js block="own" src="theme/js1.js"}
{js block="own" src="theme/js2.js"}

// ...
{js block="own"}

Мы зарегистрируем новый блок own, а в месте, где произойдёт вызов функции без указания файла — будет выведен HTML-код для подключения всех перечисленных ранее JS-файлов. Точно так же это работает и для функции css.

page_header.tpl и page_footer.tpl

В Material Admin ещё в наследие от SourceBans, используется «дебильная система вывода страницы». Знали ли Вы, что для отрисовки, к примеру, бан-листа, будет выведено 5 разных шаблонов?

  • page_header.tpl
  • submenu.tpl
  • content_header.tpl
  • page_bans.tpl
  • page_footer.tpl

Часть разметки вообще спрятана в PHP-коде. Это создаёт ту ещё боль, когда Вы хотите поменять радикально разметку основной страницы, поскольку Вам приходится лезть в PHP-код, модифицировать разметку там, и ещё как-то запоминать, что и где было внесено, если однажды Вам понадобится обновиться. Знакомо?..

В обновлении я попытался избавиться от четырёх шаблонов выше. Теперь это всё объединено в «гипер-шаблон», именуемый «контейнером страницы». Его разметка может быть изменена, как Вам необходимо.
ПыСы: вполне возможно, что какие-то части ещё не вынесены в шаблон. Я постепенно работаю над этим.

Вместо отрисовки пяти разных шаблонов (явно), мы теперь честно отрисуем только два: page_bans.tpl и __container.tpl. Именно в последнем теперь объединены все прошлые шаблоны. Теперь Вы можете взять и поменять местами админское меню и «боковое», не залезая в PHP-код! Разве это не здорово? Вся разметка подчинена Вам.

Документация

Вся документация по нововведённым тегам и блокам расположена будет на GitHub, в день выхода патча. Ориентировочно, это произойдёт в январе. Я честно хотел успеть к началу нового года, но...

6 мес   material admin   php   sourcebans   update announcement

[Telegram] Core: приближающийся мажорный v2.1

Близится дата релиза следующего «мажорного» апдейта [Telegram] Core, и на момент написания заметки, уже вышли основные изменения, которые будут представлены в новой версии:

  • Несколько ботов. Может использоваться сторонними дополнениями для некоторых специфичных задач.
  • Более удобное API для реализации команд.
    • Для реализации команды, достаточно написать небольшой класс-хандлер (наследуется от специального класса).
    • Ядро строит цепочки обработчиков для той или иной команды. К примеру, есть «супер-обработчик» /start, который при виде специального аргумента, передаст управление на обработчики команды /auth.
    • Пока что необходимо вручную «вставлять» запись в базу при установке; при удалении — удалять. Позже будет механизм импорта/экспорта, как основная часть метаданных самого движка сделана (те же шаблоны).
  • Markdown Renderer. Теперь можно те же темы «рендерить» для отправки в Telegram. Единственные ограничения — это сам Markdown; те же таблицы никак не отрисовать.
  • Пользовательские команды. Можно реализовать свою команду по типу /rules, которая будет выводить относительно статический контент. Может быть полезно в групповых чатах. Для групповых чатов так же позже будет выложено отдельное дополнение, которое расширит возможности интеграции.
  • Клиент и API теперь можно расширять через функционал движка Class extensions.

Обновление

При обновлении на новую версию будут выполнены следующие действия:

  1. Созданы таблицы для хранения обработчиков команд (xf_smodders_tgcore_command), пользовательских команд (xf_smodders_tgcore_user_command) и ботов (xf_smodders_tgcore_bot).
  2. В таблицу обработчиков команд будут занесены все стандартные обработчики (их два): /start и /auth.
  3. Будет произведён импорт токена в «ботов», установлен «бот для авторизации» в настройках интеграции.
  4. Перестроен локальный кеш команд. Пока что он глобальный, но к релизу он станет локальным для каждого бота, и можно будет выключать обработку тех или иных команд для бота индивидуально

Админка

Все скриншоты были сделаны на версии движка XenForo v2.1.10 Patch 2 и версии дополнения [Telegram] Core v2.0.5 Alpha 8
После установки обновления, в админке появится отдельный раздел Telegram

Раздел в админ-панели

В «интеграции с социальными сетями», привычный интерфейс ввода токена заменится на выпадающий список с выбором уже созданного бота.

Выбор бота

В интерфейсе редактирования бота, по сути, есть только одно важное поле для заполнения: токен доступа (он же «Ключ доступа» в русской локализации).

Интерфейс редактирования бота

Если не заполнять заголовок, туда автоматически подставится юзернейм бота.
Если бот был импортирован с прошлой установки — он получит «заголовок» Authorization bot (@username).

«Пользовательские» команды крайне минималистичны на данный момент. При создании команды, Вам нужно заполнить только два поля: сама команда и ответ бота на неё.
В ответе работает шаблонизатор XenForo, и доступна глобальная переменная $xf, что позволяет, к примеру, делать такие штуки:

Пользовательская команда, отправляющая пользователю ссылку на правила

При выполнении любой команды, ядро переводит контекст исполнения (активного пользователя, шаблон и язык) по привязанной учётной записи — на форумную учётную запись.
Позже будут добавлены более гибкие настройки для команды, но пока — как-то так.

Прямо сейчас Вы можете установить текущую альфа-версию на свой форум, но понадобится собрать релизную версию или включить на «продакшене» режим разработчика (как?) и установить дополнение через консоль. Все исходники, как и прежде, доступны на GitHub.

О номере версии

По плану, версия 2.1 должна была быть представлена как 2.0.5 (о чём можно догадаться из текущего версионирования), но было решено поднять мажорную версию в связи с серьёзностью внесённых изменений.

10 мес   addons   telegram   telegram core   update announcement   xenforo