Cómo añadir archivos de módulo personalizado en virtud de la configuración del sistema? [duplicar]

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

  •  16-10-2019
  •  | 
  •  

Pregunta

Tengo mi propio módulo en Sistema-> Configuración y quiero añadir js y css para ello. Ahora bien, es así que:

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

De esta manera los archivos añadió a todas las páginas de administración. Lo que hay que hacer para agregar estos archivos sólo para una página, por lo que escribir no por defecto, pero mymodule_admin o Smth así?

¿Fue útil?

Solución

Se podría uset el mango adminhtml_system_config_edit diseño en lugar de default, y sus archivos únicamente en Sistema> Configuración. El XML se vería así:

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

Si sólo necesita estos nuevos archivos en una sección certail, se debe añadir su propio mango diseño, ya que Magento no ofrece esta fuera de la caja. Para ser honesto, creo que esto no es realmente vale la pena el esfuerzo, pero para responder a su pregunta:

Añadir un observador evento

Para lograr esto, escucha la controller_action_layout_load_before evento. En su 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>

El evento se lanza en Mage_Core_Controller_Varien_Action en el loadLayoutUpdates() método.

Añadir el mango diseño personalizado

Ahora que ha definido su observador caso, se puede comprobar si la página que se encuentran actualmente en corresponde a la configuración del sistema de su módulo. En el caso de observador:

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

El mango de diseño personalizado se debe cargar ahora. Se puede utilizar esta nueva asa para su definición del layout. Por favor, no es que no tuve tiempo de probar esto, espero que está funcionando bien. Sólo quería apuntar a una posible solución a su problema.

Otros consejos

Cambiar el nombre de la manija diseño. En lugar de default utilizar el controlador predeterminado para su página. Por ejemplo, si su página se ve URL como esta 'módulo / adminhtml_entity / index' (o module/adminhtml_entity/ su diseño puede tener este aspecto:

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

Si su apariencia URL como admin/module_entity/index su diseño debe tener este aspecto: (sustituir admin con 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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top