Hoje, estou selecionando uma opção de navegação em camadas que não é baseada em um atributo. É para classificações, portanto, o front end pode mostrar boas estrelas brilhantes.
Para fazer isso eu tenho:
- Criou um módulo
Reescrever catalog_block_layer_view
<blocks> <catalog> <rewrite> <layer_view>Bob_Catalog_Block_Layer_View</layer_view> </rewrite> </catalog> </blocks>
Criou uma classe chamada Bob_Catalog_Block_Layer_View que estende Mage_Catalog_Block_Layer_View
- Criou _initBlocks (), getFilters () e _prepareLayout () para substituir os métodos das classes pai. Todos eles chamam a classe pai em algum momento e, em seguida, acrescentam ou acrescentam dados extras ao que é retornado.
- Crie um bloco de filtro Bob_Catalog_Block_Layer_Filter_Rating que estenda Mage_Catalog_Block_Layer_Filter_Abstract com um construtor que define o filterModelName e chama seu pai e, em seguida, define um modelo personalizado, pois parece que Mage_Catalog_Block_Layer_Filter_Abstract tem o nome do modelo codificado no construtor.
- Crie um modelo Bob_Catalog_Model_Layer_Filter_Rating que estenda Mage_Catalog_Model_Layer_Filter_Abstract e implemente apply (), getName (), _getItemsData ().
Tudo isso funciona bem. As belas estrelas brilhantes aparecem na navegação em camadas.
Tenho a sensação de que estou perdendo alguma coisa porque, quando se trata de modelo de estado de camada, tive que colocar um condicional lá para pegar o filtro de classificação personalizado e alterar o layout. Além disso, algumas das coisas que eu precisava fazer (clonar a coleção de produtos para que o evento load não estragasse a contagem de coleções na paginação) me fizeram sentir como se estivesse nadando morro acima.
Portanto, a pergunta é: algum de vocês teve alguma sugestão melhor (ou talvez uma piscada no blog ) sobre como criar um filtro de navegação em camadas personalizado e sem atributos?
Obrigado pela leitura,
Si
fonte
Respostas:
Há outra maneira de fazer isso: você pode adicionar um atributo normal ao seu produto, que seria a classificação. Em seguida, use um observador (não sei como essa classificação é formada) para atualizar o atributo do produto. Ou, se um observador não for uma opção, talvez use um cronjob que atualize esse atributo para cada produto a cada x minutos, dependendo da intensidade do script.
Dessa forma, não há reescrita e alteração do Magento envolvidas, todos os módulos de navegação ainda funcionarão e é mais fácil de manter.
Claro que a pergunta é: isso é uma opção para você? De onde vêm as classificações?
EDIT Você teria que estilizar as estrelas usando javascript ou verificar o nome do atributo no modelo.
fonte
Eu procurei no código e não encontrei nenhum evento. Sem adicionar atributos extras, não há nada a fazer sem
<rewrite>
Você deve adicionar seu bloco
\Mage_Catalog_Block_Layer_View::_prepareLayout()
antes doapply()
(se não, você poderia usá-locore_block_abstract_prepare_layout_after
.E você precisa adicioná-lo
\Mage_Catalog_Block_Layer_View::getFilters()
e também não há eventos.fonte
catalog/layer_filter_category
,catalog/layer_filter_attribute
ecatalog_resource/layer_filter_attribute
para mostrar as opções o tempo todo sem usar ostate.phtml
no momento, não há como remover os filtros: - /