Isso é muito útil em relação a temas vs. plugins e também sobre o exemplo específico que mencionei. Obrigado.
Até agora, minha abordagem para introduzir alterações tem sido analisar os detalhes do código do Discourse (onde esse objeto é definido, o que controla esse template, onde está a lógica que trata dessa ação, etc.). Mas isso tem sido um processo lento.
Estou pensando que provavelmente uma rota mais eficiente seria focar na API. Assim, não preciso analisar todos os detalhes do código maduro do Discourse e posso me concentrar em construir um tema em vez de um plugin — ou talvez apenas fazer alterações no painel de “personalização”.
Basicamente, entender como a API funciona parece muito mais viável do que entender a base de código do Discourse.
Para manter o exemplo que mencionei: se o usuário for moderador de uma categoria, permitir que esse usuário fixe tópicos na página da categoria.
Seria possível fazer isso sem um plugin? Deixe-me ver se consigo esboçar:
1. O usuário é moderador de uma categoria?
Atualmente, não vejo nada na API que indique se um usuário é moderador de uma categoria. Esperaria encontrar isso em uma chamada GET para recuperar uma categoria, mas não vejo tal chamada lá. Ou talvez na chamada GET para recuperar um usuário, mas lá não vejo uma lista das categorias das quais o usuário é moderador.
Seria possível adicionar essas informações?
Ou, alternativamente, talvez eu pudesse criar um campo personalizado no usuário ou na categoria para identificar que ele é moderador e, em seguida, fazer uma chamada de API para esse campo personalizado quando a página da categoria for carregada.
2. Se o usuário for moderador, mostrar o botão de fixar.
Se eu puder responder à pergunta (1), então assumo que posso simplesmente adicionar esse botão com JavaScript e CSS no front-end, exibindo-o apenas se o usuário for moderador.
3. O usuário (que é moderador) clica no botão, e isso fixa o tópico.
Na API, os tópicos parecem ter uma característica “pinned” (um booleano). Assumo que isso corresponda a saber se estão fixados em sua categoria, já que parece que cada tópico tem apenas uma categoria.
Então, aqui, quando o moderador clicar no botão “fixar”, provavelmente poderei atualizar o status “pinned” do tópico para True. Se isso não funcionar, campos personalizados também poderiam ser uma solução aqui (embora eu não esteja vendo como adicionar campos personalizados a um tópico).
Com isso, ou algo semelhante, parece que eu poderia realizar essa tarefa usando a API, o que, se eu fizesse com um plugin, exigiria muito tempo analisando os arquivos da base de código do Discourse.
Isso faz sentido?