Создание плагина для 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.
