Navigation personnalisée en couches à base non attribut. Est-ce la seule façon de le faire?

magento.stackexchange https://magento.stackexchange.com/questions/328

  •  16-10-2019
  •  | 
  •  

Question

Aujourd'hui, j'ai été une frappe option de navigation à plusieurs niveaux qui ne repose pas sur un attribut. Il est pour les cotes si l'avant peut montrer de belles étoiles brillantes.

Pour ce faire, je:

  1. créé un module
  2. Réécriture catalog_block_layer_view

    <blocks>        
      <catalog>
        <rewrite>
          <layer_view>Bob_Catalog_Block_Layer_View</layer_view>
         </rewrite>                
       </catalog>
    </blocks>
    
  3. Création d'une classe appelée Bob_Catalog_Block_Layer_View qui étend Mage_Catalog_Block_Layer_View

  4. _initBlocks CRÉE (), getFilters () et _prepareLayout () pour remplacer les méthodes de classes parentes. Tous ces appels la classe parent à un moment donné, puis suivre ou précéder les données jointes supplémentaires pour ce qui est de retour.
  5. Créer un Bob_Catalog_Block_Layer_Filter_Rating bloc de filtre qui s'étend Mage_Catalog_Block_Layer_Filter_Abstract avec un constructeur qui définit les filterModelName et appelle sa mère et définit ensuite un modèle personnalisé comme il semble Mage_Catalog_Block_Layer_Filter_Abstract a le nom du modèle dans son constructeur hardcoded.
  6. Créer un Bob_Catalog_Model_Layer_Filter_Rating modèle qui étend Mage_Catalog_Model_Layer_Filter_Abstract et met en œuvre apply (), getName (), _getItemsData ().

Cela fonctionne tout va bien. Les étoiles brillantes belles montrent dans la navigation en couches.

J'ai un sentiment profond que je manque quelque chose parce que quand il s'agit de modèle d'état de calque que j'ai dû mettre un conditionnel là pour ramasser le filtre de classement personnalisé et modifier la mise en page. Aussi quelques-unes des choses que j'ai besoin pour faire (clone la collection de produits de telle sorte que l'événement de chargement ne vis pas la collection compte sur la pagination) me faire sentir comme je l'ai nagé jusqu'à la colline.

La question est donc un de vous a obtenu de meilleures suggestions (ou peut-être un billet de blog clin d'oeil ) sur la façon de construire un non-attribut personnalisé soutenu par le filtre de navigation en couches?

Merci pour la lecture,

Si

Était-ce utile?

La solution

Il y a une autre façon de le faire, vous pouvez ajouter un attribut normal de votre produit qui serait la cote. Ensuite, utilisez un observateur (je ne sais pas comment cette note est formé) pour mettre à jour l'attribut du produit. Ou, si un observateur a pas d'option, peut-être utiliser une tâche cron qui met à jour cet attribut pour chaque produit toutes les x minutes selon la façon dont le script est lourd.

De cette façon, il n'y a pas Magento la réécriture et la modification en cause, tous les modules de navigation reste du travail et il est plus facile à maintenir.

Bien sûr, la question est, est-ce une option pour vous? D'où viennent les notes de?

EDIT Vous auriez au style les étoiles en utilisant javascript ou contrôle sur le nom d'attribut dans le modèle.

Autres conseils

Je creusa dans le code et n'a trouvé aucun événement. Sans l'ajout d'attributs supplémentaires il n'y a rien à faire sans <rewrite>

Vous devez ajouter votre bloc \Mage_Catalog_Block_Layer_View::_prepareLayout() avant la apply() (sinon vous pouvez utiliser core_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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top