这个问题在这里已经有一个答案:

我在系统 - >配置中有自己的模块,并希望为其添加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>
许可以下: CC-BY-SA归因
scroll top