Magento产品系列限制通过XML

时间:2011-08-05 16:30:22

标签: magento collections limit product

我有一个畅销书模块,我已经编写过并且效果很好,但是我希望能够通过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 +限制从任何地方调用畅销书模块的许多情况。

如果有人能说清楚这一点,请提前致谢!

1 个答案:

答案 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 />,但它仍然有效。