Как добавить файлы для пользовательского модуля под конфигурацией системы? [дублировать

magento.stackexchange https://magento.stackexchange.com/questions/5048

  •  16-10-2019
  •  | 
  •  

Вопрос

У меня есть свой собственный модуль в System-> Configuration, и я хочу добавить для него файлы 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>

Таким образом, файлы, добавленные на все страницы администратора. Что делать, чтобы добавить эти файлы только на одну страницу, так что напишите не по умолчанию, а MyModule_Admin или SMTH?

Это было полезно?

Решение

Вы могли бы использовать ручку макета 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 на вашей странице выглядит примерно так 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)

<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 с атрибуция
Не связан с magento.stackexchange
scroll top