我有一个畅销书模块,我已经编写过并且效果很好,但是我希望能够通过XML更改它返回的集合大小,而不是php / phtml。
这样的事情:
<block type="catalog/product_list" name="bestsellers" limit="3"
template="custom/bestsellers.phtml" />
或类似的东西:
<block type="catalog/product_list" name="bestsellers"
template="custom/bestsellers.phtml">
<action method="setLimit">3</action>
</block>
这可能吗?
我目前正在通过phtml更改限制:
->setPageSize(3)
->setCurPage(1);
但这是硬编码和讨厌的,我需要能够使用我的phtml文件作为模板,以便在XML中使用XML +限制从任何地方调用畅销书模块的许多情况。
如果有人能说清楚这一点,请提前致谢!
答案 0 :(得分:4)
块Mage_Catalog_Block_Product_List
继承自Varien_Object
类,其中包含方法getData()
和setData()
,以及魔术方法get*()
和{{1 }}。这些方法允许我们在对象中存储(您猜对了)键控数据。
XML中的set*()
标记允许我们对块实例执行方法调用。您的第二个示例几乎就在那里,但语法是:
<action />
相当于:
<block type="catalog/product_list" name="bestsellers">
<action method="setLimit"><value>3</value></action>
</block>
大致相当于:
<block type="catalog/product_list" name="bestsellers">
<action method="setData"><key>limit</key><value>3</value></action>
</block>
使用对象中的数据集,我们现在可以通过调用$block = new Mage_Catalog_Block_Product_List();
$block->setLimit(3);
或getData()
制作我们的块代码,通过get*()
或$this->getLimit()
方法进行访问:
$this->getData('limit')
您应该首先检查是否存在->setPageSize($this->getLimit())
->setCurPage(1);
数据,如果XML中没有提供默认值,则提供默认值。
注意:limit
标记中的子项名称无关紧要。这是重要论点的顺序。我们也可以调用<action />
,但它仍然有效。