Navigazione a livelli personalizzata non basata su attributi. È questo l'unico modo per farlo?


8

Oggi ho eliminato un'opzione di navigazione a più livelli che non si basa su un attributo. È per le valutazioni, quindi il front-end può mostrare belle stelle luccicanti.

Per fare questo ho:

  1. Creato un modulo
  2. Riscrivi catalog_block_layer_view

    <blocks>        
      <catalog>
        <rewrite>
          <layer_view>Bob_Catalog_Block_Layer_View</layer_view>
         </rewrite>                
       </catalog>
    </blocks>
    
  3. Creata una classe chiamata Bob_Catalog_Block_Layer_View che estende Mage_Catalog_Block_Layer_View

  4. Creato _initBlocks (), getFilters () e _prepareLayout () per sovrascrivere i metodi delle classi parent. Tutti questi chiamano la classe genitrice ad un certo punto e quindi antepongono o aggiungono dati extra a ciò che viene restituito.
  5. Crea un blocco filtro Bob_Catalog_Block_Layer_Filter_Rating che estende Mage_Catalog_Block_Layer_Filter_Abstract con un costruttore che imposta filterModelName e chiama il suo genitore e quindi imposta un modello personalizzato come sembra Mage_Catalog_Block_Layer_Filter nel nome del modello hardcod.
  6. Crea un modello Bob_Catalog_Model_Layer_Filter_Rating che estende Mage_Catalog_Model_Layer_Filter_Abstract e implementa apply (), getName (), _getItemsData ().

Funziona tutto bene. Le belle stelle lucenti mostrano nel nav a strati.

Ho la sensazione che mi manchi qualcosa perché quando si tratta di template di stato layer ho dovuto mettere un condizionale lì dentro per raccogliere il filtro di valutazione personalizzato e modificare il layout. Anche alcune delle cose che ho dovuto fare (clonare la raccolta di prodotti in modo che l'evento load non rovini i conteggi della raccolta sulla paginazione) mi fanno sentire come se stessi nuotando su per la collina.

Quindi la domanda è se qualcuno di voi ha qualche suggerimento migliore (o forse un wink per un post sul blog ) su come costruire un filtro di navigazione a livelli personalizzato senza attributi?

Grazie per aver letto,

Si


Devo farlo i giorni successivi e ho pensato di farlo in questo modo.
Fabian Blechschmidt,

Risposte:


5

C'è un altro modo di farlo, potresti aggiungere un attributo normale al tuo prodotto che sarebbe la valutazione. Quindi utilizzare un osservatore (non so come sia formata questa valutazione) per aggiornare l'attributo del prodotto. Oppure, se un osservatore non è un'opzione, forse usa un cronjob che aggiorna quell'attributo per ogni prodotto ogni x minuti a seconda della pesantezza dello script.

In questo modo non è necessario riscrivere e modificare Magento, tutti i moduli di navigazione continueranno a funzionare ed è più facile da mantenere.

Naturalmente la domanda è: è questa un'opzione per te? Da dove provengono le valutazioni?

MODIFICA Dovresti modellare le stelle usando javascript o controllare il nome dell'attributo nel modello.


Penso che questo copra praticamente tutte le opzioni. Il suggerimento dell'osservatore è un'idea interessante.
Si Griffiths,

Se ricordo, lo stile a stella standard si presenta come una larghezza CSS basata su una valutazione media di 5. 1/5 = larghezza 20%, 4,3 / 5 = larghezza 86%, ecc. Dubito che debba cambiare ... ma aggiornare il valore dell'attributo tramite uno script cron è piuttosto intelligente. +1
pspahn

2

Ho scavato nel codice e non ho trovato alcun evento. Senza aggiungere ulteriori attributi non c'è nulla da fare senza<rewrite>

Devi aggiungere il blocco \Mage_Catalog_Block_Layer_View::_prepareLayout()prima di apply()(se non puoi usarlo core_block_abstract_prepare_layout_after.

E devi aggiungerlo a \Mage_Catalog_Block_Layer_View::getFilters()e non ci sono eventi.


Questo è esattamente quello che ho trovato. Sembra inoltre che non ci sia modo di aggirare il modello state.phtml. Sembra che sia necessario un ramo condizionale per modificare qualsiasi output.
Si Griffiths,

Ho riscritto catalog/layer_filter_category, catalog/layer_filter_attributee catalog_resource/layer_filter_attributeper visualizzare le opzioni per tutto il tempo senza utilizzare il state.phtmlal momento non v'è alcun modo per rimuovere i filtri: - /
Fabian Blechschmidt

Il mio lavoro aveva un if ($ _filter-> getName () === 'qualunque') {} Per andare in giro mostrando html di stato personalizzato. Non è un'ottima soluzione ma è comunque una soluzione. Ps. Spero che tu stia bene dall'ultima volta che ci siamo incontrati all'MDP.
Si Griffiths,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.