Создание плагина для 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("Всплывающие окна раздражают!");
},
};
Теперь, если вы перезапустите локальный сервер, на экране должно появиться сообщение «Всплывающие окна раздражают!». (Если этого не произошло, см. раздел «Мои изменения не подхватились» выше).
Разберём, как это сработало:
-
JavaScript-файлы, размещённые в
assets/javascripts/discourse/initializers, выполняются автоматически при загрузке приложения Discourse. -
Этот конкретный файл
exportирует один объект, у которого естьnameи функцияinitialize. -
Имя
nameдолжно быть уникальным, поэтому я назвал егоalert. -
Функция
initialize()вызывается при загрузке приложения. В нашем случае она просто выполняет наш кодalert().
Теперь вы — официальный разработчик плагинов Discourse!
Другие части серии
Часть 1: Эта тема
Часть 2: Пункты плагинов (Plugin Outlets)
Часть 3: Настройки сайта
Часть 4: Настройка git
Часть 5: Административные интерфейсы
Часть 6: Приёмочные тесты (Acceptance tests)
Часть 7: Публикация плагина
Этот документ находится под контролем версий — предложите изменения на github.

