Macht es einen Unterschied, ob ich meine <observers> innerhalb von <global>, <frontend>, <default>, <admin>, <adminthtml> deklariere?

7

An der Oberfläche scheinen alle zu funktionieren. Gibt es weniger offensichtliche Implikationen / Konsequenzen der Wahl einer über die andere?

fris
quelle

Antworten:

5

Magento hat standardmäßig drei "Bereiche" : frontend, adminhtmlund install, mit denen verschiedene Dinge wie Übersetzungen und Designs getrennt werden.

Der Bereich wird einmal geladen und festgelegt, wenn Magento initialisiert wird. Weitere Mage_Core_Model_App_Area::load()Informationen finden Sie unter. Sie werden einen zusätzlichen Bereich bemerken admin, aber es scheint, dass dieser nicht mehr verwendet wird (irgendwo mehr?). Einige Module fügen möglicherweise neue Bereiche hinzu, z. B. testvon EcomDev_PHPUnit.

Beobachter werden auch pro Bereich definiert, aber zusätzlich können Sie dann in definieren <global>, dass sie in allen Bereichen gelten.

Es werden nur Beobachter ausgeführt, die im aktuellen Bereich und in definiert sind global. Globale Beobachter stehen immer an erster Stelle.

Das Definieren eines Beobachters in <default>oder <admin>sollte eigentlich überhaupt nicht funktionieren.

Fabian Schmengler
quelle
Danke für deine Antwort. Sie haben den Bereich "Installieren" geschrieben. Meinten Sie "globalen" Bereich (Mage_Core_Model_App_Area :: AREA_GLOBAL)?
Freitag,
1
Nein, ich meinte install- es wird während des Magento-Installationsassistenten verwendet. Schauen Sie sich das an Mage_Install_Controller_Action(eigentlich scheint dieses nur für das Thema verwendet zu werden, daher können Sie keine Beobachter speziell für erstellen install)
Fabian Schmengler
11

Wenn Sie zwischenzeitlich <frontend></frontend>Beobachter aufrufen, wird dieses Beobachterereignis nur im Frontend ausgeführt. Wenn Sie dazwischen schreiben <adminhtml></adminhtml>, wird es nur im Backend ausgeführt. Wenn Sie dazwischen schreiben, <global></global>funktioniert das Beobachterereignis sowohl im Frontend als auch im Backend.

Nehmen Sie zum Beispiel ein Ereignis mit dem Namen "core_block_abstract_prepare_layout_after".

Fall 1:-

<adminhtml>
    <events>
      <core_block_abstract_prepare_layout_after>
      </core_block_abstract_prepare_layout_after>
    </events>
</adminhtml>

Das Beobachterereignis "<core_block_abstract_prepare_layout_after>" funktioniert nur im Backend

Fall 2: -

<frontend>
    <events>
      <core_block_abstract_prepare_layout_after>
      </core_block_abstract_prepare_layout_after>
    </events>
</frontend>

Das Beobachterereignis "<core_block_abstract_prepare_layout_after>" funktioniert nur im Frontend

Fall 3: -

<global>
    <events>
      <core_block_abstract_prepare_layout_after>
      </core_block_abstract_prepare_layout_after>
    </events>
</global>

Das Observer-Ereignis "<core_block_abstract_prepare_layout_after>" funktioniert nur im Frontend und Backend

Pradeep Sanku
quelle