Criar um plugin no Discourse pode ser muito simples, uma vez que você aprende algumas particularidades. O objetivo deste post é criar um plugin básico (skeleton) e apresentar a você os fundamentos.
Seu ambiente de desenvolvimento
Certifique-se de ter um ambiente de desenvolvimento do Discourse rodando no seu computador. Recomendo que você use o guia de instalação apropriado e volte quando terminar.
plugin.rb
Use GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub para criar um esqueleto completo de plugin do discourse no seu diretório de plugins
O esqueleto agora está incluído no núcleo do discourse;
rake plugin:create[plugin-name]criará um plugin usando o esqueleto
Quando o Discourse inicia, ele procura no diretório plugins por subdiretórios que contenham um arquivo plugin.rb. O arquivo plugin.rb tem dois propósitos: é o manifesto do seu plugin, contendo as informações obrigatórias sobre o seu plugin, incluindo: seu nome, informações de contato e uma descrição. O segundo propósito é inicializar qualquer código ruby necessário para executar seu plugin.
No nosso caso, não adicionaremos nenhum código ruby, mas ainda precisamos do plugin.rb. Vamos criar o diretório basic-plugin com o arquivo plugin.rb dentro dele, com o seguinte conteúdo:
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
Depois de criar este arquivo, você deve reiniciar seu servidor local e o plugin deve ser carregado.
Uma pegadinha importante!
Se você está acostumado com o desenvolvimento regular em rails, pode notar que os plugins não são tão convenientes quando se trata de recarregamento. Em geral, quando você faz alterações no seu plugin, você deve pressionar Ctrl+c no servidor para pará-lo, e então executá-lo novamente usando bin/dev.
Minhas alterações não foram aplicadas! 
Às vezes, o cache não é limpo completamente, especialmente quando você cria novos arquivos ou exclui arquivos antigos. Para contornar esse problema, remova sua pasta tmp e inicie o rails novamente. Em um mac, você pode fazer isso em um único comando: rm -rf tmp; bin/dev.
Verificando se seu plugin foi carregado
Depois de reiniciar seu servidor local, visite a URL /admin/plugins (certifique-se de estar logado como uma conta de administrador primeiro, pois apenas administradores podem ver o registro de plugins).
Se tudo funcionou, você deve ver seu plugin na lista:
Parabéns, você acabou de criar seu primeiro plugin!
Vamos adicionar alguns Javascript
No momento, seu plugin não faz nada. Vamos adicionar um arquivo javascript que exibirá uma caixa de alerta quando o discourse carregar. Isso será muito irritante para qualquer usuário e não é recomendado como um plugin real, mas mostrará como inserir Javascript em nossa aplicação em execução.
Crie o seguinte arquivo:
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("alert boxes are annoying!");
},
};
Agora, se você reiniciar seu servidor local, deve ver “alert boxes are annoying!” aparecer na tela. (Se não aparecer, veja o título “Minhas alterações não foram aplicadas” acima).
Vamos analisar como isso funcionou:
-
Arquivos Javascript colocados em
assets/javascripts/discourse/initializerssão executados automaticamente quando a aplicação Discourse é carregada. -
Este arquivo específico
exportaum objeto, que tem umnamee uma funçãoinitialize. -
O
namedeve ser único, então eu apenas o chamei dealert. -
A função
initialize()é chamada quando a aplicação é carregada. No nosso caso, ela apenas executa nosso códigoalert().
Agora você é um desenvolvedor oficial de plugins do Discourse!
Mais na série
Parte 1: Este tópico
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 é controlado por versão - sugira alterações no github.

