Wie kann ich eine Aktion meines Controllers in einem benutzerdefinierten Modul aufrufen, nachdem unter System -> Konfiguration -> Katalog auf "Konfiguration speichern" geklickt wurde? ( Bild )
Die Einstellungen meines Moduls befinden sich in diesem Abschnitt, und ich muss meine Aktion direkt nach dem Speichern der Konfiguration auslösen. Ich muss die Aktion nur in diesem Abschnitt des Administrationsbereichs aufrufen. Wenn in einem anderen Bereich des Administrators auf "Konfiguration speichern" geklickt wurde, muss die Aktion nicht aufgerufen werden.
BEARBEITEN:
Die Aktion muss überprüfen, ob die gespeicherten Einstellungen des Moduls korrekt sind, und bei jedem Speichern der Konfiguration einige andere Berechnungen durchführen.
EDIT 2:
Ich habe eine Lösung von Fabian Blechschmidt ausprobiert. Der Beobachter arbeitet, nachdem auf "Konfiguration speichern" geklickt wurde (ich sehe Text in der Protokolldatei):
config.xml:
<config>
...
<global>
<events>
<admin_system_config_changed_section_mysection>
<observers>
<mymodule>
<type>singleton</type>
<class>mymodule/observer</class>
<method>handle_adminSystemConfigChangedSection</method>
</mymodule>
</observers>
</admin_system_config_changed_section_mysection>
</events>
</global>
...
</config>
Model / Observer.php:
class My_Module_Model_Observer
{
public function handle_adminSystemConfigChangedSection()
{
Mage::log('Test: oberver is working!');
//I tried this but it doesn't actually trigger the action:
$url = Mage::getUrl('myrouter/adminhtml_test/validate');
Mage::app()->getResponse()->setRedirect($url);
}
}
Aber jetzt stecke ich fest.
Ich weiß nicht, wie ich eine Aktionsmethode in diesem Beobachter auslösen soll. Der Controller sieht so aus und funktioniert einwandfrei:
config.xml:
<admin>
<routers>
<mymodule>
<use>admin</use>
<args>
<module>My_Module</module>
<frontName>myrouter</frontName>
</args>
</mymodule>
</routers>
</admin>
controller / Adminhtml / TestController.php:
class My_Module_Adminhtml_TestController extends Mage_Adminhtml_Controller_Action
{
public function validateAction()
{
//validate config settings here
}
}
EDIT 3:
Die Event-Observer-Lösung funktioniert einwandfrei, daher habe ich eine separate Frage zur Umleitung zu Aktionen erstellt: Umleitung zu Modul / Controller / Aktion
<events>
Abschnitt<global>
in config.xml oder irgendwo anders befinden? 2) Ich weiß nicht, wie ich meine Handlung innerhalb des Beobachters nennen soll. Können Sie mich in die richtige Richtung weisen? @ FabianSie können ein Backend-Modell auf eine Ihrer Konfigurationseinstellungen festlegen. In diesem Modell können Sie Methoden wie
_beforeSave
und hinzufügen_afterSave
und Sie haben auch Zugriff auf die POST-Variablen. Auf diese Weise spielt es keine Rolle, wo Sie Ihre Einstellungen hinzufügen, die Modellmethoden werden ausgelöst.Um ein Beispiel zu sehen, überprüfen Sie, wie Magento es macht
app/code/code/Mage/Core/etc/syste.xml
, Pfadtrans_email/ident_custom1/email
.Es hat das Backend-Modell
<backend_model>adminhtml/system_config_backend_email_address</backend_model>
und überprüft in
Mage_Adminhtml_Model_System_Config_Backend_Email_Address
der_beforeSave
Methode die eingegebene E-Mail-Adresse.quelle
Es funktioniert für mich, wenn ich den vollständigen Klassennamen anstelle der Namespace- / Beobachter-Syntax in config.xml verwende. Versuche dies.
config.xml
Model / Observer.php
quelle
Ich habe das Ereignis controller_action_postdispatch_adminhtml_catalog_product_save verwendet, nachdem ich eine temporäre Protokollierung im Mage.php-Ereignisversand verwendet hatte. Es war das einzige Ereignis, das wirklich in admin ausgelöst wurde, jedoch nicht bei allen Produktspeichern (z. B. wird es nicht ausgelöst, wenn das Speichern von API-Produkten verwendet wird).
Ich konnte var_dump in meiner Beobachterfunktion verwenden, um die gewünschten Daten auszugraben.
In Ihrem Beobachter können Sie solche Dinge tun ... Es gibt Möglichkeiten, in die Objekte zu graben und fast alle Daten zu finden, nach denen Sie suchen, sobald Sie gelernt haben, wie man aussieht.
quelle