Cómo añadir archivos de módulo personalizado en virtud de la configuración del sistema? [duplicar]
Pregunta
Esta pregunta ya tiene una respuesta aquí:
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í?
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>