Hoy he estado activando una opción de navegación en capas que no se basa en un atributo. Es para clasificaciones, por lo que la parte delantera puede mostrar bonitas estrellas brillantes.
Para hacer esto tengo:
- Creado un módulo
Reescrito catalog_block_layer_view
<blocks> <catalog> <rewrite> <layer_view>Bob_Catalog_Block_Layer_View</layer_view> </rewrite> </catalog> </blocks>
Creó una clase llamada Bob_Catalog_Block_Layer_View que extiende Mage_Catalog_Block_Layer_View
- Creó _initBlocks (), getFilters () y _prepareLayout () para anular los métodos de las clases principales. Todos ellos llaman a la clase padre en algún momento y luego anteponen o agregan datos adicionales a lo que se devuelve.
- Cree un bloque de filtro Bob_Catalog_Block_Layer_Filter_Rating que extiende Mage_Catalog_Block_Layer_Filter_Abstract con un constructor que establece el filterModelName y llama a su padre y luego establece una plantilla personalizada, ya que parece que Mage_Catalog_Block_Layer_Filter_Abstract tiene el nombre de la plantilla en el constructor.
- Cree un modelo Bob_Catalog_Model_Layer_Filter_Rating que extienda Mage_Catalog_Model_Layer_Filter_Abstract e implemente apply (), getName (), _getItemsData ().
Todo esto funciona bien. Las bonitas estrellas brillantes se muestran en la navegación en capas.
Tengo el presentimiento de que me falta algo porque cuando se trata de una plantilla de estado de capa, tuve que poner un condicional para recoger el filtro de calificación personalizado y alterar el diseño. Además, algunas de las cosas que necesito hacer (clonar la colección de productos para que el evento de carga no arruine la colección cuenta con la paginación) me hacen sentir que he estado nadando cuesta arriba.
Entonces, la pregunta es si alguno de ustedes tiene mejores sugerencias (o tal vez un guiño de publicación de blog ) sobre cómo construir un filtro de navegación en capas personalizado sin respaldo de atributos.
Gracias por leer,
Si
fuente
Respuestas:
Hay otra forma de hacerlo, podría agregar un atributo normal a su producto, que sería la calificación. Luego use un observador (no sé cómo se forma esta calificación) para actualizar el atributo del producto. O, si un observador no es una opción, tal vez use un cronjob que actualice ese atributo para cada producto cada x minutos dependiendo de qué tan pesado sea el script.
De esta manera, no hay reescritura ni alteración de Magento, todos los módulos de navegación seguirán funcionando y es más fácil de mantener.
Por supuesto, la pregunta es, ¿es esta una opción para usted? ¿De dónde vienen las calificaciones?
EDITAR Tendría que diseñar las estrellas usando javascript o verificar el nombre del atributo en la plantilla.
fuente
Excavé el código y no encontré ningún evento. Sin agregar atributos adicionales no hay nada que hacer sin
<rewrite>
Tienes que agregar tu bloque
\Mage_Catalog_Block_Layer_View::_prepareLayout()
antes delapply()
(si no, puedes usarlocore_block_abstract_prepare_layout_after
.Y debe agregarlo
\Mage_Catalog_Block_Layer_View::getFilters()
y no hay ningún evento también.fuente
catalog/layer_filter_category
,catalog/layer_filter_attribute
ycatalog_resource/layer_filter_attribute
para mostrar las opciones todo el tiempo sin usar elstate.phtml
en este momento no hay forma de eliminar los filtros: - /