カテゴリーツールバーを製品/リストから移動する


8

並べ替えオプションとページャーを表示するツールバーを製品リストから移動して、ブレッドクラムとカテゴリー名にバンドルできるようにしています。

古いバージョンのMagentoで機能するこのサイト見つけましたが、CE 1.7またはEE 1.12では機能しません。

コメントで、誰かがそれをルートに移動するコードを持っていますが、それも機能しません。これは、それをカテゴリー/ビューに移動するためのコードでした:

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

パンくずリスト、カテゴリ名、ツールバーをグループ化する別の方法がある場合は、お知らせください。

回答:


13

Catalog/product_listそしてcatalog/product_list_toolbar、あなたはそれらを一緒に使用することに行き詰まるほどお互いに配線されたトラフです。ただし、ツールバーを表示するだけの場合は、(ほぼ)空のproduct_listテンプレートを作成する必要があります。

たとえば、ブレッドクラムブロックにツールバーを表示したいとしますが、これはどのブロックでも機能するはずです。

次の更新をどこかに配置しますlayout/local.xml(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>

でワンライナー製品リストテンプレートを作成しtemplate/catalog/product/list/toolbar_only.phtmlます。

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

その後、ブレッドクラムテンプレートのどこにでも新しいブロックを挿入できます。

template/page/html/breadcrumbs.phtml

<?php echo $this->getChildHtml('toolbar_only'); ?>

これもかなり良い方法です。私は、すべてのコストで製品リストとツールバーをまとめることに完全に同意します。以前に投稿したjavascriptメソッドについてのご意見をお聞かせください。
jharrison.au 2013年

@ヤントムカ素晴らしい答え!私はツールバーと製品自体の間にブロックを押し込もうとするのに苦労していました、そしてあなたの解決策はそれを可能にしました。ありがとう!
Ronen Ness、2015

この回答の問題は、catalog/product_listブロックが2回存在し、catalog_block_product_list_collectionメソッドが2回ディスパッチされる(オブザーバーが監視している)ため、構成可能なスウォッチオブザーバーが再度実行されるようになることです。これにより、カテゴリページの読み込み時間が大幅に増加します。
ロビーアベリル2016

そうだね。元の答えは、構成可能なスウォッチが登場する前に書かれていました(その時点で複数のオブザーバーの実行をチェックしたわけではありません)。イベントのディスパッチを_beforeToHtml()から削除して、catalog / product_listから拡張された別個のブロックタイプを使用するのが最善の場合があります。
Jan Tomka 2016

4

レイアウトXMLとテンプレートのハックを介してツールバーブロックを移動しようとした後、JavaScriptを介して移動する方がはるかに簡単であると判断しました。この方法では、機能を壊すリスクなしに、より多くの制御ができると思います。

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

このメソッドは最初のツールバーのみを移動し、特定のセレクターを使用して下部のツールバーは移動しないことに注意してください .category-products > .toolbar

この方法が最適である理由について、さらにいくつかの理由があります。

  1. 製品リストとツールバーは密接に絡み合っており、ブロック内で相互に参照しているため、コードに関してそれらを一緒に保つことは理にかなっています-それらは連携しています
  2. ブロックロジックのコードと変更が少ないほど、バグが発生する可能性が低くなります
  3. JavaScriptを使用すると、ページの任意の場所に簡単に移動できます
  4. レイアウトXMLを使用すると、製品リストのあるページにのみJavaScriptを含めることができます
  5. JavaScriptを介した移動は拡張可能で将来も保証されます-製品リストまたはツールバーの背後にあるロジックがMagentoの新しいリリースでの変更をブロックする場合、この方法は引き続き機能します。

私は完全にこの方法を使用しますが、MagentoがJavaScriptに依存していることを知っていても、サイトをできるだけ使用しないようにしています。
KEL

4

LuFFyのコードはそれほど遠くない

ブロックをサイトの他の部分にコピーするには、メインレイアウトオブジェクトを取得してから、コンテンツブロックを名前で取得します

      $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();

これをどこで使うの?
Pratik、2015年

@PratikCJoshiこのコードを直接私のcatalog / layer / view.phtmlファイルに入れて、それは完全に機能したので、ツールバーを表示したいテンプレートファイルにこれを置くことができるはずです。
gregdev 2016

0

コードを試してください:

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();

それは、コメント内の同じコードであり、それは私に、このエラーを与える:Call to undefined function getParentBlock()
KEL

ああ...!!同じ私は別のサイトで見つけました。
LuFFy 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.