模块中的getChild方法似乎没有引用子(?)

时间:2013-09-20 13:02:54

标签: magento module

我在项目中使用Meanbee Infinite Scroll模块。我让它适用于普通类别的产品列表。但现在我试图在我的定制模块上激活它。

但是我对68中的Script.php行感到困惑:

 66       return (
 67           $block !== false &&
 68           $block->getChild('toolbar') !== false && // <-- This line
 69           $this->_getPagerBlock() !== false &&
 70           $this->_getPagerBlock()->getCollection()
 71       );

没有name属性为toolbar的xml元素。即使在正常类别的xml中也是如此。那么"toolbar"指的是什么?

var_dump($block->getChild('toolbar'));在我的页面上返回false,但在普通类别产品列表页面上没有。

我的XML如下(为清晰起见):

        <block type="mynamespace/mymodule" name="mymodule.view" template="mynamespace/mymodule/view.phtml">
            <block type="catalog/product_list" name="product_list" template="toxicfox/giftfinder/list.phtml">
                <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>
                <action method="addColumnCountLayoutDepend"><layout>empty</layout><count>6</count></action>
                <action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>5</count></action>
                <action method="addColumnCountLayoutDepend"><layout>two_columns_left</layout><count>4</count></action>
                <action method="addColumnCountLayoutDepend"><layout>two_columns_right</layout><count>4</count></action>
                <action method="addColumnCountLayoutDepend"><layout>three_columns</layout><count>3</count></action>
                <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
            </block>
        </block>    

核心XML(与Infinite Scroll模块一起使用)是:

        <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 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>
                <action method="addColumnCountLayoutDepend"><layout>empty</layout><count>6</count></action>
                <action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>5</count></action>
                <action method="addColumnCountLayoutDepend"><layout>two_columns_left</layout><count>4</count></action>
                <action method="addColumnCountLayoutDepend"><layout>two_columns_right</layout><count>4</count></action>
                <action method="addColumnCountLayoutDepend"><layout>three_columns</layout><count>3</count></action>
                <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
            </block>
        </block>

如您所见,XML块中没有任何元素具有name "toolbar"的属性。唯一的区别是第1行。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

Mage_Catalog_Block_Product_List::_beforeToHtml()方法中,工具栏块从布局中检索,其名称由setToolbarBlockName操作指示,然后设置为产品列表的子块,{{1别名。

在您的情况下,问题可能是toolbar尚未输出$block,因此它还不知道其toHtml()孩子或某事这种(很难说因为扩展是商业性的)。