Criar um plugin no Discourse pode ser muito simples, depois de aprender algumas peculiaridades. O objetivo desta postagem é criar um esqueleto de plugin e apresentá-lo aos conceitos básicos.
Seu ambiente de desenvolvimento
Certifique-se de ter um ambiente de desenvolvimento do Discourse em execução em seu computador. Eu recomendo que você use o guia de configuração apropriado e retorne quando terminar.
plugin.rb
Use GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins para criar um esqueleto de plugin do Discourse completo em 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 é iniciado, ele procura no diretório plugins por subdiretórios que contenham um arquivo plugin.rb. O arquivo plugin.rb tem dois propósitos: ele é o manifesto do seu plugin com as informações necessárias sobre ele, 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: Um plugin super simples para demonstrar como os plugins funcionam
# 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 deverá ser carregado.
Uma observação importante!
Se você está acostumado com o desenvolvimento regular do Rails, pode notar que os plugins não são tão agradáveis quando se trata de recarregamento. Em geral, ao fazer alterações no seu plugin, você deve pressionar \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003ec\u003c/kbd\u003e no servidor para parar sua execução e, em seguida, executá-lo novamente usando bin/ember-cli -u.
Minhas alterações não foram aplicadas! 
Às vezes, o cache não é totalmente limpo, especialmente ao criar novos arquivos ou excluir 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/ember-cli -u.
Verificando se seu plugin foi carregado
Depois de reiniciar seu servidor local, visite o 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 deu certo, você deverá ver seu plugin na lista:
\u003cimg src="//assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/4/7/47a4b274553bd1fb0bba2d2df699ac136ad6a5cc.png" width="690" height="104"\u003e
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 carregar. Isso será super irritante para qualquer usuário e não é recomendado como um plugin real, mas mostrará como inserir Javascript em nosso aplicativo 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, deverá ver “alert boxes are annoying!” aparecer na tela. (Se não viu, consulte o cabeçalho “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 o aplicativo Discourse carrega. -
Este arquivo em particular
exporta um objeto, que tem umnamee uma funçãoinitialize. -
O
namedeve ser exclusivo, então eu o chamei apenas dealert. -
A função
initialize()é chamada quando o aplicativo carrega. No nosso caso, tudo o que ela faz é executar nosso códigoalert().
Você agora é um desenvolvedor oficial de plugins do Discourse!
Mais na série
Parte 1: Este tópico
Parte 2: Plugin Outlets
Parte 3: Configurações do Site
Parte 4: Configuração do git
Parte 5: Interfaces de Administrador
Parte 6: Testes de Aceitação
Parte 7: Publique seu plugin
\u003csmall\u003eEste documento é controlado por versão - sugira alterações no github.\u003c/small\u003e


