Создание плагина для Discourse может быть действительно простым, если разобраться в некоторых особенностях. Цель этого поста — создать каркас плагина и познакомить вас с основами.
Ваша среда разработки
Убедитесь, что на вашем компьютере запущена среда разработки Discourse. Я рекомендую воспользоваться соответствующим руководством по настройке и вернуться сюда, когда закончите.
plugin.rb
Используйте GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub, чтобы создать полный каркас плагина Discourse в вашем каталоге плагинов
Теперь каркас входит в ядро 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: A super simple plugin to demonstrate how plugins work
# 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.

