Obrigado, @tshenry. Não tenho certeza do motivo pelo qual o código de proprietário do grupo não funcionou para mim — provavelmente tem a ver com a forma como configurei o plugin.
Descobri que a abordagem AJAX funciona como um método “MVP” (Produto Mínimo Viável). Aliás, acredito que é possível fazer uma chamada de API para [forum-url]/groups.json para obter todos os grupos do site e, em seguida, iterar sobre eles a partir daí, sem necessidade de fazer várias chamadas.
Eu gostaria de perguntar:
– Para a abordagem AJAX/API JSON, você sabe como fazer com que uma função só seja executada quando um usuário acessa uma página específica? No momento, se eu colocar o código AJAX na seção do meu painel personalizado, consigo fazê-lo funcionar, mas ele é executado toda vez que o site é carregado (quando eu só quero que ele rode quando a página de índice de grupos for carregada).
– No meu caso, estou usando AJAX agora principalmente porque não preciso apenas mostrar os proprietários dos grupos, mas também algumas outras novas características que estou adicionando a um grupo. Seriam como campos personalizados do grupo que estou tentando recuperar e exibir. No momento, a versão “MVP” (enquanto ainda estou aprendendo como funciona o código-base do Discourse) é salvá-los em um banco de dados separado, fora do Discourse, que consulto e adiciono à página de índice de grupos.
Obviamente, a solução mais limpa seria adicionar as características personalizadas aos grupos no banco de dados do Discourse e recuperá-las. Estou apenas tentando avaliar o tipo de operação que seria necessária aqui. Isso exigiria refazer muitos arquivos do Discourse (controladores, modelos, templates)?
Não há um conceito embutido de campo personalizado de grupo, como existe para campos personalizados de usuário. Acredito que você precisaria criar um plugin que adicione todas as partes necessárias para que isso funcione.
Você está certo. Eu estava esquecendo — isso é algo que também armazeno em um banco de dados separado, ao qual faço chamadas via AJAX (e algumas outras “magias”) no momento.
Ótima ideia — vejo o que você fez com if ((url == "/") || (url == "/latest") ) naquele repositório. Posso fazer algo parecido.
Sim — já li esse guia, assim como os outros que consegui encontrar. É um ótimo guia, mas notei que a transição desse guia (e de outros do meta) para a implementação desse tipo de personalização é complicada. Essas personalizações exigem, pelo que pude perceber, um entendimento real de como os templates, controladores e modelos se encaixam na base de código do Discourse.
Digressão
O Ember pode ser um ótimo sistema para criar aplicativos de alto desempenho, mas acho difícil entender como os diferentes arquivos se relacionam. Por exemplo, encontrar o template correto em uma view no repositório do Github não diz muito sobre quais outros templates aquele se conecta, e ainda menos sobre quais controladores e outros modelos podem ser relevantes. É possível, mas é lento, e você realmente precisa entender essas relações para fazer essas personalizações.
No Angular, como método alternativo, as partes dos componentes de view normalmente são agrupadas com um arquivo html, typescript e css, e depois outros arquivos relevantes são claramente marcados nesses arquivos (então os serviços em uso são identificados no arquivo typescript e outros componentes inseridos são claramente marcados no arquivo html). Pelo que pude ver, não é assim que funciona a estrutura do Discourse com o Ember (não para criticar essa estrutura — é um aplicativo muito estável e altamente performático — apenas leva tempo para se acostumar).
Daí o meu uso de coisas como AJAX para obter o mesmo resultado enquanto continuo tentando entender como as peças do Discourse se encaixam.