Aujourd'hui, j'ai créé une option de navigation en couches qui n'est pas basée sur un attribut. C'est pour les cotes, donc l'avant peut montrer de belles étoiles brillantes.
Pour ce faire, j'ai:
- Créé un module
Réécriture de catalog_block_layer_view
<blocks> <catalog> <rewrite> <layer_view>Bob_Catalog_Block_Layer_View</layer_view> </rewrite> </catalog> </blocks>
Création d'une classe appelée Bob_Catalog_Block_Layer_View qui étend Mage_Catalog_Block_Layer_View
- _InitBlocks (), getFilters () et _prepareLayout () créés pour remplacer les méthodes des classes parentes. Ceux-ci appellent tous la classe parent à un moment donné, puis ajoutent ou ajoutent des données supplémentaires à ce qui est retourné.
- Créez un bloc de filtre Bob_Catalog_Block_Layer_Filter_Rating qui étend Mage_Catalog_Block_Layer_Filter_Abstract avec un constructeur qui définit le filterModelName et appelle son parent puis définit un modèle personnalisé comme il semble que Mage_Catalog_Block_Layer_Filter_Abstract a le nom du modèle codé en dur.
- Créez un modèle Bob_Catalog_Model_Layer_Filter_Rating qui étend Mage_Catalog_Model_Layer_Filter_Abstract et implémente apply (), getName (), _getItemsData ().
Tout cela fonctionne bien. Les belles étoiles brillantes apparaissent dans le nav en couches.
J'ai l'impression de manquer quelque chose, car en ce qui concerne le modèle d'état de calque, j'ai dû y mettre une condition pour récupérer le filtre de notation personnalisé et modifier la mise en page. De plus, certaines des choses que je devais faire (cloner la collection de produits pour que l'événement de chargement ne gâche pas la collecte comptent sur la pagination) me donnent l'impression d'avoir nagé en haut de la colline.
Donc, la question est de savoir si l'un de vous a de meilleures suggestions (ou peut-être un clin d'œil de blog ) sur la façon de créer un filtre de navigation en couches personnalisé sans attribut?
Merci d'avoir lu,
Si
la source
Réponses:
Il y a une autre façon de le faire, vous pouvez ajouter un attribut normal à votre produit qui serait la note. Utilisez ensuite un observateur (je ne sais pas comment cette note est formée) pour mettre à jour l'attribut du produit. Ou, si un observateur n'est pas une option, utilisez peut-être un cronjob qui met à jour cet attribut pour chaque produit toutes les x minutes en fonction de la lourdeur du script.
De cette façon, aucune réécriture et modification de Magento n'est impliquée, tous les modules de navigation continueront de fonctionner et seront plus faciles à maintenir.
Bien sûr, la question est, est-ce une option pour vous? D'où viennent les notes?
MODIFICATION Vous devez styliser les étoiles à l'aide de javascript ou vérifier le nom d'attribut dans le modèle.
la source
J'ai fouillé dans le code et n'ai trouvé aucun événement. Sans ajouter d'attributs supplémentaires, il n'y a rien à faire sans
<rewrite>
Vous devez ajouter votre bloc
\Mage_Catalog_Block_Layer_View::_prepareLayout()
avant leapply()
(sinon vous pourriez utilisercore_block_abstract_prepare_layout_after
.Et vous devez l'ajouter à
\Mage_Catalog_Block_Layer_View::getFilters()
et il n'y a pas d'événement aussi.la source
catalog/layer_filter_category
,catalog/layer_filter_attribute
etcatalog_resource/layer_filter_attribute
pour afficher les options tout le temps sans utiliserstate.phtml
pour le moment il n'y a aucun moyen de supprimer les filtres: - /