Hinzufügen eines mehrschichtigen Navigationsblocks zur benutzerdefinierten Seite

9

In Magento funktioniert der Layered Navigation-Block auf der Produktlistenseite einwandfrei.

Wie kann dieser Block erfolgreich auf eine benutzerdefinierte Seite kopiert werden, auf der eine benutzerdefinierte Produktliste vorhanden ist?

Hinweis: Nur den Block zum XML hinzuzufügen und ihn aufzurufen, getChildHtml('blockname')reicht nicht aus.

pzirkind
quelle
2
Sie müssen dem Layared-Navigationsblockcode eine Standardkategorie hinzufügen, da die Layared-Navigation aus den Produkten der aktuellen Kategorie erstellt wird.
Sander Mangel
+1 für die Hilfe, was ist, wenn es mehrere Produkte aus mehreren Kategorien gibt (z. B. Deal-Produkte)?
Pzirkind
2
Ich würde dafür eine spezielle Kategorie erstellen. Es mag andere Wege geben, aber dies ist definitiv der einfachste und skalierbarste!
Sander Mangel
1
Wenn Sie wirklich möchten, müssen Sie eine benutzerdefinierte Kategorie erstellen. Die geschichtete Navigation erwartet wirklich, dass es eine Kategorie gibt, mit der gearbeitet werden kann. Es wird keine einfache ProductCollection benötigt, ohne eine ganze Reihe von Klassen zu überschreiben.
Rick Kuipers

Antworten:

5

Grundsätzlich müssen Sie extend/overwriteaus Mage_Catalog_Block_Product_List (List.php) die getProductCollection()Methode neu schreiben :

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

    return $this->_productCollection;
}

Als das erledigt war, hatte ich sowohl die Mage_Catalog_Model_LayerKlasse als auch die überschrieben Mage_Catalog_Model_Categoryund eine neue Variable eingeführt:

protected $_customProductCollection;

Ich habe das getProductCollection()in beiden Klassen überschrieben und dies am Anfang der Methode hinzugefügt:

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

Ich habe auch eine Methode, mit der ich dies "customProductCollection"in diesen beiden Klassen festlegen kann . Sobald es festgelegt ist, basieren die restlichen Daten der geschichteten Navigation / Kategorie auf dieser Sammlung.

Schauen Sie sich hier die erste Frage + Antwort an .

Viel Glück ;)

Kenny
quelle
Mit welcher Methode können Sie die benutzerdefinierte Produktkollektion festlegen und woher rufen Sie sie auf?
easymoden00b