Куда вставить в тему v200.1.0
Где в теме поставить стили, скрипты, колокольчик и кнопки подписки
Точка входа: devcraft/src/modules/Notifications/Controller/show_notifications.php через {include} DLE. Разметка — из templates/ВАША_ТЕМА/devcraft/notifications/ (нет файла — берётся Default).
В админке модуля есть страница Конструктор подключения (?mod=notifications&action=include_builder):
- сборка тега
{include}для темы; - готовые примеры;
- конструктор вызовов PHP API (
notifySend,notifyOnNewsSaved, текст из шаблона темы) с копированием в буфер.
Стили и скрипты сайта лежат в devcraft/src/modules/Notifications/Public/ (notifications.css, notifications.js, timeago…) и подключаются через siteAssets манифеста. В main.tpl нужен тег {devcraft} или пара {devcraft-header} / {devcraft-scripts}. Не дублируйте файлы в templates/*/devcraft/notifications/assets/. Подробности: публичные ресурсы оболочки. Include с focus=css и focus=js ничего не выводят: их можно убрать.
Раздел сайта для оболочки
Страница кабинета идёт как do=notifications. Чтобы в админке Admin в «Разделы показа» / «Разделы-исключения» был пункт «Уведомления», а оболочка узнавала эту страницу, модуль при загрузке Site/include.php (после запуска DevCraft, и на сайте, и в админке) вызывает:
use DevCraft\Modules\Admin\Services\DleSiteSectionRegistry;
DleSiteSectionRegistry::instance()->register('notifications', __('Уведомления'));Ключ должен совпадать с $do. Пустой do ядро считает main. Свой $do другого сателлита регистрируйте так же из глобального include после DEVCRAFT_BOOTSTRAPPED. Канон и список штатных ключей — в публичных ресурсах оболочки. Как устроена страница: Страница уведомлений.
Краткий обзор блоков: Колокольчик, стена и кнопка. Смысл типов: типы подписок.
Базовые focus
focus | Куда в теме | Что |
|---|---|---|
badge | меню / шапка | колокольчик |
wall | профиль / содержимое | стена списка |
subscribe | новость / раздел / … | кнопка подписки |
{devcraft}
…
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=badge"}badge / wall / subscribe — только вошедшим (и при правах группы).
Файл темы → вставка
| Файл темы | Типичная вставка |
|---|---|
main.tpl (шапка) | {devcraft}, focus=badge |
main.tpl ([available=cat]) | stype=cat&id={category-id} |
main.tpl ([available=tags]) | stype=tag&id={cloudstag} |
main.tpl ([available=xfsearch]) | stype=xfield (id из адреса) |
fullstory.tpl | focus=subscribe&stype=news&id={news-id} |
userinfo.tpl | stype=user и при желании focus=wall |
| страница «все новости» | stype=all |
В теме Default нет отдельного category.tpl — кнопки раздела, тега и поиска по полю удобнее ставить в main.tpl внутри [available=…].
Тема Air
Менеджер плагинов DLE не применяет правки файлов в templates/. Колокольчик и символ #i-bell нужно добавить вручную (или скопировать готовые файлы темы из архива модуля, если правите тему целиком).
В комплекте есть разметка templates/Air/devcraft/notifications/ (в т.ч. badge.tpl со ссылкой на #i-bell). Стили шапки (.header-actions) — в Public/notifications.css через siteAssets → {devcraft-header} / {devcraft}.
Общий гайд по блокам: Колокольчик, стена и кнопка. Ниже — только шаги для Air.
Шаг 1: теги оболочки в main.tpl
В <head> — {devcraft-header} (или один {devcraft}). Перед </body> — {devcraft-scripts}, если используете split.
Шаг 2: колокольчик в шапке
В templates/Air/main.tpl в блоке header-actions перед {login} вставьте:
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=badge"}Ориентир: сразу после кнопки переключения светлой/тёмной темы (#themeToggle), до {login}.
Шаг 3: символ #i-bell в спрайте
В templates/Air/modules/icons.tpl рядом с другими <symbol> добавьте (если ещё нет id="i-bell"):
<symbol id="i-bell" viewBox="0 0 24 24"><path d="M18.75 9v.7c0 .85.24 1.67.69 2.38l1.11 1.72c1.01 1.57.24 3.71-1.52 4.21a21.1 21.1 0 0 1-14.06 0c-1.76-.5-2.53-2.64-1.52-4.21l1.11-1.72c.45-.71.69-1.53.69-2.38V9a6.75 6.75 0 1 1 13.5 0Z"/><path d="M7.24 18.55A5.25 5.25 0 0 0 12 22a5.25 5.25 0 0 0 4.76-3.45 22.4 22.4 0 0 1-9.52 0Z"/></symbol>Без этого в кнопке колокольчика иконка будет пустой.
Шаг 4: каталог разметки
Скопируйте templates/Air/devcraft/notifications/ из архива модуля в скин сайта (если ещё нет). Для другой темы достаточно templates/Default/devcraft/notifications/ → ваш скин.
Готовые фрагменты подписки
Параметр типа — stype, не type. В ядре DLE load_file() уже занимает $type расширением .php, поэтому type=xfield из вставки до модуля не доходит.
Новость
В fullstory.tpl:
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=subscribe&stype=news&id={news-id}"}Раздел
В main.tpl. Id — тег DLE {category-id}:
[available=cat]
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=subscribe&stype=cat&id={category-id}"}
[/available]Пример: на https://сайт/news/ подписчик получит сообщения о новых материалах в разделе news.
Тег
На странице тега DLE выставляет {cloudstag} (текущий тег из адреса). В main.tpl:
[available=tags]
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=subscribe&stype=tag&id={cloudstag}"}
[/available]Пример: https://сайт/tags/информация/ → подписка на тег информация. В сравнении id приводится к нижнему регистру.
Можно и фиксированное значение: stype=tag&id=информация — кнопка не зависит от {cloudstag}, но подходит только для одной страницы.
Доп. поле
Формат id: имя_поля/значение, например year/2019.
На странице поиска по доп. полю (/xfsearch/{поле}/{значение}/) у DLE нет готового тега вроде {cloudstag}. Модуль сам собирает id из адреса, если в вставке не передан id:
[available=xfsearch]
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=subscribe&stype=xfield"}
[/available]Пример: https://сайт/xfsearch/year/2019/ → подписка на year/2019.
Явное значение (любая страница):
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=subscribe&stype=xfield&id=year/2019"}Срабатывает при новой публикации с таким значением поля. Нужны флаг subscriptions_xfield и право notifications_allow_subscribe_xfield. Подробнее: типы подписок.
Автор (профиль)
В userinfo.tpl — id это номер пользователя автора профиля (не логин):
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=subscribe&stype=user&id={user-id}"}Подписчик получает сообщения о новых публикациях этого автора. Сам автор профиля при новой подписке на него получает событие user_subscribed (если включено в настройках модуля), со ссылкой на профиль подписчика. Повторная подписка, отписка и подписка на себя — без лишнего сообщения.
Все новые материалы
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=subscribe&stype=all"}Права и флаги
Чтобы кнопка реально работала:
- В настройках модуля включён флаг типа:
subscriptions_news,subscriptions_cat,subscriptions_user,subscriptions_tag,subscriptions_xfield,subscriptions_all. - В Правах групп разрешена подписка на этот тип.
- Для событий публикации / правки — глобальные «Уведомлять при публикации» / «Уведомлять об обновлении новости».
Без права или при выключенном типе запрос вернёт ошибку, а на странице кнопка может не показаться.
Стена в профиле
{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=wall"}Отдельный адрес: Страница уведомлений.