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



