我正在研究自定义模块,并尝试在加载时将cms块上的自定义模块块代码嵌入。我的代码是:
{{block type="module/block_name" categories="2,4,3" template="catalog/product/list.phtml" }}
这在cms阻止页面上运行。但我试图在运行时嵌入块代码。为此我创建了一个事件
<events>
<controller_action_layout_generate_blocks_before>
<observers>
<mypage>
<type>singleton</type>
<class>Module_Model_Observer</class>
<method>addlisttocms</method>
</mypage>
</observers>
</controller_action_layout_generate_blocks_before>
</events>
在观察者身上我创建了函数:
public function addlisttocms(Varien_Event_Observer $observer)
{
$controller = Mage::app()->getRequest()->getControllerName();
$layout = Mage::app()->getRequest()->getRouteName();
$var = Mage::app()->getRequest()->getActionName();
$page = Mage::app()->getRequest()->getParam('page_id');
}
现在我希望当cms页面加载时,我使用上面的函数嵌入我的块。有可能吗?
答案 0 :(得分:2)
使用布局XML或自定义小部件来执行此操作。
自定义模块布局XML文件:
<cms_page_view>
<block name="some.block" type="module/block_name" parent="content" template="catalog/product/list.phtml">
<action method="setCategories">
<ids>2,3,4</ids>
</action>
</block>
</cms_page_view>
答案 1 :(得分:1)
我将我的answer.change事件发送到'controller_action_layout_generate_xml_before'并在观察者注入代码中输入
$layout = $observer->getLayout();
$layout->getUpdate()->addUpdate('<reference name="content">
<block name="mymodule" type="mymodule/blockname" template="catalog/product/list.phtml">
<action method="setCategories">
<ids>2,3,4</ids>
</action>
</block>
</reference>');
$layout->generateXml();.
对于参考,请检查site。