カテゴリツールバーを製品/リストから移動します
-
16-10-2019 - |
質問
ソートオプションとポケットベルを製品リストから表示するツールバーを移動しようとしているので、パンくずとカテゴリ名で束ねることができます。
私 このサイトを見つけました それはMagentoの古いバージョンでは機能しましたが、CE 1.7またはEE 1.12では機能していません。
コメントでは、誰かがルートに移動するコードを持っていましたが、それも機能しません。これは、それをカテゴリ/ビューに移動するためのコードでした。
$toolbar = $this->getChild('product_list')->getToolbarBlock();
$toolbar->setCollection($this->getChild('product_list')->getLoadedProductCollection());
echo $toolbar->toHtml();
パン粉、カテゴリ名、ツールバーをグループ化する別の方法がある場合は、私に知らせてください。
解決
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'); ?>
他のヒント
レイアウトXMLとテンプレートハックを介してツールバーブロックを移動しようとした後、JavaScriptを介して移動する方がずっと簡単だと判断しました。このようにして、機能を破るリスクなしに、より多くの制御を提供すると思います。
jQuery(document).ready(function($) {
$(".breadcrumbs").after($(".category-products > .toolbar"));
});
このメソッドは、特定のセレクターを使用して最初のツールバーではなく、最初のツールバーを移動します .category-products > .toolbar
この方法が最適な理由についてのいくつかの推論:
- 製品リストとツールバーは非常に絡み合っており、ブロックで互いに参照しているので、コードの観点から一緒に保つことは理にかなっています - 彼らは手をつないで行きます
- ロジックをブロックするためのコードが少なく、変更が少ないことは、バグがポップアップする確率が少ないことを意味します
- JavaScriptを使用すると、ページのどこにでも簡単に移動できます
- レイアウトXMLの使用製品リストのページにJavaScriptのみを含めることができます
- JavaScriptを介して移動することは拡張可能で将来の根拠があります - 製品リストの背後にあるロジックまたはツールバーブロックがMagentoの新しいリリースの変更をブロックすると、この方法は引き続き機能します。
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();
コードを試してください:
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();