Создание плагина для Discourse может быть довольно простым, если вы освоите несколько его особенностей. Цель этой статьи — создать базовый шаблон плагина и познакомить вас с основами.
Ваша среда разработки
Убедитесь, что у вас на компьютере запущена среда разработки Discourse. Рекомендую воспользоваться руководством по установке и вернуться сюда, когда закончите.
plugin.rb
Используйте GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub, чтобы создать полный шаблон плагина Discourse в вашей директории plugins
Шаблон теперь включён в ядро Discourse,
rake plugin:create[plugin-name]создаст плагин на основе шаблона
При запуске Discourse ищет в директории plugins поддиректории, содержащие файл plugin.rb. Файл plugin.rb служит двум целям: это манифест вашего плагина с необходимой информацией о нём, включая: его название, контактные данные и описание. Вторая цель — инициализация любого ruby-кода, необходимого для работы плагина.
В нашем случае мы не будем добавлять ruby-код, но файл plugin.rb всё равно понадобится. Создадим директорию basic-plugin с файлом plugin.rb внутри, содержащим следующее:
basic-plugin/plugin.rb
# name: basic-plugin
# about: Супер простой плагин для демонстрации работы плагинов
# version: 0.0.1
# authors: Awesome Plugin Developer
# url: https://github.com/yourusername/basic-plugin
После создания этого файла перезапустите локальный сервер, и плагин должен загрузиться.
Важный нюанс!
Если вы привыкли к обычной разработке на Rails, вы могли заметить, что плагины не так удобны в плане перезагрузки. В целом, при внесении изменений в плагин, вам следует нажимать Ctrl+c, чтобы остановить сервер, а затем запускать его снова через bin/dev.
Мои изменения не применились! 
Иногда кэш не очищается полностью, особенно при создании новых или удалении старых файлов. Чтобы решить эту проблему, удалите папку tmp и снова запустите rails. На Mac это можно сделать одной командой: rm -rf tmp; bin/dev.
Проверка загрузки плагина
После перезапуска локального сервера перейдите по адресу /admin/plugins (убедитесь, что вы вошли как администратор, так как реестр плагинов виден только администраторам).
Если всё прошло успешно, вы увидите свой плагин в списке:
Поздравляем, вы только что создали свой первый плагин!
Добавим немного JavaScript
Сейчас ваш плагин ничего не делает. Давайте добавим JavaScript-файл, который будет показывать всплывающее окно при загрузке Discourse. Это будет крайне раздражать пользователей и не рекомендуется для реальных плагинов, но покажет, как внедрить JavaScript в работающее приложение.
Создайте следующий файл:
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("alert boxes are annoying!");
},
};
Теперь, если вы перезапустите локальный сервер, на экране должно появиться «alert boxes are annoying!». (Если этого не произошло, см. раздел «Мои изменения не применились» выше).
Разберём, как это работает:
-
JavaScript-файлы, размещённые в
assets/javascripts/discourse/initializers, автоматически выполняются при загрузке приложения Discourse. -
Этот конкретный файл
exportирует один объект, который имеетnameи функциюinitialize. -
nameдолжен быть уникальным, поэтому я назвал егоalert. -
Функция
initialize()вызывается при загрузке приложения. В нашем случае она просто выполняет кодalert().
Теперь вы — официальный разработчик плагинов Discourse!
Другие части серии
Часть 1: Эта тема
Часть 2: Plugin Outlets
Часть 3: Site Settings
Часть 4: git setup
Часть 5: Admin interfaces
Часть 6: Acceptance tests
Часть 7: Publish your plugin
Этот документ управляется системой версионирования — предложить изменения можно на github.

