So erstellen Sie ein benutzerdefiniertes Modul in Magento 2
Veröffentlicht: 2018-03-19Was ist das Magento-Modul?
Wie Sie wissen, ist das Modul ein Verzeichnis, das Blöcke , Controller , Modelle , Helfer usw. enthält, die sich auf eine bestimmte Geschäftsfunktion beziehen.
Im Einklang mit Magentos Engagement für optimale Modularität kapselt ein Modul eine Funktion und hat minimale Abhängigkeiten von anderen Modulen.
Module bieten Geschäftsfunktionen mit unterstützender Logik, während Themen die Benutzererfahrung und das Erscheinungsbild des Schaufensters stark beeinflussen.
Zweck des Moduls
Der Zweck jedes Moduls besteht darin, bestimmte Produktmerkmale bereitzustellen, indem neue Funktionen implementiert oder die Funktionalität anderer Module erweitert werden. Jedes Modul ist so konzipiert, dass es unabhängig funktioniert, sodass das Einschließen oder Ausschließen eines bestimmten Moduls normalerweise nicht die Funktionalität anderer Module beeinflusst.
In Magento 2 befinden sich Module im App/Code-Verzeichnis einer Magento-Installation in diesem Format: App/Code/<Vendor>/<ModuleName>. Jetzt werden wir diesen Schritten folgen, um ein einfaches Modul zu erstellen, das auf Magento 2 funktioniert.
Erstellen Sie ein Magento 2-Modul
- Erstellen Sie den Modulordner.
- Erstellen Sie die Datei etc/module.xml.
- Erstellen Sie die Datei registration.php.
- Führen Sie das Skript bin/magento setup:upgrade aus, um das neue Modul zu installieren.
- Überprüfen Sie, ob das Modul funktioniert.
Lassen Sie uns jeden dieser Schritte im Detail durchgehen.
Schritt 1: Erstellen Sie den Modulordner
- Es gibt zwei mögliche Speicherorte für Module in Magento 2: den App/Code-Ordner und den Vendor-Ordner
Je nachdem, wie Magento 2 installiert wurde, können sich Kernmodule entweder in den Ordnern „vendor/magento/magento-*“ (für die Composer-Installation) oder im Ordner „app/code/Magento/“ (für das Klonen von Github) befinden.
- Welchen dieser Standorte sollten Sie für Ihr neues Modul wählen?
Wenn Sie ein Modul für ein bestimmtes Projekt erstellen, ist es am besten, den App/Code-Ordner auszuwählen und in das Repository des Projekts zu übernehmen.
Wenn Sie eine Erweiterung erstellen, die wiederverwendet werden soll, ist es besser, Composer zu verwenden, um sie zu erstellen, und Ihr Modul im Ordner „Vendor/<YOUR_VENDOR>/module-something“ abzulegen.
Jeder Modulname in Magento 2 besteht aus zwei Teilen – dem Anbieter und dem Modul selbst, daher müssen Sie den Anbieter- und den Modulnamen definieren. Nennen wir für dieses Beispiel den Anbieter „Learning“ und das Modul „FirstUnit“.
Lassen Sie uns den Ordner app/code/Learning erstellen und in diesem Ordner einen weiteren Ordner platzieren: FirstUnit. Wenn Sie die Befehlszeile verwenden, lautet der Code:
- cd in den Stammordner
- mkdir App/Code/Lernen
- mkdirapp/code/Learning/FirstUnit
Stellen Sie sicher, dass Sie berechtigt sind, Dateien und Ordner in Ihrer Installation zu erstellen.
Schritt 2: Erstellen Sie die Datei etc/module.xml
Diese Datei ist für das Vorhandensein des Moduls erforderlich und enthält die folgenden Informationen:
- Modulname
- Modulversion
- Abhängigkeiten
Der Modulname wird durch die gerade erstellten Ordner definiert, da in Magento 2 die Klassennamen der Ordnerstruktur folgen müssen. Da wir die Ordner Learning/FirstUnit erstellt haben, lautet unser Modulname Learning_FirstUnit und alle Klassen, die zu diesem Modul gehören, beginnen mit Learning\FirstUnit – zum Beispiel: Learning\FirstUnit\Observer\Test.
Die Modulversion gibt die aktuelle Version des Datenbankschemas und der Daten an und wird beim Upgrade verwendet. Nehmen wir beispielsweise an, Sie entscheiden sich, das Schema einer Tabelle in Ihrem Modul zu ändern. Wie können Sie sicher sein, dass diese Änderung auf allen Instanzen erfolgt, auf denen der Code bereitgestellt wird? Das Ändern der Datenbank durch direkte SQL-Abfragen funktioniert nicht. Stattdessen verfügt Magento 2 über Installations- und Upgrade-Skripte in jedem Modul (optional). Diese Skripte enthalten Befehle zum Ändern des Datenbankschemas oder der Daten. Um nachzuverfolgen, ob ein Skript ausgeführt werden soll oder nicht, verwendet Magento 2 Modulversionen. Jedes Mal, wenn Sie eine neue Datenbankänderung implementieren, implementieren Sie eine neue Version eines Moduls und ändern die entsprechende module.xml. Magento speichert die Version des aktuellen Moduls in einer Datenbank, und wenn der Datenbankwert und der in der module.xml nicht übereinstimmen, führt es den Upgrade-Code aus.
Abhängigkeiten. Wenn ein Modul von einem anderen abhängt, enthält die Datei module.xml eine spezielle Deklaration, die eine Liste von Modulen definiert, von denen das aktuelle Modul abhängt. Für dieses Beispiel machen wir unser Modul von Magento_Catalog abhängig.
Erstellen Sie mit dem folgenden Befehlszeilencode den Ordner app/code/Learning/FirstUnit/etc :
mkdir app/code/Learning/FirstUnit/etc
Erstellen Sie dann eine XML-Datei mit folgendem Inhalt:
<?xml-Version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <Modulname="Learning_FirstUnit" setup_version="0.0.1"> <Sequenz> <Modulname="Magento_Catalog" /> </sequenz> </modul> </config>
Beachten Sie, dass wir in der XML-Datei Folgendes angegeben haben:
- Modulname: Learning_FirstUnit (basierend auf den von uns erstellten Ordnern)
- Version: 0.0.1 (Erstversion unseres Moduls)
- Abhängigkeit: Magento_Catalog. Wir könnten mehrere Abhängigkeiten haben. In diesem Fall würden wir <Modulname="/>-Knoten unter den Sequenzknoten setzen.
Schritt 3: Erstellen Sie die Datei registration.php
Jedes Modul muss diese Datei haben, die Magento mitteilt, wie es das Modul finden kann. Um unser Beispiel fortzusetzen, erstellen Sie die Datei app/code/Learning/FirstUnit/registration.php . Fügen Sie dann den folgenden Inhalt hinzu:
<?php \Magento\Framework\Component\ComponentRegistrar::register(\Magento\Framework\Component\ComponentRegistrar::MODULE, 'Learning_FirstUnit', __DIR__);
Die registration.php ist eine standardisierte Datei, die für alle Module dem gleichen Muster folgt.
Das einzige, was variiert, ist der Modulname, in unserem Fall Learning_FirstUnit
.
Schritt 4: Führen Sie den Befehl „setup:upgrade“ aus
Wenn Sie diesen Befehl ausführen, wird Ihr neues Modul aktiv und benachrichtigt Magento über seine Anwesenheit.
php bin/magento setup:upgrade
Es sollte eine große Menge an Ausgabe widerspiegeln, von der eine Zeile Learning_FirstUnit
sein sollte. Stellen Sie sicher, dass diese Codezeile vorhanden ist.
Schritt 5: Überprüfen Sie, ob das neue Modul aktiv ist
Bisher haben wir unserem Modul keinen nützlichen Code hinzugefügt – es ist noch leer (und daher unsichtbar). Um zu überprüfen, ob es erkannt wurde, überprüfen Sie die Datei app/etc/config.php . Es hat eine Liste von automatisch generierten Modulen, die aktiv sind.
Ändern Sie diese Liste niemals manuell!
cat app/etc/env.php | grep Learning_FirstUnit
Mit diesen Schritten können Sie erfolgreich ein neues Modul in Magento 2 erstellen.
Weiterlesen:
So stellen Sie statische Inhalte in Magento 2 bereit