Dodanie warstwowego bloku nawigacji do strony niestandardowej

9

W Magento blok nawigacji warstwowej działa dobrze na stronie listy produktów.

Jak można pomyślnie skopiować ten blok na niestandardową stronę, na której znajduje się niestandardowa lista produktów?

Uwaga: Dodanie bloku do kodu XML i wywołanie go getChildHtml('blockname')nie rozwiązuje problemu .

pzirkind
źródło
2
Musisz dodać domyślną kategorię do kodu blokowego nawigacji warstwowej, ponieważ nawigacja warstwowa jest budowana z produktów bieżącej kategorii.
Sander Mangel
+1 za pomoc, co zrobić, jeśli istnieje wiele produktów z wielu kategorii (na przykład produkty z ofertą)?
pzirkind
2
Zrobiłbym dla tego specjalną kategorię. Mogą istnieć inne sposoby, ale jest to zdecydowanie najłatwiejszy i najbardziej skalowalny!
Sander Mangel
1
Jeśli naprawdę tego chcesz, musisz utworzyć niestandardową kategorię. Nawigacja warstwowa naprawdę oczekuje, że będzie istniała kategoria do pracy, nie zajmie to prostego ProductCollection bez przesłonięcia całej masy klas.
Rick Kuipers

Odpowiedzi:

5

Zasadniczo musisz zrobić extend/overwritez Mage_Catalog_Block_Product_List (List.php) i przepisać getProductCollection()metodę:

protected function _getProductCollection()
{
    if (is_null($this->_productCollection)) {
        // Build collection and set it
        $collection = "...";
        $this->setProductCollection($collection);
    }

    return $this->_productCollection;
}

Kiedy to zrobiono, nadpisałem Mage_Catalog_Model_Layerklasę i klasę Mage_Catalog_Model_Categoryi wprowadziłem nową zmienną:

protected $_customProductCollection;

Nadpisałem 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 mi ustawić to "customProductCollection"w obu tych klasach. Po ustawieniu pozostałe dane warstwowej nawigacji / kategorii są oparte na tej kolekcji.

Sprawdź pierwsze pytanie + odpowiedź tutaj .

Powodzenia ;)

Kenny
źródło
Jaka jest ta metoda, aby ustawić customproductcollection i skąd go wywołujesz?
easymoden00b