Installieren und deinstallieren Sie Hooks in OpenCart

Als Modulentwickler müssen Sie in der täglichen Entwicklung des benutzerdefinierten OpenCart-Moduls häufig ein benutzerdefiniertes Schema erstellen. Es ist bereits wie bei den anderen Frameworks in Form verschiedener Hooks in der Modularchitektur von OpenCart bereitgestellt.

Bevor wir uns mit den oben genannten Haken befassen, wollen wir uns mit dem Konzept der Erweiterungen in OpenCart beschäftigen. Von oben betrachtet ist dies eine Erweiterung in OpenCart, mit der Sie die Kernfunktionen von OpenCart erweitern können. Durch die Installation fügen Sie dem Front-End-Store Funktionen hinzu, sei es eine einfache Bildergalerie oder eine ausgefallene Drag & Drop-Funktion.

Ferner werden die Erweiterungen, abhängig von der Funktionalität, die sie bereitstellen, in logische Gruppen eingeteilt. Als schnelles Beispiel fügt die Zahlungserweiterung neue Zahlungsmethoden in der Front-End-Kasse hinzu, während sie eine Erweiterung zur Betrugsbekämpfung ist, mit der Sie Spam-Aktivitäten in Ihrem Geschäft erkennen können. Gehen Sie zum Backend und schauen Sie sich die Liste unter an Erweiterungen Menü, das die verschiedenen Arten von Erweiterungen zeigt, die in OpenCart unterstützt werden.

Sie werden überrascht sein, dass a Modul ist auch nur eine andere Art von Erweiterung in OpenCart. Jede Erweiterung basiert auf dem allgemeinen Workflow, wie Dinge im OpenCart-Ökosystem funktionieren sollten. Mithilfe von Hooks können Sie bestimmte Aktionen basierend auf bestimmten Ereignissen ausführen, z. B. beim Ausführen eines Installations-Hooks während der Aktivierung des Moduls oder beim Entfernen des Mülls während der Deinstallation.

Dies sind die Installations- und Deinstallations-Hooks, die im Verlauf dieses Artikels besprochen werden. Obwohl sie im Zusammenhang mit Modulen behandelt werden, sehe ich nichts, was Sie davon abhält, die gleiche Methode auch auf andere Arten von Erweiterungen anzuwenden. Sehen Sie sich also die Dateien selbst an.

Es ist die neueste Version von OpenCart, die die in diesem Lernprogramm verteilten Snippets bereitstellt. Zum jetzigen Zeitpunkt ist dies die stabile Version 2.1.0.2.

Gehen Sie durch den Installationshaken

In diesem Abschnitt werden wir untersuchen, wofür genau der Install Hook verwendet wird. Mach weiter und öffne dich admin / controller / extension / module.php in Ihrem bevorzugten Texteditor und finden Sie das Installieren Methode. Es sollte ungefähr so ​​aussehen:

Last-> Sprache ('Erweiterung / Modul'); $ this-> document-> setTitle ($ this-> language-> get ('heading_title')); $ this-> load-> model ('extension / extension'); $ this-> load-> model ('Erweiterung / Modul'); if ($ this-> validate ()) $ this-> model_extension_extension-> install ('module', $ this-> request-> get ['extension']); $ this-> load-> model ('user / user_group'); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'access', 'module /'. $ this-> request-> get ['extension']); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'modify', 'module /'. $ this-> request-> get ['extension']); // Install-Methode aufrufen, falls vorhanden $ this-> load-> controller ('module /'. $ This-> request-> get ['extension']. '/ Install'); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> redirect ($ this-> url-> link ('Erweiterung / Modul', 'token ='. $ this-> session-> data ['token'], 'SSL'));  $ this-> getList (); …?>

Dies ist der generische Installations-Hook für das Modul, der aufgerufen wird, wenn Sie versuchen, ein Modul vom Back-End aus zu installieren. Gehen wir die wichtigen Teile dieser Methode durch.

Zunächst werden die Modelldateien geladen, die für die nachfolgenden Aktivitäten erforderlich sind. Das $ this-> model_extension_extension-> install Der Methodenaufruf stellt sicher, dass der Datenbank ein Eintrag für dieses bestimmte Modul hinzugefügt wird.

Im Anschluss daran gibt es ein paar ACL-Sachen, die durch das Aufrufen von erreicht werden addPermission Methode. Dadurch wird sichergestellt, dass der aktuelle Benutzer admin auf die modulspezifischen Einstellungen zugreifen und diese ändern kann.

Zum Schluss nennt man das Installieren Methode des zu installierenden Moduls. Lassen Sie sich nicht mit der Installationsmethode verwechseln, in der wir uns bereits befinden - das Modul wird als spezifisch bezeichnet Installieren Methode, wenn es existiert.

Zum Beispiel, wenn Sie versuchen, das zu installieren Mit PayPal einloggen Das Modul ruft eine in der Datei definierte Installationsmethode auf admin / controller / module / pp_login.php Wie nachfolgend dargestellt.

load-> model ('extension / event'); $ this-> model_extension_event-> addEvent ('pp_login', 'post.customer.logout', 'module / pp_login / logout'); …?>

Seit der Einführung von OpenCart 2.x sind einige aufregende Funktionen enthalten. Event-Observer ist eine davon. Sie können damit modulspezifische Ereignisse hinzufügen, und andere Module könnten Beobachter für dieses Ereignis einrichten, sodass sie beim Auslösen dieses bestimmten Ereignisses beliebigen Code ausführen können. Und genau das demonstriert die obige Installationsmethode post.customer.logout benutzerdefiniertes Ereignis!

Im Falle der Mit PayPal einloggen Modul, es war ziemlich einfaches Zeug, aber manchmal benötigen Sie mehr, wenn Sie ein benutzerdefiniertes Schema oder ähnliches einfügen möchten. Lassen Sie uns unsere Installationsmethode aus dem PayPal Express Checkout Zahlungsverlängerung. Mach weiter und öffne dich admin / controller / payment / pp_express.php.

load-> model ('payment / pp_express'); $ this-> model_payment_pp_express-> install (); …?>

Zuerst lädt es die entsprechende Modelldatei und ruft die Installieren Methode des Modells. Als Faustregel gilt: Wenn Sie ein Schema bearbeiten möchten, sollten Sie diesen Code in die Installationsmethode des Modells implementieren, anstatt ihn direkt in die Installationsmethode des Controllers einzufügen.

Lassen Sie uns nun die in der Modelldatei definierte Installationsmethode schnell einholen admin / model / payment / pp_express.php.

db-> query ("CREATE TABLE WENN NICHT EXISTEN" ". DB_PREFIX." paypal_order '(' paypal_order_id 'int (11) NOT NULL AUTO_INCREMENT,' order_id 'int (11) NOT NULL,' date_added 'DATETIME NOT NULL,' date_modified 'DATETIME NOT NULL' Capture_status ENUM ('Complete', 'NotComplete') DEFAULT NULL, 'Währungscode' CHAR (3) NOT NULL, 'Authorization_id' VARCHAR (30) NOT NULL, 'Gesamt' DECIMAL (10, 2) NOT NULL, PRIMARY KEY ('paypal_order_id')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; "); $ this-> db-> query ("CREATE TABLE WENN NOT EXISTS" ". DB_PREFIX." paypal_order_transaction '(' paypal_order_transaction_id 'int (11) NOT NULL AUTO_INCREMENT,' paypal_order_id 'int (11) NOT NULL,' transaction_id 'CHAR 20) NOT NULL, 'parent_transaction_id' CHAR (20) NOT NULL, 'date_added' DATETIME NOT NULL, 'note' VARCHAR (255) NOT NULL, 'msgsubid' CHAR (38) NOT NULL,'QUE_ID 'CHAR (20) NOT NULL, 'payment_type' ENUM ('none', 'echeck', 'instant', 'refund', 'void') STANDARD NULL, 'payment_status' CHAR (20) NOT NULL, 'pending_reason' CHAR (50) NOT NULL, 'transaction_entity' CHAR (50) NOT NULL, 'Betrag' DECIMAL (10, 2) NOT NULL, 'debug_data' TEXT NOT NULL, 'call_data' TEXT NOT NULL, PRIMARY KEY ('paypal_order_transaction_id')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; "); …?>

Endlich gibt es etwas, worüber man jubeln kann! Wie Sie sehen, werden einige benutzerdefinierte MySQL-Tabellen mit der Datenbank-API von OpenCart erstellt. Auf diese Weise können datenbankbezogene Änderungen mithilfe der Installationsmethode des Modells angewendet werden.

Das ist es also, was den Installationshaken angeht. Ich hoffe, dass es nicht so kompliziert ist, wie es auf den ersten Blick scheint. Sagen wir mal so. Der Prozess wird durch Auslösen einer erweiterungsspezifischen Installationsmethode gestartet, die wiederum die Installationsmethode der zu installierenden Erweiterung aufruft, falls vorhanden. Schließlich wird die Installationsmethode des Modells von der Installationsmethode des Controllers aufgerufen, falls von dieser Erweiterung eine Datenbankmanipulation erforderlich ist.

Gehen Sie durch den Deinstallationshaken

In diesem Abschnitt, dem Gegenstück zum vorherigen Abschnitt, werden die Ereignisse im Deinstallationshaken hervorgehoben. Wir werden auf die gleiche Weise vorgehen wie bei der Installationsmethode im vorherigen Abschnitt. Lass uns also gleich den Code von deinstallieren Haken aus der Datei admin / controller / extension / module.php.

Last-> Sprache ('Erweiterung / Modul'); $ this-> document-> setTitle ($ this-> language-> get ('heading_title')); $ this-> load-> model ('extension / extension'); $ this-> load-> model ('Erweiterung / Modul'); if ($ this-> validate ()) $ this-> model_extension_extension-> uninstall ('module', $ this-> request-> get ['extension']); $ this-> model_extension_module-> deleteModulesByCode ($ this-> request-> get ['extension']); $ this-> load-> model ('Einstellung / Einstellung'); $ this-> model_setting_setting-> deleteSetting ($ this-> request-> get ['extension']); // Deinstallationsmethode aufrufen, falls vorhanden $ this-> load-> controller ('module /'. $ This-> request-> get ['extension']. '/ Uninstall'); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> redirect ($ this-> url-> link ('Erweiterung / Modul', 'token ='. $ this-> session-> data ['token'], 'SSL'));  $ this-> getList (); …?>

Auch hier sollte es etwas bekannt aussehen, da der Großteil davon der Boilerplate-Code ist. Das wichtigste Snippet ist der Aufruf an die deinstallieren Methode, die den Eintrag der aktuellen Erweiterung, die deinstalliert wird, aus der Erweiterung MySQL-Tabelle.

Als nächstes ruft es an deleteModulesByCode, Dadurch werden die mit der Erweiterung verknüpften Module gelöscht. Es ist eine spezielle Methode, die nur in dieser Hinsicht gefunden wird Modul Art der Erweiterung, die Sie in den anderen Erweiterungen wie Bezahlung, Versand, Betrug usw. nicht finden.

Der Grund ist, dass Sie jedes Modul replizieren können, um mehrere Instanzen zu erstellen. Zum Beispiel könnten Sie sich anders zeigen Banner Module auf verschiedenen Seiten. Auf der anderen Seite macht es keinen Sinn, die andere Art von Erweiterungen zu replizieren. Auch hier ist nur eine Instanz für die PayPal Zahlungsverlängerung im Frontend.

Anschließend löscht es die auf das Modul bezogenen Konfigurationsvariablen durch Aufruf von deleteSetting Methode. Zum Schluss nennt man das deinstallieren Methode des zu deinstallierenden Moduls.

Öffnen wir es admin / controller / module / pp_login.php um zu sehen, wie die Deinstallationsmethode aussieht.

load-> model ('extension / event'); $ this-> model_extension_event-> deleteEvent ('pp_login'); …?>

Ganz einfach, oder? Es macht einfach das Zeug rückgängig, das in die Installationsmethode des eingebunden wurde Mit PayPal einloggen Modul. Denken Sie daran, dass wir eine neue Veranstaltung erstellt haben post.customer.logout Es ist offensichtlich, dass wir es während der Installation löschen müssen, um sicherzustellen, dass kein modulspezifischer Müll übrig bleibt.

Werfen wir auch einen kurzen Blick auf die Deinstallationsmethode von PayPal Express Checkout Zahlungserweiterung, da wir die Installationsmethode im vorherigen Abschnitt durchgearbeitet haben. Besorgen Sie sich den folgenden Ausschnitt von admin / controller / payment / pp_express.php.

load-> model ('payment / pp_express'); $ this-> model_payment_pp_express-> uninstall (); …?>

Ziemlich erwartete Sachen - es lädt das Modell und ruft die Deinstallationsmethode auf. Das gibt uns auch einen guten Grund, die Modelldatei zu öffnen admin / model / payment / pp_express.php und erkunden Sie auch die Deinstallationsmethode.

db-> query ("DROP TABLE IF EXISTS '". DB_PREFIX. "paypal_order_transaction';"); $ this-> db-> query ("DROP TABLE IF EXISTS '". DB_PREFIX. "paypal_order';"); …?>

Wir löschen nur die zuvor erstellten MySQL-Tabellen, da wir nicht möchten, dass uns jemand fragt: "Wie können Sie diesen Müll verlassen?"

Das war die hoffentlich schöne Geschichte, in der Hooks in OpenCart installiert und deinstalliert wurden. Der nächste und der letzte Abschnitt fasst die bisher gelernten Konzepte schnell in einem einfachen, aber funktionierenden, benutzerdefinierten Modul zusammen, da dies in Ihrer Kitty-Post-Theory-Sitzung etwas Schönes ist.

Erstellen / Löschen eines benutzerdefinierten Schemas mithilfe von Installations- / Deinstallationshaken

In diesem Abschnitt erstellen wir ein Verwaltungsmodul Demo Das macht nicht viel, außer ein neues Schema während der Installation zu erstellen und es während der Deinstallation zu löschen.

Zuerst erstellen wir eine Sprachdatei, damit das Modul im Backend abgerufen wird. Fahren Sie fort und erstellen Sie eine Datei admin / sprache / englisch / module / demo.php mit folgenden Inhalten.

Als Nächstes müssen Sie eine Modelldatei erstellen, die den aktuellen und interessanten Code unseres benutzerdefinierten Moduls enthält. Die Modelldatei sollte unter platziert werden admin / model / module / demo.php. Es schafft eine Demo MySQL-Tabelle in der Installieren Methode und legt es in die deinstallieren Methode.

db-> query ("CREATE TABLE IF NOT EXISTS" ". DB_PREFIX." demo '(' demo_id 'int (11) NICHT NULL AUTO_INCREMENT,' name 'VARCHAR (100) NICHT NULL, PRIMARY KEY (' demo_id ')) = MyISAM DEFAULT COLLATE = utf8_general_ci; ");  public function uninstall () $ this-> db-> query ("DROP TABLE IF EXISTS '". DB_PREFIX. "demo';"); 

Zum Schluss erstellen Sie eine Controller-Datei admin / controller / module / demo.php mit folgenden Inhalten.

Laden-> Modell ('Modul / Demo'); $ this-> model_module_demo-> install ();  public function uninstall () $ this-> load-> model ('module / demo'); $ this-> model_module_demo-> uninstall (); 

Es ist unkompliziert, wie es sein sollte - es lädt das Modell und ruft die entsprechenden Methoden auf, abhängig von den durchgeführten Aktionen.

Probieren Sie es aus. Es sollte als aufgeführt werden Demo-Modul unter Erweiterungen> Module. Installieren Sie es und Sie sollten das sehen Demo MySQL-Tabelle, die im Backend erstellt wurde, und natürlich nicht vergessen, sie zu deinstallieren, um die Tabelle zu löschen.

Fazit

Heute haben wir einen wichtigen Aspekt des OpenCart-Installationsprozesses besprochen, die Installations- und Deinstallations-Hooks. Wir haben die Details dieser Haken durchgearbeitet und im späteren Teil des Artikels haben wir ein einfaches Modul als Konzeptnachweis erstellt.

Fragen und Kommentare sind natürlich immer willkommen!