Ich habe einen neuen Job, bei dem ich jetzt jeden Tag ausschließlich an Magento arbeite. Ich habe noch keine Erfahrung mit Magento, daher war es bisher eine Herausforderung, um es gelinde auszudrücken!
Lassen Sie mich kurz die Erweiterung erklären, die wir bauen.
Dadurch können wir ein Popup / Modal-Fenster anzeigen. Die modale HTML - Inhalt wird in speichernden
einemStatic Block
ADMINISTRATOR SEITE
Das Admin-Panel besteht also aus einem neuen Tab unter System/Confuration/
NEW TAB
Im Admin-Bereich können Sie in einer Dropdown-Liste auf dieser NEUEN TAB-SEITE die Standardeinstellung auswählenStatic Block
für diese Abschnitte ...
HOME PAGE
oder HOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGES
oder ALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGES
oder ALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGES
oder ALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGE
oder SHOPPING CART PAGE w/Items in Shopping Cart
STANDARD ÜBERFAHRT
Als nächstes erlauben die tatsächlichen CMS- , KATEGORIE- und PRODUKT- Seiten alle die gleichen Einstellungen wie auf der Admin-Panel-Seite, außer dass Sie STATIC BLOCK
eine pro Element festlegen und die Standardeinstellung, die wir in den obigen Admin-Einstellungen hatten, überschreiben können .
Bisher haben wir die Admin-Seite der Erweiterung erledigt. Wir haben alle Admin-Registerkarten für jeden Abschnitt ... Produkt-, Kategorie-, CMS- und Konfigurationsseite.
Der nächste Schritt besteht darin, dieselbe Erweiterung hinzuzufügen und eine Static Block
Einfügung in die Seite vorzunehmen . Dies Static Block
ist verantwortlich für ... Anzeigen der korrekten Static Block
auf jeder Seite basierend auf den Einstellungen, die in den oben genannten Bereichen festgelegt wurden .....
- Bestimmen der Seite, auf der wir uns befinden, und des Seitentyps (cm, Produkt, Startseite , Kategorie)
- Es muss dann alle benutzerdefinierten Einstellungen lesen, die in den oben genannten Bereichen festgelegt wurden.
- Wenn festgestellt wird, dass wir uns auf einer
Category
Seite befinden, müssen wir die tatsächliche spezifische Kategorie ermitteln, in der wir uns befinden. Zum BeispielCategory 3
. Wir werden dann sehen, ob es eine bestimmte Einstellung für diese bestimmte Kategorie gibt. Wenn es heißt, werdenEnabled
wir dann suchen, wasStatic Block
für diese Kategorie gespeichert ist und es in unserem HauptteilStatic Block
auf der Seite anzeigen! - Wenn die oben genannte spezifische Kategorie wie
Disabled
für unsere festgelegtModal Window
ist, werden wir in den globaleren Einstellungen für das Modal weiter oben nachsehen, ob ein Modal für alle Kategorien aktiviert ist. Wenn ja, dann werden wir sehen, welcheStatic Block
Einstellung für alle Kategorien festgelegt ist. - Darüber hinaus wird dieser Vorgang für jeden der Hauptseitentypen (Produkt, Kategorien, CMS, Startseite, Warenkorb) ausgeführt.
- Wir müssen auch prüfen, ob der Warenkorb leer ist oder nicht. WENN nicht leer ... dann müssen wir dies oben berücksichtigen, wenn wir prüfen, welche
Static Block
für diese Seite angezeigt werden sollen , da jede Einstellung die Einstellung von aStatic Block
für leeren Wagen und 1 für nicht leeren Wagen ermöglicht! (Ich weiß, dass dies ein gewaltiges, hartes und großes Unterfangen ist, aber wir haben die Administrationsseite meistens erledigt. Wir müssen nur den Teil erledigen, der all diese Faktoren berücksichtigt, um zu bestimmen, welcheStatic Block
auf welcher bestimmten Seite angezeigt werden sollen.
Um mich in die richtige Richtung zu bringen, habe ich ein paar kleinere Fragen ...
- Wie kann ich in meinem
Static Block
Code (dem PHP-Teil) bestimmen, auf welchem SEITENTYP ich mich befinde? Wie ich bereits erwähnt habe, muss ich wissen, ob ich auf ... HOME PAGE , einer CMS PAGE , einer CATEGORY PAGE , einer PRODUCT PAGE oder der SHOPPING CART PAGE bin . - Zusätzlich zum SEITENTYP muss ich die aktuelle Seite erhalten. Wenn ich also die Produkt-ID 1234 habe, muss ich in der Lage sein, die Einstellung (statischer Block für diese Seite festgelegt) für diese bestimmte Seite abzurufen.
Ich weiß, dass dies ein langer und möglicherweise verwirrender Beitrag war. Wenn Sie es bis hierher geschafft haben, danke, dass Sie sich die Zeit genommen haben, dies zu lesen =)
Wenn Sie mir bei meiner Frage helfen können, bringt mich jedes kleine Stück näher an das Endziel
Unten sehen Sie ein Flussdiagramm, das ich erstellt habe, wie mein Modul funktionieren muss, um zu bestimmen, welcher statische Block in die Seite eingefügt werden soll
quelle
Mage_Widget
Modul vorhandenen Funktionen effektiv neu erstellt haben , oder?Mage_Widget
? Ich muss mich auch darum kümmernAntworten:
Zusätzlich zu den Antworten von @benmarks :
Hier ist ein kleiner Code, um einige der von Ihnen genannten Bedingungen zu überprüfen:
Um zu überprüfen, ob der Wagen leer ist oder nicht
Sie haben auch gefragt, ob Sie die aktuelle Seite in einem CMS-Block überprüfen können .
Dies ist wahrscheinlich kein guter Ansatz (Sie müssten benutzerdefinierte Blöcke einfügen, wodurch der Zweck der Verwendung von CMS-Blöcken auf der ersten Seite zunichte gemacht würde).
Stattdessen ist es besser, zuerst die aktuelle Seite zu überprüfen und dann den CMS-Block auszuwählen, der darauf basierend angezeigt werden soll.
BEARBEITEN : behoben
Mage::app()->getRequest()->getFullActionName()
,Mage::app()->getFrontController()->getAction()->getFullActionName()
wie von @Joseph in den Kommentaren erwähnt. Vielen Dank!quelle
Mage::app()->getRequest()->getFullActionName()
in einer Warenkorbvorlage führt zu einem schwerwiegenden Fehler, oder zumindest bei mir am 1.7.0.2.$this->getAction()->getFullActionName()
hat perfekt funktioniert!Viele Ansätze, die Sie verfolgen könnten. Ich würde empfehlen, Ihren Block über das
<default>
Layout-Update-Handle hinzuzufügen , damit er auf allen Seiten verfügbar ist. In der_prepareLayout()
Methode Ihres Blocks können Sie den Bereich bestimmen, indem Sie den aktuellen vollständigen Aktionsnamen vom Anforderungsobjekt ($this->getRequest()->getFullActionName()
) abrufen und diesen verwenden, um den Kontext zu bestimmen.Produkte und Kategorien werden in der Registrierung registriert. Ihr Block könnte sich auch die Handles für die Layoutaktualisierung ansehen, die Handles für Produkt-IDs oder Kategorie-IDs enthalten.
quelle
Um die Homepage zu erkennen, müssen Sie die Bezeichnerzeichenfolge (z. B. "home") verwenden, um sie mit dem Konfigurationswert und nicht mit der numerischen ID abzugleichen:
Hier sind einige andere:
Vielen Dank für die hilfreichen Infos an alle!
quelle