我是Magento的新手。我试图建立一个模块,在渲染之前动态地将代码xml插入到布局xml中 - 类似于CMS>页面的构建方式。
就像我们如何在页面的设计部分指定layout xml(admin> cms> page)一样,我想通过我的模块插入layout.xml。
基本上,我想
任何帮助都将不胜感激。
答案 0 :(得分:5)
只是一点启发 您可以使用observer添加这些布局xml, 假设你想在生成xml之前添加那些布局xml
我们可以使用活动controller_action_layout_generate_xml_before
以下是示例代码(config.xml
)
<frontend>
<events>
<controller_action_layout_generate_xml_before>
<observers>
<add_new_layout>
<class>test/observer</class>
<method>addNewLayout</method>
</add_new_layout>
</observers>
</controller_action_layout_generate_xml_before>
</events>
</frontend>
这是Observer.php
public function addNewLayout($observer){
$layout = $observer->getEvent()->getLayout();
$update = $layout->getUpdate();
//$action = $observer->getEvent()->getAction();
//$fullActionName = $action->getFullActionName();
//in case you're going to add some conditional (apply these new layout xml on these action or other things, you can modify it by yourself)
//here is the pieces of layout xml you're going to load (you get it from database)
$xml = "<reference name='root'><remove name='footer'></remove></reference>";
$update->addUpdate($xml);
return;
}
答案 1 :(得分:0)
另一个可能性是使用IEclipseContext
- 事件和占位符(不存在)布局xml:
core_layout_update_updates_get_after
观察者中的PHP示例:
<frontend>
<layout>
<updates>
<foobar>
<file>foo/bar.xml</file>
</foobar>
</updates>
</layout>
<events>
<core_layout_update_updates_get_after>
<observers>
<foobar>
<type>singleton</type>
<class>foobar/observer</class>
<method>coreLayoutUpdateUpdatesGetAfter</method>
</foobar>
</observers>
</core_layout_update_updates_get_after>
</events>
</frontend>