Wenn Sie in OpenCart auf die Entwicklung von Modulen gestoßen sind, sind Sie möglicherweise mit der Situation konfrontiert, in der Sie einige gemeinsame Elemente in jedem Controller angegeben haben. Denken Sie nicht, dass es schön wäre, wenn Sie den allgemeinen Code irgendwo deklarieren könnten und er bei Bedarf abgeholt wird! In diesem Artikel werden wir also besprechen, wie man allgemeinen Controller-Code einrichtet und diesen über die Module hinweg verwendet.
Für diejenigen, die mit der Modulentwicklung in OpenCart vertraut sind, müssen Sie die allgemeinen Elemente wie Kopf-, Fußzeilen- und Sidebar-Spalten in der Indexmethode der Controller-Klasse einrichten. Obwohl es verschiedene Möglichkeiten gibt, den allgemeinen Code zu zentralisieren, betrachten wir eine OpenCart Weg um das zu erreichen!
Ich gehe davon aus, dass Sie die neueste Version von OpenCart verwenden und mit dem Modulentwicklungsprozess vertraut sind, da wir uns mehr auf das Konzept konzentrieren als auf den grundlegenden Code.
Mach weiter und erstelle das Katalog / Controller / Funktionsweise
Verzeichnis. Erstellen Sie eine Datei common.php
unter diesem Verzeichnis mit folgendem Inhalt.
load-> controller ('common / header'); $ data ['footer'] = $ this-> load-> controller ('common / footer'); $ data ['preaction_text'] = "Ich wurde von der 'Setup'-Methode aus der' allgemeinen 'Controller-Datei festgelegt."; $ args ['controller'] -> $ args ['method'] ($ data, FALSE);
Ziemlich einfach und unkompliziert zu verstehen! Es initialisiert nur einige Variablen in der $ data
Array, außer der letzten Zeile der Konfiguration
Methode. Wir werden später darauf zurückkommen, da es das Geheimnis der offenbart $ args
Array.
Bevor wir weiteren Code erstellen, erkläre ich Ihnen kurz, wie das Dispatching in OpenCart funktioniert.
Wenn der Benutzer auf eine URL in OpenCart zugreift, wird die entsprechende URL angezeigt Aktion Objekt wird basierend auf der Instanz instanziiert Route Abfragezeichenfolgevariable. Hier ist der Ausschnitt aus index.php
.
// Router if (isset ($ request-> get ['route'])) $ action = new Aktion ($ request-> get ['route']); else $ action = new Action ('common / home');
Und danach das Versand
Methode wird aufgerufen.
$ controller-> dispatch ($ action, neue Aktion ('error / not_found'));
Es wird das anrufen Versand
Methode in der Datei definiert unter system / engine / front.php
. In dieser Methode finden Sie ein Snippet, das die while-Schleife ausführt, bis sie die $ action
Wert auf false gesetzt.
while ($ action) $ action = $ this-> ausführen ($ action);
Wie Sie sehen, wird die in derselben Datei definierte Ausführungsmethode aufgerufen, bis $ action
wird als falsch ausgewertet. Das heißt, wenn die Methode des Controllers ein Aktionsobjekt zurückgibt, führt OpenCart diese Aktion aus, bevor Sie fortfahren. Wir könnten dies nutzen und die andere Aktion innerhalb der Aktion selbst aufrufen. Mal sehen, wie wir das schaffen!
Nun erstellen wir eine preaction_demo.php
Datei unter der preactiondemo
Verzeichnis mit folgendem Inhalt.
$ this, 'method' => 'index')); if (file_exists (DIR_TEMPLATE. $ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl')) $ this-> antwort-> setOutput ($ this-> load-> view ($ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl', $ data)); else $ this-> response-> setOutput ($ this-> load-> view ('default / template / preactiondemo / preaction_demo.tpl', $ data));
Ob $ flag
ist wahr, wir werden die Instanz der Aktionsklasse zurückgeben. Wenn der Abfertigungsprozess ein Aktionsobjekt erhält, wird die Aktion mit dieser Aktion fortgesetzt. In diesem Fall ruft es also die Konfiguration
Methode der verbreitet
Regler. Erinnern Sie sich an die common.php
Datei, die wir im vorherigen Abschnitt erstellt haben.
Das Wichtige ist, dass wir vorbeikommen array ('controller' => $ this, 'method' => 'index')
als Argument, das schließlich an das erste Argument von übergeben wird Konfiguration
Methode in der verbreitet
Regler. Es wird uns helfen, wieder auf die Index
Methode der preaction_demo
Controller nach der Initialisierung von Variablen.
Weiter in der Konfiguration
Als Methode haben wir einige gängige Variablen wie Header, Footer usw. definiert. Und schließlich übertragen wir die Steuerung von dort aus auf den ursprünglichen Controller Konfiguration
Die Methode wurde mit der folgenden Anweisung aufgerufen.
$ args ['controller'] -> $ args ['method'] ($ data, FALSE);
Natürlich müssen wir die in der Datei initialisierten Variablen übergeben Konfiguration
Methode über $ data
an den ursprünglichen Controller, damit er dort verwendet werden kann, was der Hauptzweck dieses Artikels ist. Es wird als erstes Argument des obigen Methodenaufrufs übergeben. Das zweite Argument ist sehr wichtig, da es mit dem initialisiert wird $ flag
Variable. Wir tun dies absichtlich, um unendliche Schleifen zu vermeiden.
Lassen Sie uns zum Schluss unsere View-Datei unter einrichten catalog / view / theme / default / template / preactiondemo / preaction_demo.tpl
mit dem folgenden Code.
Nachdem wir das Setup abgeschlossen haben, öffnen Sie die URL http: //youropencartstoreurl/index.php? Route = preactiondemo / preaction_demo in Ihrem Browser. Sie sollten die Nachricht sehen "Ich wurde von der 'setup' -Methode aus der 'allgemeinen' Controller-Datei festgelegt." auf dieser Seite!
Auf diese Weise könnten Sie den allgemeinen Code an einer Stelle einrichten und diese Aktion von den anderen Controllern aufrufen. Sicherlich wird Code-Duplizierung vermieden und es ist einfacher, den Code zu ändern, der in allen Modulen üblich ist.
Heute haben Sie in OpenCart einen coolen Trick gelernt: Wie rufen Sie eine Aktion aus der Aktion heraus auf! Natürlich gibt es andere Wege, um das zu erreichen, aber ich habe in letzter Zeit daran gedacht, dass ich es mit Ihnen teilen und Ihr Feedback erhalten sollte!