2011-04-20 12 views
15

Pracuję nad niestandardowym modułem dla Magento (wersja 1.8.0.0), który pokazuje listę powiązanych produktów danego produktu.Nawigacja warstwowa Magento na niestandardowej kolekcji produktów

Aby to osiągnąć, stworzyłem własny moduł, zastępując klasę Mage_Catalog_Block_Product_List.

Zasadniczo oto jak to działa:

od kontrolera złapię produkty entity_id i przechowywać produkt w rejestrze, dzięki czemu można go używać w moim niestandardowego pisemnej bloku, który jest nazywany list.php

Oto metoda, która wypełnia kolekcję produktów:

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; 
} 

Dodałem też następujące w .xml układ mojego modułu niestandardowego upewnić warstwowa nawigacja pokazuje:

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

Nawigacja warstwowa pokazuje, ale wygląda na to, że bierze wszystkie produkty jako kolekcję zamiast niestandardowego zbioru używanego w metodzie, którą dodałem powyżej.

wiem też, że mogę dostać katalog/warstwę za pomocą tego $layer = Mage::getSingleton('catalog/layer');

klasa Warstwa posiada również metodę zwaną prepareProductCollection i setCollection ale z jakiegoś powodu nie mogę zmusić go do pracy.

Każda pomoc w tej sprawie?

Zasadniczo chcę mieć warstwową nawigację dla produktów znajdujących się w kolekcji niestandardowej.

Dzięki,

Odpowiedz

15

Udało mi się osiągnąć to, co chciałem. Mam nadpisane zarówno klasę Mage_Catalog_Model_Layer i Mage_Catalog_Model_Category

zarówno teraz mają nową zmienną o nazwie $ _customCollection: protected $_customProductCollection;

Mam nadpisane na getProductCollection() w obu klasach I dodałem to na początku metody:

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

Mam również metodę, która pozwala ustawić ten "customProductCollection" wewnątrz obu tych klas. Po ustawieniu, pozostałe dane warstwowej nawigacji/kategorii oparte są na tej kolekcji.

;)

+2

Co to jest metoda ustawienia i skąd ją wywołujesz? – easymoden00b