Eu tenho uma navegação em camadas e o cliente deseja ter <select/>
campos em vez de uma longa lista de links.
Pensei apenas em mudar o modelo com um observador se o nome / id do filtro corresponder.
Alguma idéia ou recomendação melhor? Alternativas para alterar o modelo, talvez substituir / reescrever o bloco ou alterar apenas a classe do bloco para os dois filtros?
Qual evento usar para alterar o modelo?
Tenho o mesmo problema aqui /programming/14524791/magento-enable-or-disable-a-module-in-code/14529629 porque tenho um observador que altera as coisas do layout. Este é apenas um tema relevante. Então, analisar o tema antes de executar as atualizações pode ser uma boa ideia?
magento-1
event-observer
layered-navigation
Fabian Blechschmidt
fonte
fonte
catalog/layer/filter.phtml
modelo e mude o que você precisa, será também específico do tema. A única coisa com a qual você precisa lidar é com o bit de filtros selecionado. Suponho que você queira mostrar todo o filtro selecionado no<select>
que possa exigir a adição de algumas funções de bloco, porque uma vez que um filtro é selecionado, as outras opções desaparecem.Respostas:
Ok, o que você precisa fazer: 1. Substitua o bloco 'catalog / layer_view' para definir seu próprio modelo. Coloquei minha navegação em camadas na área do cabeçalho como parte de um layout de 1 coluna
Nesse arquivo de modelo, você precisa especificar o modelo substituído para seus elementos individuais.
Por fim, você precisa criar o menu suspenso filter.phtml. Isso deve ser direto. Isso está mal formatado, pois estou tendo problemas com este editor, mas a ideia geral está aqui. Também será necessário algum Javascript.
fonte
Você pode usar o
core_block_abstract_prepare_layout_after
evento noMage_Catalog_Block_Layer_View
bloco para alterar o modelo do seu filtro de atributo específico.Pode ser algo assim:
Resumo:
Todo bloco de filtro filho tem um alias no bloco de navegação em camadas como
[attribute_code]_filter
, e todos eles são criados no_prepareLayout()
método para que você possa modificar facilmente seu modelo nocore_block_abstract_prepare_layout_after
evento.Além disso, você pode verificar dentro do seu observador se o tema atual é o mesmo do esperado, chamando:
Atenciosamente, Ivan
fonte
attribute_code_filter
alias atribuído , por que você não pode simplesmente definir o modelo em um layout xml?getNameInLayout()
, verá que cada um desses blocos tem um nome exclusivo como ANNONYMOUS_30, ANNONYMOUS_23, etc. Portanto, você não pode confiar nele.