Skip to main content

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">

...</body>

И администратор может стилизовать эту тему, используя префиксом селектор атрибута

[data-forum-style="example-theme"] .post-content { ... }


Такой метод, будучи довольно простым, позволит стилизовать темы (почти) без использования дополнительного JS (скрипт понадобится для переключения). Но, что важнее, в этом случае нужная тема сможет начать формироваться до того, как начнёт формироваться контент, это позволит избежать "моргания", например, светлого фона по умолчанию, если у пользователя выбрана тёмная тема.


1.3

Дополнительные расширения на обсуждение:

  1. Список допустимых значений — сам по себе мало полезен
  2. Встроенный в движок скрипт переключения стилей — список допустимых значений теперь поможет сформировать список значений сюда.
  3. Отдельные таблицы стилей для разных тем --- требует сильного изменения бек-енда формирования стилей, я лично не думаю, что это стоит реализовывать.
  4. Возможность включить ротацию темы по времени --- слишком нишево.




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