Magento: Deaktivieren-Modul für einen bestimmten Shop
Angenommen, ich habe 3 Shops.
Möchte ich deaktivieren Sie ein Modul in der Filiale 2. Ich möchte nur das es aktiviert werden im Speicher 1 und Speicher 3.
Sehe ich, dass ich es tun kann, indem Sie:-
-
Werde System -> Konfiguration -> Advanced
-
Auswahl der gewünschten store aus Aktuelle Konfigurationsbereich " dropdown-Liste.
Aber das funktioniert nicht vollständig.
Und ich will auch nicht zu überprüfen, speichern im Modul-code selbst, oder erstellen Sie system configuration-Feld für das Modul zu aktivieren/deaktivieren, speichern, aktivieren/deaktivieren.
Was ich erwarte ist, indem Sie einige code in app/etc/modules/MyNamespace_MyModule.xml. Können wir es so machen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Konfiguration einfach deaktiviert Modul die Ausgabe im layout für das frontend, sondern Modul-Controller, event-Beobachter, admin-Seiten, etc. noch funktioniert.
Auch vergessen Sie nicht, geben Sie Ihr Modul-name im layout-Dateien definition, da sonst alle die layout-Datei-Inhalte geladen werden, die für ein bestimmtes Geschäft:
Wenn Sie die Entwicklung eines Moduls und möchten, deaktivieren Sie die Funktionalität des Frontend für ein bestimmtes Geschäft, dann sollten Sie eine Konfiguration erstellen, die den Bereich der "ja/Nein" - Typ und überprüfen Sie seinen Wert über Mage::getStoreConfigFlag('config/Feld/Pfad') in deinen Modul-code.
Deaktivieren Sie ein Modul auf der Shop-Bereich, die ich gefunden habe, ist es möglich, es zu tun mögen dieses:
Bewegen app/code/core/Mage/Core/Model/Config.php zu app/code/local/Mage/Core/Model/Config.php
Innen Config.php finden Sie die Methode "loadModulesConfiguration" etwas nicht ändern, aber fügen Sie den folgenden code, um die Methode wie folgt Aussehen.
Den neuen code Ursache der Methode, überprüfen Sie auch für einen neuen Knoten in der Modul-xml-Datei: <beschränkt>. Wenn der Knoten vorhanden ist, wäre der Wert eine Komma-separierte Liste der Shop-codes, die Sie NICHT möchten, dass das Modul zum laden auf. Wenn Sie mehrere Shops, die $_SERVER variable "MAGE_RUN_CODE" eingestellt werden sollte mit dem aktuellen store-code. Wenn es nicht gesetzt ist, wird das Skript fallback für die übernahme der Shop-code ist "default", das ist das, was es standardmäßig ist, es sei denn, aus unerfindlichen Gründen, die Sie entscheiden, zu ändern, die im backend.
Ein Modul-xml-Datei könnte dann wie folgt Aussehen:
Mit dabei, das Modul wird nicht geladen, während auf die Geschäfte mit einem store-code der mystore1, mystore4, oder mystore5. Die <beschränkt> - tag ist völlig optional, wenn Sie es weglassen, wird das Modul laden wie es das normal tun würde.
War ich mit Eric-Lösung für eine Weile. In meinem Fall habe ich deaktiviert bestimmte module verantwortlich für die Layered Navigation in einem meiner Geschäfte - somit wieder auf default Layered Navigation Verhalten.
Und es sah aus, wie seine Arbeit, aber nach einer Weile habe ich bemerkt, dass die layered navigation Optionen angehalten zu erscheinen, wo Sie sollen. Bald habe ich bemerkt, dass in der Tat das Modul, sollte nicht auf dieses Geschäft weiter zu arbeiten. Dann merkte ich, dass ich beim deaktivieren der Konfiguration cache-Eric ' s Lösung funktioniert, aber nach dem wieder einschalten, Stoppt es.
Nach einer Weile wurde mir klar, es musste funktionieren, dass die Art und Weise, mit Konfigurations-cache aktiviert ist, weil Eric, der die Lösung enthält (oder nicht) angegeben config-Dateien in der globalen xml nur während dieser xml generiert wird. Dann seine zwischengespeichert und rief aus dem cache nur. Also, wenn es erzeugt wurde, von der Seite, die sollte, nutzen einige module enthalten war, und dann auch vor Ort, das war nicht angenommen, um es zu benutzen.
Trotzdem habe ich eine andere Lösung, basierend auf Eric ' s code (mit eingeschränkt in der Module config). Ich dachte, Magento sollte entscheiden, was zu laden ist, wenn die Klasse angefordert wird. Dann könnte es überprüfen, was die aktuellen MAGE_RUN_CODE und verwenden Sie es dynamisch.
Es ist eine Methode, in Mage_Core_Model_Config was ist verantwortlich für die erste-Klasse-name: getGroupedClassName.
Hier ist der code, den ich dort verwendet:
Diese Pneumatig Bedingung ist, da alle meine Module starten von name des Unternehmens, so wollte ich vermeiden, nicht erforderlich, die Verarbeitung, aber optional, code sollte ohne arbeiten, oder Sie können es ändern, um etwas anderes.
Dann bekomme ich die eigentliche Modul-name [Firma]_[Modul], und dann überprüfen, ob die aktiviert _xml (die aktuelle ist-Konfiguration-Objekt). Wenn es beschränkt ist, habe ich klar $className, damit es Kraft Magento zu laden, die standardmäßig in der nächsten Zeile.
Und dieser code Hinzugefügt wird, kurz vor leer ist-Zustand:
Und für Ihre Bequemlichkeit, die ich einfügen ganze getGroupedClassName code:
Meine clients installieren von Magento 1.8.1.0 hat eine problematische Modul, das bricht, anderen Website-Menü auf einem multi-store-setup. Die Lösung die oben gepostet von Eric Hainer hat nicht funktioniert für diese Installation, so dass ich veränderte etwas:
Anstatt
$_SERVER['MAGE_RUN_CODE']
ich verwendet$_SERVER['SERVER_NAME']
. Arbeitete wie ein Charme. 🙂Also statt:
verwenden:
und statt:
verwenden:
offensichtlich ändern "www.site1.com", "www.site2.com" und "www.site3.com" mit Ihren eigenen Standorten.
Danke für die Idee Eric 🙂
Auch interessante Lösung ,
http://inchoo.net/ecommerce/magento/how-to-activatedeactivate-magento-module-per-a-website-level/