Краткий ответ: вы не можете устанавливать значения для блоков "внутри" блоков CMS, используя макет XML.
Когда в контроллерах действий вызывается loadLayout()
, XML-макет обрабатывается, создаются все блоки и выполняются узлы <action>
.Но блоки еще не визуализируются.
Когда вызывается renderLayout()
, блоки визуализируются путем вызова их метода toHtml()
.
Если блок является экземпляром cms/block
(или cms/page
), содержащим экземпляр {{block ...}}
, этот блок будет создан в данный момент.
В этот момент во время потока запросов все узлы XML макета <action>
уже обработаны.
По сути, вы ссылаетесь на экземпляр блока в XML макета, который еще не существует.
В качестве обходного пути может быть полезно добавить блок списка продуктов на домашнюю страницу, используя также макет XML.Недостатком является то, что вы не можете свободно размещать его в другом содержимом блока CMS.
<cms_index_index><!-- layout handle for the default homepage action -->
<reference name="content">
<block type="catalog/product_list" name="product_list">
<action method="setTemplate">
<template>catalog/product/list.phtml</template>
</action>
<action method="setCategoryId">
<catId>51</catId>
</action>
<action method="setColumnCount">
<count>4</count>
</action>
</block>
</reference>
</cms_index_index>
Конечно, вы не ограничены блоком списка товаров.Если вам нужно разместить список внутри другого контента, вы можете добавить блоки cms на домашнюю страницу, используя макет XML-объявления.