Informationen zu Registrierungs- und Ladeobjekten in OpenCart

Einführung

OpenCart hat sich zu einem sehr nützlichen E-Commerce-Framework für kleine und mittlere Online-Shops entwickelt. Obwohl es umfassende Funktionen in seinem Stack bietet, behält es ein einfaches Framework mit einer schönen modularen Architektur bei, die erweitert werden kann. In diesem Artikel konzentrieren wir uns auf bestimmte Elemente des Bootstrapping-Prozesses.

Obwohl der typische Bootstrapping-Prozess viele Komponenten umfasst, konzentrieren wir uns in diesem Lernprogramm auf die Objekte "Registry" und "Loader". Die in diesem Artikel erläuterten Codeausschnitte gehören zur OpenCart-Version 2.0.x. Obwohl der Klassencode "Registry" in den Versionen 1.5.x und 2.0.x derselbe ist, hat sich der Klassencode "Loader" stark geändert. Wir konzentrieren uns daher auf die 2.0.x-Version von OpenCart.

Das Registrierungsobjekt

Wie der Name vermuten lässt, wird das Objekt "Registry" zum Speichern von Elementen verwendet, von einfachen Variablen bis zu komplexen Objekten, wenn die Methode "set" aufgerufen wird. Es speichert alle Elemente mit "key", so dass auf sie später beim Aufruf der "get" -Methode leicht zugegriffen werden kann. 

Schauen wir uns die Klassendatei selbst genauer an. Öffnen Sie die Datei "system / engine / registry.php" in Ihrem bevorzugten Texteditor!

Daten [$ -Taste])? $ this-> data [$ key]: null);  public function set ($ key, $ value) $ this-> data [$ key] = $ value;  public function has ($ key) return isset ($ this-> data [$ key]); 

Wie Sie sehen, ist die Klassendefinition relativ einfach zu verstehen. Es speichert alles in der "data" -Eigenschaft des Objekts, das als Array deklariert ist, und der Bereich ist privat. Bei der "get" -Methode wird geprüft, ob "value" für den gewünschten "key" verfügbar ist, und es wird der Wert zurückgegeben, sofern verfügbar, andernfalls "null". Bei der "set" -Methode wird das neue Element mit den an die Methode übergebenen Argumenten in das "data" -Array eingefügt. Schließlich stellt es die Methode "has" bereit, um zu überprüfen, ob ein bestimmter "Schlüssel" bereits im Array "data" festgelegt ist.

Lassen Sie uns nun sehen, wie das OpenCart-Framework das Registrierungsobjekt in der Anfangsphase der Seitenausführung verwendet. Öffnen Sie die Datei "index.php" im Dokumentstammverzeichnis von OpenCart. Du wirst das sehen $ register Objekt wird sehr früh in der Skriptausführung erstellt.

// Registry $ registry = new Registry ();

Nach der Schaffung des $ register Objekt speichert es mehrere andere Objekte mit der "Set" -Methode. Sehen wir uns ein paar Beispiele an.

set ('load', $ loader); // Config $ config = new Config (); $ registry -> set ('config', $ config); // Datenbank $ db = neuer DB (DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); $ registry -> set ('db', $ db); // Request $ request = new Request (); $ registry -> set ('request', $ request); // Session $ session = neue Sitzung (); $ registry -> set ('session', $ session);

Ich habe hier einige Beispiele für die Verwendung aufgeführt $ register Objekt. Wie Sie vielleicht bemerkt haben, werden häufig verwendete Objekte erstellt und in der Registrierung gespeichert. Der Grund ist, dass Sie häufige Klassenobjekte nicht mehrmals instanziieren müssen. Sie können also einfach die "get" -Methode der $ register Objekt, um das gewünschte Objekt zu verwenden. Der Ansatz ähnelt dem "Singleton-Muster", bei dem Sie gezwungen sind, eine einzelne Instanz der Klasse zu behalten.

Jetzt die $ register Das Objekt ist mit nützlichen Informationen gefüllt, aber wie wird es verwendet? Mal sehen wie das ist $ db Objekt gespeichert in $ register wird im Modell "Aktivität" des Moduls "Konto" verwendet. Öffnen Sie die Datei unter "catalog / model / account / activity.php". Sie sehen, dass in der Methode "addActivity" eine Einfügeabfrage ausgelöst wird.

$ this-> db-> query ("INSERT INTO '". DB_PREFIX. "customer_activity' SET 'customer_id' = '". (int) $ customer_id. "', 'key' = '". $ this-> db- > escape ($ key). "',' data '='". $ this-> db-> escape (serialisieren ($ data)). "',' ip '='". $ this-> db-> escape ($ this-> request-> server ['REMOTE_ADDR']). "',' date_added '= JETZT ()");

Sie fragen sich vielleicht, wie sie aufgerufen wird, da in der Klasse "ModelAccountActivity" keine "db" -Methode oder -Eigenschaft definiert ist. Sie können zur übergeordneten Modellklasse "Model" gehen, um zu sehen, ob sie dort definiert ist oder nicht. Ja, Sie finden in dieser Klasse auch keine "db" -Methode oder -Eigenschaft. Wenn Sie sich die Klasse "Model" genauer ansehen, werden Sie feststellen, dass sie die magischen Methoden implementiert, in diesem Fall die "__get" -Methode.

öffentliche Funktion __get ($ key) return $ this-> registry-> get ($ key); 

Nehmen wir jetzt an, dass die $ register Das Objekt wird in der geschützten Eigenschaft "Registrierung" der Klasse "Model" gespeichert. Wir werden sehen, wie es gespeichert wird, wenn "Model" in der Klasse "Loader" instanziiert wird. 

Das __erhalten Die Methode wird aufgerufen, wenn Sie eine Methode aufrufen, die nicht in der Klasse definiert ist. In dieser Methode wird "db" als Argument übergeben, während wir versuchen aufzurufen $ this -> db in der "activity.php" -Datei. Und wie vorher besprochen, $ register hat alle Dienstprogrammobjekte bereits während des Bootstrapping-Prozesses gespeichert. Wir müssen also nur das "db" -Objekt mithilfe des Schlüssels abrufen, indem wir die "get" -Methode des "Registry" -Objekts aufrufen!

Auf die gleiche Weise, $ this -> load funktioniert auch aus den Controller-Dateien. Insgesamt ist "Registry" eine wirklich nützliche Komponente des OpenCart-Frameworks, in der häufig verwendete Variablen und Objekte gespeichert werden, die während der Skriptausführung verwendet werden.

Das Loader-Objekt

Das Objekt "Loader" wird verwendet, um die verschiedenen Komponenten von OpenCart nach Bedarf zu laden, z. B. Modell, Controller, Sprache, Ansicht, Bibliothek usw. Es ist wichtig zu beachten, dass das Objekt "Loader" beim Erstellen des Objekts im $ register Objekt mit "load" als Array-Schlüssel. So können Sie auf das zugreifen $ loader Objekt mit einem $ this -> load rufen Sie an, wie im obigen Abschnitt beschrieben.

// Loader-Instanziierung $ loader = neuer Loader ($ registry); $ registry -> set ('load', $ loader);

Nun wollen wir sehen, wie verschiedene Komponenten mit dem "Loader" geladen werden. Öffnen Sie "system / engine / loader.php", um die Definition einer "Loader" -Klasse anzuzeigen. Wir beginnen mit der "Controller" -Methode, um zu verstehen, wie es funktioniert.

// Controller laden $ this-> load-> Controller ('common / column_left');

Es ist ein Code-Snippet, der den Controller "common / column_left.php" lädt und auch die "Index" -Methode aufruft. Wir machen diesen Aufruf, um die XHTML-Ausgabe der "linken Spalte" der OpenCart-Seite abzurufen. Das $ this -> load Teil funktioniert ähnlich wie das $ this -> db Beispiel, das ich früher erklärt habe! Somit wird das zurückgegeben $ loader Objekt gespeichert in $ register, und schließlich wird die "Controller" -Methode der Klasse "Loader" aufgerufen!

Auf die gleiche Weise funktionieren die folgenden Ausschnitte, um verschiedene Komponenten zu laden.

// lade Model $ this -> load -> model ('catalog / category'); // Lade View $ this -> load -> view ('default / template / product / category.tpl', $ data); // lade Bibliothek $ this -> lade -> Bibliothek ('Benutzer'); // load Helper $ this -> load -> helper ('json'); // load language $ this -> load -> language ('Produkt / Kategorie');

Wenn Sie die Methodendefinitionen in der Klasse "Loader" betrachten, werden Sie feststellen, dass es nicht so kompliziert ist, genau zu verstehen, wie es funktioniert. Zunächst wird der "Dateipfad" für die entsprechende Komponente vorbereitet und mit der Funktion "include_once" eingeschlossen.

Insgesamt sind "Registry" und "Loader" zwei sehr wichtige Komponenten im OpenCart-Framework, die Modulentwicklern die Arbeit erheblich erleichtern.

Fazit

Heute haben wir uns die Komponenten "Loader" und "Registry" des OpenCart-Frameworks angesehen. Ich hoffe, Sie haben in diesem Tutorial etwas Nützliches gelernt. Und hoffentlich komme ich zum selben Thema mehr! Senden Sie Ihre Fragen und Vorschläge mit dem untenstehenden Feed!