0

我在将产品列表工具栏从内容块移动到左侧块时遇到问题。

我想只显示排序选项,这很容易通过设置自定义工具栏模板文件toolbar_custom.html来完成。但我得到一个输出错误。

到目前为止,我在layout/catalog.xml

<catalog_category_default translate="label">
    <label>Catalog Category (Non-Anchor)</label>
    <reference name="left">
        <block type="catalog/navigation" name="catalog.leftnav" after="currency" template="catalog/navigation/left.phtml">
        <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar_custom.phtml"/>
        <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
    </block>
    </reference>
    <reference name="content">
        <block type="catalog/category_view" name="category.products" template="catalog/category/view.phtml">
            <block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml"/>
        </block>
    </reference>
</catalog_category_default>

这在navigation/left.phtml

<?php $magento_block = Mage::getSingleton('core/layout'); ?>
<?php $toolbarHtml = $magento_block->createBlock('catalog/product_list'); ?>
<?php $toolbarHtml->setTemplate('catalog/product/list/toolbar_custom.phtml'); ?>
<?php echo $toolbarHtml ->toHTML(); ?>

这是我的自定义工具栏模板 - toolbar_custom.phtml

<?php if($this->getCollection()->getSize()): ?>
    <div class="toolbar">
    <?php if( $this->isExpanded() ): ?>
        <div class="sort-by">
            <label><?php echo $this->__('Sort By') ?></label>
            <select onchange="setLocation(this.value)">
                <?php var_dump($this->getName()); ?>
                <?php foreach($this->getAvailableOrders() as $_key=>$_order): ?>
                    <option value="<?php echo $this->getOrderUrl($_key, 'asc') ?>"<?php if($this->isOrderCurrent($_key)): ?> selected="selected"<?php endif; ?>>
                        <?php echo $this->__($_order) ?>
                    </option>
                <?php endforeach; ?>
            </select>
       </div>
    <?php endif; ?>
    </div>
<?php endif ?>

当我在浏览器中打开产品列表页面时,我收到以下错误消息:

致命错误:在第 37 行的 magento/app/design/frontend/my_theme/default/template/catalog/product/list/toolbar_custom.phtml 中的非对象上调用成员函数 getSize()

我正在使用 Magento 社区 1.6 ..

4

4 回答 4

1

在 layout/catalog.xml 文件下,对 Default 部分进行更改。

<block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
                        <block type="page/html_pager" name="product_list_toolbar_pager"/>
 </block>

在此参考部分中包含上述代码

<reference name="left">
  <block type="catalog/navigation" name="catalog.categorymenu" before="cart_sidebar"  template="catalog/navigation/left_catalog.phtml"/> 
</reference> 

您可以在块内使用自己的工具栏.phtml 文件

于 2012-07-11T02:18:17.273 回答
1

我有同样的问题。这对我有用:

<reference name="left">块中的 layout/catalog.xml 中,插入:

<block type="catalog/product_list" name="catalog_product_list" template="catalog/product/list.phtml"></block>

然后,在你想要工具栏的 left.phtml 中:

<?php
  $toolbar = $this->getChild('catalog_product_list')->getToolbarBlock();
  $toolbar->setCollection($this->getChild('catalog_product_list')->getLoadedProductCollection());
  echo $toolbar->toHtml();
?>
于 2013-11-05T10:27:47.877 回答
0

将此添加到您的布局中:

<catalog_category_layered translate="label">
  <reference name="left">       
        <!-- Adds the toolbar to the left column -->
        <block type="catalog/category_view" name="category.page.toolbar" template="catalog/category/sidetoolbar.phtml">
            <block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
                <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml" />
                <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
            </block>
        </block>

        <!-- We use the original toolbar - you could also write your own -->
        <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
            <block type="page/html_pager" name="product_list_toolbar_pager"/>
        </block>
  </reference>
</catalog_category_layered>

并在 catalog/category/sidetoolbar.phtml 创建一个新模板:

<?php 
// lets get the toolbar block
$toolbar = $this->getChild('product_list')->getToolbarBlock();
// add the product collection
$toolbar->setCollection($this->getChild('product_list')->getLoadedProductCollection());
?>

来源:https ://gist.github.com/viezel

于 2016-08-04T15:31:07.037 回答
-1

只需像这样重命名块:

<block type="catalog/product_list_toolbar" name="product_list_toolbar_custom" template="catalog/product/list/toolbar_custom.phtml"/>
<action method="setToolbarBlockName"><name>product_list_toolbar_custom</name></action>
于 2014-10-20T22:43:26.350 回答