Создание плагина для 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: Очень простой плагин для демонстрации работы плагинов
# 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. -
Этот конкретный файл экспортирует один объект, который содержит свойство
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.
