Блок Mage_Catalog_Block_Product_List
наследуется от класса Varien_Object
, который содержит методы getData()
и setData()
, а также магические методы get*()
и set*()
.Эти методы позволяют нам хранить (как вы уже догадались) ключевые данные в объекте.
Теги <action />
в XML позволяют нам выполнять вызовы методов для экземпляров блока.Вы почти там со своим вторым примером, но синтаксис:
<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);
Возможно, вам следуетсначала выполните проверку на наличие данных limit
и укажите значение по умолчанию, если в XML не указано ни одного.
Примечание : имя дочерних элементов в <action />
тег не имеет значения.Это порядок аргументов, которые важны.С таким же успехом мы могли бы позвонить <action method="setLimit"><foo>3</foo></action>
, и это все равно сработало бы.