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

3 BB-теги

3.1 Исправление: дефис в атрибутах 

kozhilya, кстати во время разработки вкладок вв-кодом столкнулся с тем, что не хватает возможности добавления предустановленных атрибутов. Хотел реализовать вкладки через input и label, но пришлось отказаться. Но это так, а вот, то что в классах нельзя использовать дефис или подчеркивание - это неудобно, то есть так работать не будет: acont[div.window.active-vkladka/data-content]:im, а вот так работает: acont[div.window.activevkladka/data-content]:im. В принципе тоже не критично))

kolobdur74

3.2 Тег [kbd]

Для вставки кода без парсинга, но строчный:

Используй тег [kbd][b]имя[/b][/kbd], что бы выделить имя жирным.
<p>Используй тег <kbd>[b]имя[/b]</kbd>, что бы выделить имя жирным.

Вообще, конечно, <code> был бы корректнее... Но [code] уже занят просто капитально xD

4 Изображение темы

4.1 Форма ответа

При изменении темы, если доступно изменение темы (в частности, есть поле "Название темы") перед формой ответа добавляется дополнительное поле "Изображение темы"

Это изображение будет добавляться в meta-теги темы, которая позволит сделать отображение ссылки на тему в социальных сетях и месенджерах красивее.

4.2 Список тем

<td class="tcl">
  <div class="intd">
    <div class="icon"><!-- --></div>
    
    <!-- Новое -->
    
    
    <div class="tclcon">
      <span class="acchide">1</span>
      <a href="https://dev3.bbcorp.ru/viewtopic.php?id=1">Тестовое сообщение</a> 
      <span class="byuser">&nbsp;kernel</span>
    </div>
  </div>
</td>