Criar um plugin no Discourse pode ser realmente simples, uma vez que você aprenda alguns truques. O objetivo deste post é criar um plugin básico e apresentar 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[nome-do-plugin]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 duas finalidades: é o manifesto do seu plugin com as informações obrigatórias sobre seu plugin, incluindo: seu nome, informações de contato e uma descrição. A segunda finalidade é 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: Um plugin super simples para demonstrar como os plugins funcionam
# version: 0.0.1
# authors: Desenvolvedor de Plugins Incrível
# url: https://github.com/seuusuario/basic-plugin
Depois de criar este arquivo, você deve reiniciar seu servidor local e o plugin deve ser carregado.
Um detalhe importante!
Se você está acostumado com 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 para parar o servidor e, em seguida, 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 algum JavaScript
No momento, seu plugin não faz nada. Vamos adicionar um arquivo JavaScript que exibirá uma caixa de alerta quando o Discourse for carregado. 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("caixas de alerta são irritantes!");
},
};
Agora, se você reiniciar seu servidor local, deve ver “caixas de alerta são irritantes!” aparecer na tela. (Se não aparecer, consulte 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: Configuração do git
Parte 5: Interfaces de administração
Parte 6: Testes de aceitação
Parte 7: Publique seu plugin
Este documento é controlado por versão - sugira alterações no github.

