Crear un plugin en Discourse puede ser muy sencillo una vez que aprendes un par de peculiaridades. El objetivo de esta publicación es crear un esqueleto de plugin y presentarte los conceptos básicos.
Tu entorno de desarrollo
Asegúrate de tener un entorno de desarrollo de Discourse funcionando en tu computadora. Recomiendo que utilices la guía de configuración apropiada y vuelvas cuando hayas terminado.
plugin.rb
¡Usa GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins para crear un esqueleto de plugin de Discourse completo en tu directorio de plugins
El esqueleto ahora está incluido en el núcleo de Discourse,
rake plugin:create[plugin-name]creará un plugin usando 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 él, 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 añadiremos código ruby, pero aún 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: Un plugin súper simple para demostrar cómo funcionan los plugins
# version: 0.0.1
# authors: Awesome Plugin Developer
# url: https://github.com/yourusername/basic-plugin
Una vez que hayas creado este archivo, deberías reiniciar tu servidor local y el plugin debería cargarse.
¡Una advertencia importante!
Si estás acostumbrado al desarrollo normal de Rails, podrías notar que los plugins no son tan agradables en lo que respecta a la recarga. En general, cuando realices cambios en tu plugin, deberías presionar Ctrl+c para detener la ejecución del servidor y luego ejecutarlo de nuevo usando bin/ember-cli -u.
¡Mis cambios no se aplicaron! 
A veces, la caché no se borra por completo, especialmente cuando creas archivos nuevos o eliminas archivos antiguos. Para solucionar este problema, elimina tu carpeta tmp e inicia Rails de nuevo. En una Mac puedes hacerlo en un solo comando: rm -rf tmp; bin/ember-cli -u.
Comprobando que tu plugin se cargó
Una vez que hayas reiniciado tu servidor local, visita la URL /admin/plugins (asegúrate de haber iniciado sesión con una cuenta de administrador primero, ya que solo los administradores pueden ver el registro de plugins).
Si todo funcionó, 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. Vamos a añadir un archivo javascript que mostrará un cuadro de alerta cuando se cargue Discourse. Esto será súper 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 lo viste, consulta el encabezado “¡Mis cambios no se aplicaron!” arriba).
Analicemos 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
exporta un 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, todo lo que hace es ejecutar nuestro códigoalert().
¡Ahora eres un desarrollador oficial 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.



