如何在系统配置下添加自定义模块的文件? [复制
题
这个问题在这里已经有一个答案:
- 如何使用布局更新定位特定的管理员配置部分 2个答案
我在系统 - >配置中有自己的模块,并希望为其添加JS和CSS文件。现在是这样:
<layout version="0.1.0">
<default>
<reference name="head">
<action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
<action method="addCss"><name>mymodule.css</name></action>
</reference>
</default>
</layout>
这样,将文件添加到所有管理页面中。只需将此文件添加到一个页面,所以不要写入默认值,而是默认情况下,而是这样?
解决方案
您可以使用布局句柄 adminhtml_system_config_edit
代替 default
, ,并且您的文件仅在系统>配置下。 XML看起来像这样:
<layout version="0.1.0">
<adminhtml_system_config_edit>
<reference name="head">
<action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
<action method="addCss"><name>mymodule.css</name></action>
</reference>
</adminhtml_system_config_edit>
</layout>
如果您只需要在CERTAIL部分下的这些新文件,则应添加自己的布局句柄,因为Magento不提供此功能。老实说,我认为这确实不是值得的,而是要回答您的问题:
添加活动观察者
为了实现这一目标,请听这次活动 controller_action_layout_load_before
. 。在你的 config.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<!-- ... -->
<adminhtml>
<events>
<controller_action_layout_load_before>
<observers>
<my_module_observer>
<class>my_module/observer</class>
<method>addCustomLayoutHandle</method>
</my_module_observer>
</observers>
</controller_action_layout_load_before>
</events>
</adminhtml>
<!-- ... -->
</config>
活动被投入 Mage_Core_Controller_Varien_Action
在方法中 loadLayoutUpdates()
.
添加您的自定义布局句柄
现在,您已经定义了事件观察者,可以检查您当前在该页面是否对应于模块的系统配置。在您的活动中,观察者:
public function addCustomLayoutHandle(Varien_Event_Observer $observer)
{
$controllerAction = $observer->getEvent()->getAction();
$layout = $observer->getEvent()->getLayout();
if ($controllerAction && $layout && $controllerAction instanceof Mage_Adminhtml_System_ConfigController) { // Can be checked in other ways of course
if ($controllerAction->getRequest()->getParam('section') == 'my_module_section') {
$layout->getUpdate()->addHandle('my_custom_handle');
}
}
return $this;
}
现在应该加载自定义布局手柄。您可以将此新句柄用于布局定义。请不要说我没有时间进行测试,希望它运行良好。只是想指出您可能解决问题的解决方案。
其他提示
更改布局句柄名称。代替 default
为您的页面使用默认处理程序。例如,如果您的页面URL看起来像是这样的“模块/adminhtml_entity/index”(或 module/adminhtml_entity/
您的布局看起来像这样:
<layout>
<module_adminhtml_entity_index>
<reference name="head">
<action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
<action method="addCss"><name>mymodule.css</name></action>
</reference>
</module_adminhtml_entity_index>
</layout>
如果您的URL看起来像 admin/module_entity/index
您的布局应该看起来像这样:(用AdminHTML替换Admin)
<layout>
<adminhtml_module_entity_index>
<reference name="head">
<action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
<action method="addCss"><name>mymodule.css</name></action>
</reference>
</adminhtml_module_entity_index>
</layout>