Wie kann Folgendes in Magento erreicht werden?
Zeigen Sie eine "Hallo Welt" -Nachricht mit einem Controller / View / Model-Ansatz an. Wenn ich dorthin gehen
http://example.com/myController
würde, würde die Zeichenfolge 'Hello World' angezeigt. Die Möglichkeit, diese Zeichenfolge in der Vorlage meiner Website anzuzeigen (z. B. Kopf- und Fußzeile usw.), ist ein Bonus.Wie füge ich diesem Controller (oder ggf. einem neuen Controller) eine Methode hinzu, die mit einem Modell interagiert, die Abfrage ausführt
Select * FROM articles where id='10'
und die Zeile (mit den Spaltenid, title, content
) an den Controller zurückgibt ? Verwenden Sie dann den Controller, um eine Ansicht einzuschließen, in der diese Zeile angezeigt wird. Wenn Sie also zuhttp://example.com/myController/show_row
(oder etwas Ähnlichem) gehen, wird die Zeile in einer Ansicht angezeigt. (Keine Notwendigkeit, ausgefallen zu sein, nur einecho $row->id;
oder ähnliches würde funktionieren.)
Alle anderen Informationen zur Codestruktur von Magento sind ebenfalls sehr hilfreich.
quelle
Antworten:
In erster Linie empfehle ich Ihnen dringend, das PDF / E-Book von PHP Architect zu kaufen . Es kostet 20 US-Dollar, ist aber die einzige unkomplizierte Ressource "So funktioniert Magento", die ich finden konnte. Ich habe auch angefangen, Magento-Tutorials auf meiner eigenen Website zu schreiben .
Zweitens, wenn Sie die Wahl haben und kein erfahrener Programmierer sind oder keinen Zugang zu einem erfahrenen Programmierer haben (idealerweise in PHP und Java), wählen Sie einen anderen Einkaufswagen . Magento ist ausgereift, wurde jedoch als Warenkorblösung entwickelt, auf der andere Programmierer Module aufbauen können. Es wurde nicht entwickelt, um von Leuten verstanden zu werden, die klug sind, aber keine Programmierer.
Drittens unterscheidet sich Magento MVC stark von Ruby on Rails , Django , CodeIgniter , CakePHP usw. Das MVC-Modell, das heutzutage bei PHP-Entwicklern beliebt ist. Ich denke, es basiert auf dem Zend- Modell und das Ganze ist sehr Java OOP-ähnlich. Es gibt zwei Controller, um die Sie sich Sorgen machen müssen. Der Modul- / FrontName-Controller und dann der MVC-Controller.
Viertens wird die Magento-Anwendung selbst mit demselben Modulsystem erstellt, das Sie verwenden. Das Stöbern im Kerncode ist daher eine nützliche Lerntaktik. Außerdem überschreiben Sie mit Magento häufig vorhandene Klassen. Was ich hier behandele, ist das Erstellen neuer Funktionen, nicht das Überschreiben. Denken Sie daran, wenn Sie sich die Codebeispiele ansehen.
Ich beginne mit Ihrer ersten Frage und zeige Ihnen, wie Sie einen Controller / Router einrichten, um auf eine bestimmte URL zu antworten. Dies wird ein kleiner Roman sein. Ich habe vielleicht später Zeit für die modell- / vorlagenbezogenen Themen, aber im Moment nicht. Ich werde jedoch kurz auf Ihre SQL-Frage eingehen.
Magento verwendet eine EAV- Datenbankarchitektur. Versuchen Sie nach Möglichkeit, die vom System bereitgestellten Modellobjekte zu verwenden, um die benötigten Informationen zu erhalten. Ich weiß, dass alles in den SQL-Tabellen enthalten ist, aber es ist am besten, nicht daran zu denken, Daten mit rohen SQL-Abfragen zu erfassen, sonst werden Sie verrückt.
Letzter Haftungsausschluss. Ich benutze Magento seit ungefähr zwei oder drei Wochen, also Vorbehalt. Dies ist eine Übung, um dies in meinem Kopf klar zu machen und um den Stapelüberlauf zu unterstützen.
Erstellen Sie ein Modul
Alle Ergänzungen und Anpassungen zu Magento erfolgen über Module. Als erstes müssen Sie ein neues Modul erstellen. Erstellen Sie eine XML-Datei
app/modules
mit folgendem NamenMyCompanyName ist ein eindeutiger Namespace für Ihre Änderungen. Es muss nicht der Name Ihres Unternehmens sein, sondern die empfohlene Konvention ist mein Magento.
HelloWorld
ist der Name Ihres Moduls.Leeren Sie den Anwendungscache
Nachdem die Moduldatei vorhanden ist, müssen wir Magento darüber informieren (und unsere Arbeit überprüfen). In der Admin-Anwendung
Jetzt stellen wir sicher, dass Magento über das Modul Bescheid weiß
Wenn Sie mit einer Leistungsabnahme leben können, möchten Sie möglicherweise den Anwendungscache während der Entwicklung / des Lernens deaktivieren. Nichts ist frustrierender, als das Löschen des Caches zu vergessen und sich zu fragen, warum Ihre Änderungen nicht angezeigt werden.
Richten Sie die Verzeichnisstruktur ein
Als nächstes müssen wir eine Verzeichnisstruktur für das Modul einrichten. Sie werden nicht alle diese Verzeichnisse benötigen, aber es schadet nicht, sie jetzt alle einzurichten.
Und fügen Sie eine Konfigurationsdatei hinzu
Fügen Sie in der Konfigurationsdatei Folgendes hinzu, bei dem es sich im Wesentlichen um eine "leere" Konfiguration handelt.
Mit dieser Konfigurationsdatei können Sie Magento mitteilen, welchen Code Sie ausführen möchten.
Einrichten des Routers
Als nächstes müssen wir die Router des Moduls einrichten. Dadurch wird das System darüber informiert, dass wir alle URLs in Form von verarbeiten
Fügen Sie in Ihrer Konfigurationsdatei den folgenden Abschnitt hinzu.
Was Sie hier sagen, ist "jede URL mit dem Frontnamen von helloworld ...
sollte den frontName-Controller MyCompanyName_HelloWorld verwenden ".
Wenn Sie also mit der obigen Konfiguration die helloworld-Seite oben laden, erhalten Sie eine 404-Seite. Das liegt daran, dass wir keine Datei für unseren Controller erstellt haben. Lass uns das jetzt machen.
Versuchen Sie nun, die Seite zu laden. Fortschritt! Anstelle eines 404 erhalten Sie eine PHP / Magento-Ausnahme
Öffnen Sie also die gerade erstellte Datei und fügen Sie den folgenden Code ein. Der Name der Klasse muss auf dem Namen basieren, den Sie in Ihrem Router angegeben haben.
Was wir gerade eingerichtet haben, ist das Modul / FrontName-Controller. Dies ist der Standard-Controller und die Standardaktion des Moduls. Wenn Sie Controller oder Aktionen hinzufügen möchten, müssen Sie sich daran erinnern, dass der erste Teil einer Magento-URL unveränderlich ist und immer so abläuft
http://example.com/magento/index.php/frontName/controllerName/actionName
Also, wenn Sie dieser URL entsprechen möchten
Sie benötigen einen FooController, den Sie folgendermaßen ausführen können:
Bitte beachten Sie, dass der Standard-Controller IndexController und die Standardaktion indexAction implizit sein können, aber explizit sein müssen, wenn etwas danach kommt. So
http://example.com/magento/index.php/helloworld/foo
wird die Steuerung FooController und die Aktion index entsprechen und nicht die Handlung fooAction des Indexcontroller. Wenn Sie eine Funktion haben möchten, müssen Sie diesen Controller im Controller-IndexController explizit so aufrufen:http://example.com/magento/index.php/helloworld/index/foo
Der zweite Teil der URL ist und bleibt der Controller-Name . Dieses Verhalten ist eine Vererbung des in Magento gebündelten Zend Framework.Sie sollten nun in der Lage sein, die folgenden URLs aufzurufen und die Ergebnisse Ihrer Echoanweisungen anzuzeigen
Das sollte Ihnen also eine grundlegende Vorstellung davon geben, wie Magento an einen Controller versendet. Von hier aus hatte ich empfohlen, in den vorhandenen Magento-Controller-Klassen zu stöbern, um zu sehen, wie Modelle und das Vorlagen- / Layoutsystem verwendet werden sollten.
quelle
Ich habe ungefähr den letzten Monat mit Magento gerungen und versuche immer noch, es herauszufinden. Dies ist also ein Fall, in dem der Blinde den Blinden führt. Es gibt wenig Dokumentation und das Forum / Wiki ist bestenfalls chaotisch. Darüber hinaus gibt es mehrere Lösungen, die entweder veraltet oder alles andere als optimal sind. Ich bin mir nicht sicher, ob Sie ein Projekt haben oder nur versuchen, es herauszufinden, aber es ist wahrscheinlich einfacher, wenn Sie damit beginnen, vorhandene Funktionen zu ändern, als etwas völlig Neues zu erstellen. Dafür würde ich definitiv mit den "Empfohlenen Artikeln für Entwickler" im Wiki gehen. Die neue Zahlungsmethode war ein echter Augenöffner.
Zum Debuggen würde ich definitiv empfehlen , FirePHP zu verwenden und sich Ihre HTML-Quelle anzusehen, wenn etwas schief geht. Die Ole-Echo-Debug-Methode funktioniert nicht so gut.
Die allgemeine Architektur ist so unglaublich komplex, dass ich, selbst wenn ich sie vollständig verstanden hätte, ein Buch schreiben müsste, um sie zu behandeln. Das Beste, was ich tun kann, ist, Ihnen Ratschläge zu geben. Ich wünschte, jemand hätte mich gegeben, als ich anfing ...
Halten Sie sich von Kerndateien fern. Ändern Sie sie nicht, sondern schreiben Sie Ihr eigenes Modul und überschreiben Sie, was Sie benötigen.
Magento verwendet Konfigurationsdateien, die aus XML bestehen, um zu entscheiden, was zu tun ist. Damit es im Gegensatz zur Kernfunktionalität eigene Inhalte ausführt, benötigen Sie die richtige XML. Leider gibt es keine Anleitung zum Erstellen von XML. Sie müssen sich Beispiele ansehen und einige ernsthafte Tests durchführen. Um die Sache zu komplizieren, unterscheidet der Inhalt dieser Dateien weitgehend zwischen Groß- und Kleinschreibung. Wenn Sie diese jedoch beherrschen, können Sie jeden Teil der Grundfunktionalität überschreiben, die ein sehr leistungsfähiges System ergibt.
Magento nutzt Methoden wie
Mage::getModel('mymodel')
,Mage::getSingleton('mysingleton')
,Mage::helper('myhelper')
zu Objekten bestimmter Klassen zurück. Diese werden standardmäßig in ihrem Kernnamespace gefunden. Wenn Sie möchten, dass es Ihr eigenes verwendet, müssen Sie diese in Ihrerconfig.xml
Datei überschreiben .Der Name Ihrer Klassen muss dem Ordner entsprechen, in dem sie sich befinden.
Viele der Objekte in Magento erweitern letztendlich etwas, das als a bezeichnet wird
Varien_Object
. Dies ist eine Allzweckklasse (ähnlich wie ein Schweizer Taschenmesser), deren Lebenszweck darin besteht, Ihnen zu ermöglichen, Ihre eigenen Methoden / Variablen im laufenden Betrieb zu definieren. Sie werden beispielsweise sehen, dass es als verherrlichtes Array verwendet wird, um Daten von einer Methode an eine andere zu übergeben.Stellen Sie während der Entwicklung sicher, dass das Caching deaktiviert ist. Es wird Magento unerträglich langsam machen, aber es wird Ihnen viel Kopftrauma ersparen (davor, es auf Ihren Schreibtisch zu schlagen).
Sie werden sehen,
$this
dass viel benutzt wird. Dies bedeutet eine andere Klasse, je nachdem, welche Datei Sie sehen.get_class($this)
ist dein Freund, besonders in Verbindung mit FirePHP.Schreiben Sie die Dinge auf Papier. Viel. Es gibt unzählige kleine Faktoide, die Sie 1-2 Tage nach Ihrer Begegnung brauchen werden.
Magento liebt OO. Seien Sie nicht überrascht, wenn die Verfolgung einer Methode Sie durch 5-10 verschiedene Klassen führt.
Lesen Sie die Designer - Handbuch hier . Es ist hauptsächlich für Grafikdesigner gedacht, aber Sie müssen verstehen, wo und warum die Ausgabe Ihres Moduls landen wird. Vergessen Sie dazu nicht, im Entwicklerbereich des Admin-Panels "Vorlagenpfad-Hinweise" zu aktivieren.
Es gibt noch mehr, aber ich werde hier aufhören, bevor daraus eine Dissertation wird.
quelle
Ich werde Mage2Gen eher empfehlen . Dies hilft Ihnen bei der Erstellung des Boilerplates und Sie können sich nur auf die Kerngeschäftslogik konzentrieren. es hilft nur, die Dinge zu beschleunigen.
quelle
Ein Magento-Modul ist eine Gruppe von Verzeichnissen, die Blöcke, Controller, Helfer und Modelle enthalten, die zum Erstellen einer bestimmten Speicherfunktion erforderlich sind. Es ist die Anpassungseinheit in der Magento-Plattform. Magento-Module können erstellt werden, um mehrere Funktionen mit unterstützender Logik auszuführen und die Benutzererfahrung und das Erscheinungsbild der Storefront zu beeinflussen. Es hat einen Lebenszyklus, mit dem sie installiert, gelöscht oder deaktiviert werden können. Module sind aus Sicht von Händlern und Erweiterungsentwicklern die zentrale Einheit der Magento-Plattform.
Deklaration des Moduls
Wir müssen das Modul mithilfe der Konfigurationsdatei deklarieren. Suchen Sie als Magento 2 nach dem Konfigurationsmodul im Verzeichnis etc des Moduls. Jetzt erstellen wir die Konfigurationsdatei module.xml.
Der Code sieht folgendermaßen aus:
Registrierung des Moduls Das Modul muss mithilfe der Magento Component Registrar-Klasse im Magento 2-System registriert werden. Jetzt erstellen wir die Datei register.php im Stammverzeichnis des Moduls:
Der Kodex sieht folgendermaßen aus:
Modulstatus überprüfen Nachdem Sie die obigen Schritte ausgeführt haben, hätten wir ein einfaches Modul erstellt. Jetzt überprüfen wir den Status des Moduls und ob es aktiviert oder deaktiviert ist, indem wir die folgende Befehlszeile verwenden:
Teilen Sie Ihr Feedback mit, sobald Sie den gesamten Prozess durchlaufen haben
quelle
Ich habe versucht, mein Modul aus dem Magaplaza Hallo Welt Tutorial zu machen, aber etwas ist schief gelaufen. Ich habe den Code dieses Moduls https://github.com/astorm/magento2-hello-world von github importiert und es hat funktioniert. Aus diesem Modul habe ich eine Kategorie erstellt. Unterkategorien Ajax Select Dropdowns Modul. Folgen Sie nach der Installation im aap / code-Verzeichnis Ihrer magento2-Installation dieser URL. Http://www.example.com/hello_mvvm/hello/world Sie können den Code hier herunterladen https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns und lege es in deinen aap / code Ordner. als diese Befehle ausführen ...
Jetzt können Sie die Modulfunktionalität unter folgender URL überprüfen: http: // {{www.example.com}} / hello_mvvm / hello / world
quelle
Und,
Ich empfehle Ihnen, sich über die Systemkonfiguration zu informieren.
Wie werden alle Kategorien im Systemkonfigurationsfeld angezeigt?
Hier habe ich mit einem guten Beispiel gelöst. Es funktioniert. Sie können den Codefluss überprüfen und lernen.
Es gibt auch andere zu viele Beispiele, die Sie lernen sollten.
quelle