Então, adicionar o modificador de página inicial personalizada ativa a rota discovery.custom e mostra um alerta de informação padrão, renderizado no outletcustom-homepage:
Então, eu me pergunto como o novo outlet deve funcionar:
De certa forma, eu não precisaria do outlet. Posso apenas usar os outros disponíveis e limitar os componentes à rota discovery.custom
Embora pareça que preciso colocar pelo menos um componente no outlet, caso contrário, o alerta padrão é renderizado? Colocar um template vazio lá não funciona.
Por outro lado, se eu pudesse adicionar vários componentes ao outlet, eu não precisaria ter nenhuma lógica de rota. Os componentes só apareceriam na página inicial porque o outlet não estaria disponível em outras rotas?
Ah, desculpe, você está certo, parece legal em Outlets (geralmente) publicar mais de um arquivo de template em um único Componente de Tema (eu estava ciente de que ele lidava com conflitos entre Componentes de Tema e plugins, então todos eles podiam ser renderizados). Curioso.
Eu acho, no entanto: por que você gostaria de fazer isso? Você terá menos controle sobre o layout?
Um template força você a compor todo o layout de uma vez com quantos subcomponentes você quiser?
O comportamento parece ser inconsistente, no entanto…
Se eu criar uma página inicial personalizada, gostaria de poder renderizar vários componentes existentes nela. E como mencionado, isso já funciona ao usar outros outlets disponíveis e ao limitar os componentes à rota da página inicial personalizada.
Se eu puder adicionar apenas um componente ao outlet específico da página inicial personalizada e também precisar adicionar um para desabilitar o yield padrão, isso na verdade restringe meu controle de layout.
Mas por que você não pode referenciar todos esses componentes em um único template?
Ah, porque eles vêm de diferentes Componentes de Tema?
Acho que estávamos falando em códigos diferentes aqui.
Quando digo para colocar todos os seus Componentes (Ember) na pasta Components, quero dizer exatamente isso, mas em um único Componente de Tema.
Acho que o cerne disso é simplesmente: “por que este outlet se comporta de maneira diferente?” Entendo que você está tentando combinar diferentes Componentes de Tema.
Sim, essa é a ideia. Eu apenas usei os templates de texto simples acima como ilustração. Por exemplo, eu uso Featured Lists. E posso renderizá-lo no outlet com estas configurações:
As saídas de plugin wrapper são as que permitem apenas um conector, as demais permitem múltiplos. Para ilustrar, o código atual da saída de plugin principal é este:
e permite apenas um conector. Mas se eu mudar o código da saída principal para:
<PluginOutlet @name="custom-homepage" />
Ele permitirá vários templates de conector sem problemas. Nós poderíamos fazer essa mudança no core para esta saída em particular, mas essa diferença é mais geral. No entanto, parece um pouco opaco para os desenvolvedores, vejo seu ponto.
Note também que múltiplos conectores têm um problema de ordenação, até onde sei, não temos um mecanismo para decidir sobre a ordenação.
Acho que a melhor abordagem aqui, de qualquer forma, é o que @merefield sugeriu: usar um template e, a partir dele, referenciar componentes Ember.
O alerta padrão é mostrado apenas para administradores, FYI.
Usei três componentes existentes para esse layout e é o que eu esperaria ser uma abordagem comum ao construir uma página inicial personalizada. Eu só poderia adicionar um desses ao outlet do wrapper, é por isso que acho que ter um outlet simples aqui seria mais útil.
Consigo ver seu problema com mais clareza depois de dar uma olhada rápida no componente Featured Lists. Uma opção é refatorar esse componente e fazer com que ele gere todas as listas em um único componente Ember. Em seguida, você poderia adicionar esse componente a um outlet de wrapper de plugin.
Outra opção é adicionar um segundo outlet de plugin ao template da página inicial personalizada, algo como <PluginOutlet @name="below-custom-homepage" />.
Posso estar me apegando a este outlet custom-homepage com uma mensagem para administradores sem muito bom motivo, para ser honesto. Esse aviso não é tão útil…
Sim, isso pode ser complicado. No meu teste local agora, /custom não funciona corretamente. É melhor usar /, que roteia corretamente. Mas ainda assim não destaca.
Isso parece ser um problema comum. Se eu usar /, ele também não destaca outras rotas definidas como página inicial.
Sim, eu também poderia imaginar o aviso sendo exibido de forma diferente. A principal vantagem dos outlets wrapper parece ser que posso ceder condicionalmente o código principal ou renderizar um personalizado. Mas isso provavelmente nunca seria um caso para essa mensagem informativa.
Deve haver um mal-entendido. O componente já envolve todas as listas em um componente de encapsulamento e o renderiza em qualquer outlet fornecido:
Portanto, posso adicionar o componente sem problemas ao outlet wrapper atual na página inicial personalizada.
O que não consigo fazer é usar esse outlet para renderizar mais de um componente autônomo na página inicial personalizada. Componentes que eu teria instalado como componentes de tema, como estes três:
Minha suposição é que fazer tal uso de vários componentes de tema autônomos para construir uma página inicial personalizada seria a abordagem comum. Em vez de construir tudo do zero em um único tema.
Se você considerar adicionar outro outlet ou alterar a configuração do outlet, posso fornecer mais feedback com base no uso até agora. Embora eu vá envolver essa toca de coelho em detalhes
Então percebi que o outlet é renderizado dentro do elemento main-outlet. A estrutura geral desses elementos é então:
wrapper do main-outlet
wrapper da barra lateral
main-outlet
outlet custom-homepage
Como designer, na verdade não sou tão flexível organizando itens em uma página inicial personalizada usando este outlet. Para o design compartilhado acima, usei o outlet before-main-outlet, não apenas porque posso colocar mais de um componente, mas também porque ele não aninha componentes dentro do elemento main-outlet.
A estrutura, como compartilhada na captura de tela acima, se parece com isto:
wrapper do main-outlet
wrapper da barra lateral
componente: banner de pesquisa
componente: tópicos em destaque
componente: listas em destaque
main-outlet
A vantagem é que posso organizar elementos em toda a largura do wrapper main-outlet e não apenas dentro do elemento main-outlet. Para ilustrar o ponto, se eu renderizasse um dos componentes no outlet custom-homepage atual, ele seria renderizado aninhado dentro do elemento main-outlet como este:
A maior flexibilidade para designs personalizados, na minha opinião, seria oferecida por um plugin outlet que é colocado
como um filho direto do wrapper main-outlet (semelhante ao outlet before-main-outlet)
dentro de uma div wrapper
Essa div wrapper agruparia todos os componentes adicionados a ela e permitiria uma fácil ordenação. Tal estrutura ficaria então assim:
wrapper do main-outlet
wrapper da barra lateral
wrapper custom-homepage
componente: banner de pesquisa
componente: tópicos em destaque
componente: listas em destaque
main-outlet
Portanto, este é o meu feedback como designer. Acho que cabe a você decidir o quanto isso se alinha com o que você consideraria uma aplicação comum para o recurso de página inicial personalizada.
Correto, sim, para a visualização do crawler optei por exibir apenas o menu superior. Não é possível saber a partir do aplicativo Rails o que um tema irá gerar nesta rota.
Estou pensando nas sugestões aqui @manuel, arranjarei um tempo em breve para testar algumas mudanças. Por favor comigo.
Um problema que encontrei: Eu queria exibir o componente Homepage Feature na página inicial personalizada. Mas então os tópicos não são filtrados nesta rota. O componente apenas mostra qualquer tópico recente que tenha uma imagem.
E parece que os parâmetros não são aplicados na página inicial personalizada. Funciona bem caso contrário. Não tenho certeza por que isso acontece?
Editar: Eu uso o mesmo método no componente Featured Lists. Ao usar este componente na página inicial personalizada, o filtro também não é aplicado. Mas apenas na primeira lista… quando há mais, as listas seguintes são todas filtradas corretamente.
Interessante, não tenho certeza do porquê, talvez haja alguma lógica na store topicList que esteja vinculada às rotas de descoberta? A página inicial personalizada não é uma rota de descoberta.
Fico curioso, esse mesmo componente com os parâmetros funciona bem em uma rota de administrador, por exemplo? Ou em uma rota de perfil de usuário? Alguma chance de você verificar?
O @tynaut encontrou um problema semelhante, então é provável que haja algo a ser abordado aqui.
Tentei com o componente Featured Lists, ele já tem uma configuração para mostrar o componente em todos os lugares. Isso não inclui rotas de administrador, mas tentei em todas as outras (páginas estáticas, perfis de usuário,..) e parece funcionar em todos os lugares, exceto na página inicial personalizada.
A outra coisa estranha é que, como mencionado, ele só não filtra a primeira lista. Por exemplo, aqui eu filtro duas listas, uma para a tag “featured” e outra para a categoria “General”, e é assim que as listas aparecem em todas as outras rotas:
Portanto, a primeira lista não filtra mais pela tag, mas a segunda lista filtra pela categoria. E quando troco a ordem das listas, a primeira lista não filtra pela categoria, mas a segunda filtra pela tag:
O componente sample-list lá deve puxar apenas tópicos com a tag featured, mas não puxa (puxa os 3 primeiros tópicos para mim). Se eu remover o modificador custom_homepage do arquivo about.json desse tema, então os tópicos corretos são puxados.
Vou encontrar alguém mais familiarizado com o serviço de store para dar uma olhada. Obrigado!
Você pode me explicar como adicionar um componente (banner de pesquisa ou um componente personalizado já instalado no fórum) dentro do arquivo home.hbs para que ele seja exibido na nova página inicial personalizada?