Mybb — проект дополнений от kozhilya, 2023
1 Стили
Эти изменения планируются, в первую очередь, для форумов, использующие свой стиль
1.1 Настройки
- Использовать свой стиль: да/нет.
- Использовать стандартный extra.css: да/нет.
- API-настройка темы стиля: короткое поле ввода, допустимы только символы латинского алфавита, дефис и подчёркивание ([a-zA-Z\-_]+). Настройка отключается, если поле пустое.
1.2 Темы форума
Идея в том, что администратор форума может выделить одно из полей API-настроек пользователя так, что бы оно включалось как дата-атрибут тега <body> (возможно сделать к <html>?).
Пример
Пусть админ введёт это значение как forum-style, после чего, используя один из распространённых скриптов переключения стиля, устанавливает API-настройку пользователя запросом
/api.php?method=storage.set&token=***&key=forum-style&value=example_theme
Тогда форум будет генерировать для страниц форума код
<body data-forum-style="example-theme">
И администратор может стилизовать эту тему, используя префиксом селектор атрибута
[data-forum-style="example-theme"] .post-content { ... }
Такой метод, будучи довольно простым, позволит стилизовать темы (почти) без использования дополнительного JS (скрипт понадобится для переключения). Но, что важнее, в этом случае нужная тема сможет начать формироваться до того, как начнёт формироваться контент, это позволит избежать "моргания", например, светлого фона по умолчанию, если у пользователя выбрана тёмная тема.
Дополнительные расширения на обсуждение:
- Список допустимых значений — сам по себе мало полезен
- Встроенный в движок скрипт переключения стилей — список допустимых значений теперь поможет сформировать список значений сюда.
- Отдельные таблицы стилей для разных тем --- требует сильного изменения бек-енда формирования стилей, я лично не думаю, что это стоит реализовывать.
- Возможность включить ротацию темы по времени --- слишком нишево.
2 PHP-хуки
Используются для отправки сообщений внешним сервисам о том, что на форуме произошли изменения.
2.1 Манифест
JSON на внешнем сервисе, сообщающий о создателе, его контактах, теме для техподдержки и том, какие изменения проверяются внешним сервисом.
Структура:
- name — строка, отображаемое в админке название
- description — строка, описание хука
- link — строка, ссылка на полное описание
- version — строка, информация о версии
- author — строка, имя создателя
- reciever — строка, полный URL скрипта на внешнем сервисе, который будет обрабатывать входящие хуки
- hooks — массив строк, содержащий список всех
2.2 Работа хука
Хуки бывают 2 видов: перед событием (before) и после него (after). Скорее всего, я пока не планирую хуки перед событием, так как они нужны, что бы заранее изменить входящие данные, и я не вижу, как и зачем это нужно: это можно делать через JS перед отправкой формы
Хук совершает curl-запрос по адресу, указанном в манифесте в поле reciever. Данные передаются методом POST, таймаут запроса 10 секунд.
Данные всегда имеют структуру:
- forum_id — число, id форума, посылающего хук
- event — строка, событие, из-за которого создан хук
- data — объект, данные о конкретном хуке
2.3 Хуки
2.3.1 Создание хука (hook.register)
Создаётся после того, как хук был зарегистрирован или обновлён в системе
Данные хука:
- url — строка, URL форума (основной домен)
- title — строка, Название форума
2.3.2 Регистрация пользователя (user.create)
После регистрации пользователя
- user_id — число, id нового пользователя
2.3.3 Изменение пользователя (user.edit)
После изменения профиля пользователя
- user_id — число, id изменённого пользователя
2.3.4 Создание сообщения (message.post)
После создания нового сообщения
- post_id — число, id нового сообщения
- topic_id
- forum_id
2.3.5 Редактирование сообщения (message.edit)
После изменения сообщения (втч перемещения)
- post_id — число, id изменённого сообщения
- topic_id
- forum_id
2.3.4 Удаление сообщения (message.delete)
После создания нового сообщения
- post_id
2.3.4 Оценка сообщения (message.rate)
После создания нового сообщения
- post_id — число, id нового сообщения
- author_id
- sender_id