Crear un plugin en Discourse puede ser realmente sencillo una vez que aprendes algunas particularidades. El objetivo de esta publicación es crear un plugin básico (esqueleto) y presentarte los fundamentos.
Tu entorno de desarrollo
Asegúrate de tener un entorno de desarrollo de Discourse funcionando en tu computadora. Te recomendamos que uses la guía de configuración adecuada y regreses cuando hayas terminado.
plugin.rb
Usa GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub para crear un esqueleto completo de plugin de Discourse en tu directorio de plugins
El esqueleto ahora está incluido en el núcleo de Discourse;
rake plugin:create[nombre-del-plugin]creará un plugin utilizando el esqueleto
Cuando Discourse se inicia, busca en el directorio plugins subdirectorios que contengan un archivo plugin.rb. El archivo plugin.rb tiene dos propósitos: es el manifiesto de tu plugin con la información requerida sobre tu plugin, incluyendo su nombre, información de contacto y una descripción. El segundo propósito es inicializar cualquier código ruby necesario para ejecutar tu plugin.
En nuestro caso, no agregaremos ningún código ruby, pero aún así necesitamos el plugin.rb. Creemos el directorio basic-plugin con el archivo plugin.rb dentro, con el siguiente contenido:
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
Una vez que hayas creado este archivo, debes reiniciar tu servidor local y el plugin debería cargarse.
¡Una trampa importante!
Si estás acostumbrado al desarrollo regular con Rails, es posible que notes que los plugins no son tan cómodos cuando se trata de recarga. En general, cuando haces cambios en tu plugin, debes detener el servidor presionando Ctrl+c y luego ejecutarlo nuevamente usando bin/dev.
¡Mis cambios no se aplicaron! 
A veces la caché no se limpia por completo, especialmente cuando creas archivos nuevos o eliminas archivos antiguos. Para evitar este problema, elimina tu carpeta tmp y reinicia rails. En una Mac puedes hacerlo con un solo comando: rm -rf tmp; bin/dev.
Verificar que tu plugin se cargó
Una vez que hayas reiniciado tu servidor local, visita la URL /admin/plugins (asegúrate de iniciar sesión con una cuenta de administrador primero, ya que solo los administradores pueden ver el registro de plugins).
Si todo funcionó correctamente, deberías ver tu plugin en la lista:
¡Felicidades, acabas de crear tu primer plugin!
Añadamos algo de Javascript
Ahora mismo, tu plugin no hace nada. Añadamos un archivo javascript que mostrará un cuadro de alerta cuando Discourse se cargue. Esto será muy molesto para cualquier usuario y no se recomienda como un plugin real, pero mostrará cómo insertar Javascript en nuestra aplicación en ejecución.
Crea el siguiente archivo:
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("alert boxes are annoying!");
},
};
Ahora, si reinicias tu servidor local, deberías ver “alert boxes are annoying!” aparecer en la pantalla. (Si no fue así, consulta la sección “¡Mis cambios no se aplicaron!” arriba).
Repasemos cómo funcionó esto:
-
Los archivos Javascript colocados en
assets/javascripts/discourse/initializersse ejecutan automáticamente cuando la aplicación Discourse se carga. -
Este archivo en particular
exportaun objeto, que tiene unnamey una funcióninitialize. -
El
namedebe ser único, así que simplemente lo llaméalert. -
La función
initialize()se llama cuando la aplicación se carga. En nuestro caso, solo ejecuta nuestro códigoalert().
¡Ahora eres oficialmente un desarrollador de plugins de Discourse!
Más en la serie
Parte 1: Este tema
Parte 2: Plugin Outlets
Parte 3: Site Settings
Parte 4: git setup
Parte 5: Admin interfaces
Parte 6: Acceptance tests
Parte 7: Publish your plugin
Este documento está controlado por versiones - sugiere cambios en github.

