DevCraft Документации
Руководства

Куда вставить в тему v200.1.0

Где в теме поставить стили, скрипты, колокольчик и кнопки подписки

Точка входа: devcraft/src/modules/Notifications/Controller/show_notifications.php через {include} DLE. Разметка — из templates/ВАША_ТЕМА/devcraft/notifications/ (нет файла — берётся Default).

В админке модуля есть страница Конструктор подключения (?mod=notifications&action=include_builder):

  1. сборка тега {include} для темы;
  2. готовые примеры;
  3. конструктор вызовов 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.tplfocus=subscribe&stype=news&id={news-id}
userinfo.tplstype=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"}

Права и флаги

Чтобы кнопка реально работала:

  1. В настройках модуля включён флаг типа: subscriptions_news, subscriptions_cat, subscriptions_user, subscriptions_tag, subscriptions_xfield, subscriptions_all.
  2. В Правах групп разрешена подписка на этот тип.
  3. Для событий публикации / правки — глобальные «Уведомлять при публикации» / «Уведомлять об обновлении новости».

Без права или при выключенном типе запрос вернёт ошибку, а на странице кнопка может не показаться.

Стена в профиле

{include file="devcraft/src/modules/Notifications/Controller/show_notifications.php?focus=wall"}

Отдельный адрес: Страница уведомлений.

См. также

На этой странице