我正在尝试将显示排序选项的工具栏和Pager从产品列表中移出,以便我可以将其与面包屑和类别名称捆绑在一起。

找到了这个网站 它适用于较旧版本的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_listcatalog/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

关于这种方法为什么最好的推理:

  1. 产品列表和工具栏紧密地交织在一起,在其块中相互引用,因此将它们保持在代码方面是有意义的 - 他们并肩作战
  2. 更少的代码和更少的障碍更改意味着错误弹出的可能性较小
  3. 使用JavaScript,您可以轻松地将其移动到页面上的任何地方
  4. 使用布局XML,您只能在页面上包含JavaScript,并带有产品列表
  5. 通过JavaScript移动是可扩展的,并且可以实现未来 - 如果产品列表背后的逻辑或工具栏块在Magento新版本中的变化更改,则该方法仍然可以正常工作。

路飞的代码不远

要将块复制到网站的其他部分,您可以获取主布局对象,然后按名称获取内容块

      $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();
许可以下: CC-BY-SA归因
scroll top