2011-04-20 20 views
15

Ho lavorato su un modulo personalizzato per Magento (versione 1.8.0.0) che mostra un elenco di prodotti correlati di un determinato prodotto.Navigazione a strati Magento sulla collezione di prodotti personalizzati

Per ottenere ciò, ho creato il mio modulo sovrascrivendo la classe Mage_Catalog_Block_Product_List.

Fondamentalmente qui Funziona così:

da un controller prendo i prodotti entity_id e devo conservare il prodotto nel Registro di sistema in modo da poter utilizzare all'interno mia abitudine Block scritto che si chiama list.php

Ecco il metodo che riempie la raccolta del prodotto:

protected function _getProductCollection() 
{ 
    if (is_null($this->_productCollection)) { 
     $prod = Mage::registry('chosenproduct'); 
     $this->_productCollection = $prod->getRelatedProductCollection() 
      ->addAttributeToSelect('required_options') 
      ->addAttributeToFilter(array(array('attribute'=>'accessory_manufacturer','neq'=>false))) 
      ->addAttributeToSort('position', 'asc') 
      ->addStoreFilter() 
      ->setPageSize(30) 
      ->setCurPage(1); 
     ; 

     $this->_addProductAttributesAndPrices($this->_productCollection); 
     Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($this->_productCollection); 
     $this->setProductCollection($this->_productCollection); 
    } 

    return $this->_productCollection; 
} 

ho anche aggiunto quanto segue nella .xml il layout del mio modulo personalizzato per assicurarsi che la navigazione a strati mostra:

012.
<reference name="left"> 
     <block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml"/> 
    </reference> 

La navigazione a livelli mostra, ma sembra che stia prendendo tutti i prodotti come raccolta invece della raccolta personalizzata utilizzata nel metodo che ho aggiunto sopra.

so anche che posso ottenere il catalogo/strato di utilizzo di questo $layer = Mage::getSingleton('catalog/layer');

classe Lo strato ha anche un metodo chiamato prepareProductCollection e setCollection ma per qualche motivo non riesco a farlo funzionare.

Qualsiasi aiuto su questo?

In sostanza, desidero avere la navigazione a livelli per i prodotti presenti nella raccolta personalizzata.

Grazie,

risposta

15

Sono riuscito a ottenere ciò che volevo. Ho sovrascritto sia la classe Mage_Catalog_Model_Layer e la Mage_Catalog_Model_Category

Entrambi hanno ora una nuova variabile denominata $ _customCollection: protected $_customProductCollection;

ho sovrascritto il getProductCollection() in entrambe le classi e ho aggiunto questo all'inizio del metodo:

if(isset($this->_customProductCollection)){ 
     return $this->_customProductCollection; 
    } 

Ho anche un metodo che mi permette di impostare questo "customProductCollection" all'interno di entrambe queste classi. Una volta impostato, il resto dei dati della navigazione/categoria a strati si basa su questa raccolta.

;)

+2

Qual è il metodo di impostazione e da dove viene chiamato? – easymoden00b

Problemi correlati