Wie füge ich Dateien für benutzerdefiniertes Modul unter Systemkonfiguration hinzu? [Duplikat
Frage
Diese Frage hat hier bereits eine Antwort:
Ich habe mein eigenes Modul in System-> Konfiguration und möchte JS- und CSS-Dateien dafür hinzufügen. Jetzt ist es so:
<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>
Auf diese Weise fügten Dateien zu allen Administratorseiten hinzu. Was tun, um diese Dateien nur zu einer Seite hinzuzufügen, also schreiben Sie nicht Standard, sondern myModule_admin oder smth so?
Lösung
Sie könnten den Layout -Griff einsetzen adminhtml_system_config_edit
Anstatt von default
, und Ihre Dateien nur unter System> Konfiguration. Der XML würde so aussehen:
<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>
Wenn Sie diese neuen Dateien nur in einem Abschnitt "Certail" benötigen, sollten Sie Ihr eigenes Layout -Handle hinzufügen, da Magento dies nicht außerhalb der Box bietet. Um ehrlich zu sein, denke ich, dass dies die Mühe nicht wirklich wert ist, sondern Ihre Frage zu beantworten:
Fügen Sie einen Ereignisbeobachter hinzu
Um dies zu erreichen, hören Sie sich die Veranstaltung an controller_action_layout_load_before
. In deiner 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>
Die Veranstaltung wird hereingeworfen Mage_Core_Controller_Varien_Action
in der Methode loadLayoutUpdates()
.
Fügen Sie Ihr benutzerdefiniertes Layout -Griff hinzu
Nachdem Sie Ihren Ereignisbeobachter definiert haben, können Sie überprüfen, ob die Seite, auf der Sie sich derzeit befinden, der Systemkonfiguration Ihres Moduls entspricht. In Ihrem Veranstaltungsbeobachter:
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;
}
Das benutzerdefinierte Layout -Griff sollte jetzt geladen werden. Sie können diesen neuen Griff für Ihre Layout -Definition verwenden. Bitte nicht, dass ich keine Zeit hatte, dies zu testen, hoffe, es funktioniert gut. Ich wollte Sie nur auf eine mögliche Lösung für Ihr Problem verweisen.
Andere Tipps
Ändern Sie den Namen des Layout -Handels. Anstatt von default
Verwenden Sie den Standard -Handler für Ihre Seite. Zum Beispiel, wenn Ihre Seiten -URL so aussieht wie dieses "Modul/adminhtml_entity/index" (oder module/adminhtml_entity/
Ihr Layout kann so aussehen:
<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>
Wenn Ihre URL aussieht wie admin/module_entity/index
Ihr Layout sollte wie folgt aussehen: (Ersetzen Sie den Administrator durch 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>