Comment ajouter des fichiers pour le module personnalisé sous la configuration du système? [dupliquer]

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

  •  16-10-2019
  •  | 
  •  

Question

    

Cette question a déjà une réponse ici:

         

J'ai mon propre module dans Système-> Configuration et que vous souhaitez ajouter js et fichiers css pour elle. Maintenant, il en est ainsi:

<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>

Ce fichier de façon ajouté à toutes les pages d'administration. Que faire pour ajouter ces fichiers à une seule page, donc pas en écriture par défaut, mais mymodule_admin ou lissée comme ça?

Était-ce utile?

La solution

You could uset the layout handle adminhtml_system_config_edit instead of default, and your files only under System > Configuration. The XML would look like this:

<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>

If you only need these new files under a certail section, you should add your own layout handle, since Magento doesn't offer this out of the box. To be honest, I think this is not really worth the effort, but to answer your question:

Add an event observer

To achieve this, listen to the event controller_action_layout_load_before. In your 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>

The event is thrown in Mage_Core_Controller_Varien_Action in the method loadLayoutUpdates().

Add your custom layout handle

Now that you have defined your event observer, you can check if the page you are currently on corresponds to the system configuration of your module. In your event observer:

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;
}

The custom layout handle should be loaded now. You can use this new handle for your layout definition. Please not that I didn't have time to test this, hope it's working well. Just wanted to point you to a possible solution to your problem.

Autres conseils

Change the layout handle name. Instead of default use the default handler for your page. For example if your page url looks like this 'module/adminhtml_entity/index' (or module/adminhtml_entity/ your layout can look like this:

<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>

If your url looks like admin/module_entity/index your layout should look like this: (replace admin with 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top