Verschieben der Kategoriesymbolleiste aus Produkt / Liste

8

Ich versuche, die Symbolleiste mit den Sortieroptionen und dem Pager aus der Produktliste zu verschieben, damit ich sie mit den Breadcrumbs und dem Kategorienamen bündeln kann.

Ich habe diese Seite gefunden , die für ältere Versionen von Magento funktioniert, aber nicht für CE 1.7 oder EE 1.12.

In den Kommentaren hatte jemand Code, um ihn in das Stammverzeichnis zu verschieben, aber das funktioniert auch nicht. Dies war der Code, um es in eine Kategorie / Ansicht zu verschieben, was helfen würde:

$toolbar = $this->getChild('product_list')->getToolbarBlock();
$toolbar->setCollection($this->getChild('product_list')->getLoadedProductCollection());
echo $toolbar->toHtml();

Wenn es eine andere Möglichkeit gibt, die Breadcrumbs, den Kategorienamen und die Symbolleiste zu gruppieren, lassen Sie es mich wissen.

Kel
quelle

Antworten:

13

Catalog/product_listund catalog/product_list_toolbarsind so miteinander verdrahtet, dass Sie nicht weiter miteinander umgehen können. Wenn Sie jedoch nur die Symbolleiste anzeigen möchten, müssen Sie eine (fast) leere Vorlage für die Produktliste erstellen.

Angenommen, Sie möchten, dass die Symbolleiste im Breadcrumbs-Block angezeigt wird, dies sollte jedoch mit jedem Block wirklich funktionieren.

layout/local.xmlFügen Sie das folgende Update irgendwo in Ihr ein (möglicherweise benötigen Sie auch eines für catalog_category_default):

<catalog_category_layered>
    <reference name="breadcrumbs">
        <block type="catalog/product_list" name="toolbar_only" template="catalog/product/list/toolbar_only.phtml">
            <block type="catalog/product_list_toolbar" name="product_list_toolbar_only" template="catalog/product/list/toolbar.phtml">
                <block type="page/html_pager" name="product_list_toolbar_pager"/> 
            </block>    
            <action method="setToolbarBlockName"><name>product_list_toolbar_only</name></action>
        </block>            
    </reference>            
</catalog_category_layered>

Erstellen Sie eine einzeilige Produktlistenvorlage in template/catalog/product/list/toolbar_only.phtml:

<?php echo $this->getToolbarHtml() ?>

Sie können den neuen Block dann an einer beliebigen Stelle in Ihre Breadcrumbs-Vorlage einfügen:

template/page/html/breadcrumbs.phtml::

<?php echo $this->getChildHtml('toolbar_only'); ?>
Jan Tomka
quelle
Dies ist auch eine ziemlich gute Methode - ich bin völlig damit einverstanden, Produktlisten und Symbolleisten um jeden Preis zusammenzuhalten. Ich würde mich freuen, Ihre Meinung zu der zuvor veröffentlichten Javascript-Methode zu hören.
jharrison.au
@ Jan Tomka tolle Antwort! Ich hatte Probleme damit, einen Block zwischen der Symbolleiste und den Produkten selbst zu verschieben, und Ihre Lösung hat dies ermöglicht. Vielen Dank!
Ronen Ness
Das Problem bei dieser Antwort besteht darin, dass der konfigurierbare Farbfeldbeobachter erneut ausgeführt wird, da der catalog/product_listBlock zweimal vorhanden ist und die catalog_block_product_list_collectionMethode zweimal ausgelöst wird (was der Beobachter beobachtet). Dies erhöht die Ladezeit von Kategorieseiten drastisch.
Robbie Averill
Stimmt das. Die ursprüngliche Antwort wurde geschrieben, bevor die konfigurierbaren Farbfelder auftauchten (nicht, dass ich zu diesem Zeitpunkt nach mehreren Beobachterausführungen gesucht hätte). Es ist möglicherweise am besten, einen separaten Blocktyp zu verwenden, der aus catalog / product_list erweitert wurde, wobei der Ereignisversand aus _beforeToHtml () entfernt wurde.
Jan Tomka
4

Nachdem ich versucht hatte, den Symbolleistenblock durch Layout-XML- und Vorlagen-Hacks zu verschieben, entschied ich, dass es viel einfacher war, ihn über Javascript zu verschieben. Ich denke, auf diese Weise erhalten Sie mehr Kontrolle, ohne dass die Gefahr besteht, dass die Funktionalität beeinträchtigt wird.

jQuery(document).ready(function($) {
     $(".breadcrumbs").after($(".category-products > .toolbar"));
});

Beachten Sie, dass diese Methode nur die erste Symbolleiste und nicht die untere Symbolleiste mit dem spezifischen Selektor verschiebt .category-products > .toolbar

Weitere Überlegungen, warum diese Methode am besten ist:

  1. Die Produktliste und die Symbolleiste sind stark miteinander verflochten und verweisen in ihren Blöcken aufeinander. Daher ist es sinnvoll, sie in Bezug auf den Code zusammenzuhalten - sie gehen Hand in Hand
  2. Weniger Code und weniger Änderungen an der Blocklogik bedeuten eine geringere Wahrscheinlichkeit, dass Fehler auftreten
  3. Mit Javascript können Sie es einfach an eine beliebige Stelle auf der Seite verschieben
  4. Mit Layout-XML können Sie das Javascript nur auf Seiten mit einer Produktliste einfügen
  5. Das Verschieben über Javascript ist erweiterbar und zukunftssicher. Wenn die Logik hinter der Produktliste oder der Symbolleiste Änderungen in den neuen Versionen von Magento blockiert, funktioniert diese Methode weiterhin.
jharrison.au
quelle
Ich würde diese Methode voll und ganz anwenden, aber ich versuche, die Website so wenig Javascript wie möglich zu verwenden, obwohl ich weiß, dass Magento Javascript-abhängig ist.
Kel
4

LuFFys Code ist nicht weit weg

Um den Block in andere Teile Ihrer Site zu kopieren, können Sie das Hauptlayoutobjekt und dann nur den Inhaltsblock nach Namen abrufen

      $layout = Mage::app()->getLayout();
      $content = $layout->getBlock('content');
      $categoryProducts = $content->getChild('category.products');
      $productList = $categoryProducts->getChild('product_list');
      $toolbar = $productList->getToolbarBlock();
      $toolbar->setCollection($productList->getLoadedProductCollection());
      echo $toolbar->toHtml();
Ruckeln
quelle
Wo kann man das verwenden?
Pratik
@PratikCJoshi Ich habe diesen Code direkt in meine Datei catalog / layer / view.phtml eingefügt und er hat einwandfrei funktioniert. Sie sollten ihn also einfach in eine beliebige Vorlagendatei einfügen können, in der die Symbolleiste angezeigt werden soll.
Gregdev
0

Probieren Sie den Code aus:

getParentBlock();
$content = $parent->getChild(‘content’);
$categoryProducts = $content->getChild(‘category.products’);
$productList = $categoryProducts->getChild(‘product_list’);
$toolbar = $productList->getToolbarBlock();
$toolbar->setCollection($productList->getLoadedProductCollection());
echo $toolbar->toHtml();
LuFFy
quelle
Das war der gleiche Code in den Kommentaren und es gibt mir diesen Fehler:Call to undefined function getParentBlock()
Kel
Oh...!! Das gleiche habe ich auf einer anderen Seite gefunden.
LuFFy