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 Namen
cd /path/to/store/app
touch etc/modules/MyCompanyName_HelloWorld.xml
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<active>true</active>
<codePool>local</codePool>
</MyCompanyName_HelloWorld>
</modules>
</config>
MyCompanyName 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
- Gehen Sie zu System-> Cache-Verwaltung
- Wählen Sie im Menü Alle Caches die Option Aktualisieren
- Klicken Sie auf Cache-Einstellungen speichern
Jetzt stellen wir sicher, dass Magento über das Modul Bescheid weiß
- Gehen Sie zu System-> Konfiguration
- Klicken Sie auf Erweitert
- Suchen Sie im Einstellungsfeld "Modulausgabe deaktivieren" nach Ihrem neuen Modul mit dem Namen "MyCompanyName_HelloWorld".
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.
mkdir -p app/code/local/MyCompanyName/HelloWorld/Block
mkdir -p app/code/local/MyCompanyName/HelloWorld/controllers
mkdir -p app/code/local/MyCompanyName/HelloWorld/Model
mkdir -p app/code/local/MyCompanyName/HelloWorld/Helper
mkdir -p app/code/local/MyCompanyName/HelloWorld/etc
mkdir -p app/code/local/MyCompanyName/HelloWorld/sql
Und fügen Sie eine Konfigurationsdatei hinzu
touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml
Fügen Sie in der Konfigurationsdatei Folgendes hinzu, bei dem es sich im Wesentlichen um eine "leere" Konfiguration handelt.
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<version>0.1.0</version>
</MyCompanyName_HelloWorld>
</modules>
</config>
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
http://example.com/magento/index.php/helloworld
Fügen Sie in Ihrer Konfigurationsdatei den folgenden Abschnitt hinzu.
<config>
<!-- ... -->
<frontend>
<routers>
<!-- the <helloworld> tagname appears to be arbitrary, but by
convention is should match the frontName tag below-->
<helloworld>
<use>standard</use>
<args>
<module>MyCompanyName_HelloWorld</module>
<frontName>helloworld</frontName>
</args>
</helloworld>
</routers>
</frontend>
<!-- ... -->
</config>
Was Sie hier sagen, ist "jede URL mit dem Frontnamen von helloworld ...
http://example.com/magento/index.php/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.
touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php
Versuchen Sie nun, die Seite zu laden. Fortschritt! Anstelle eines 404 erhalten Sie eine PHP / Magento-Ausnahme
Controller file was loaded but class does not exist
Ö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.
<?php
class MyCompanyName_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action{
public function indexAction(){
echo "We're echoing just to show that this is what's called, normally you'd have some kind of redirect going on here";
}
}
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äufthttp://example.com/magento/index.php/frontName/controllerName/actionName
Also, wenn Sie dieser URL entsprechen möchten
http://example.com/magento/index.php/helloworld/foo
Sie benötigen einen FooController, den Sie folgendermaßen ausführen können:
touch app/code/local/MyCompanyName/HelloWorld/controllers/FooController.php
<?php
class MyCompanyName_HelloWorld_FooController extends Mage_Core_Controller_Front_Action{
public function indexAction(){
echo 'Foo Index Action';
}
public function addAction(){
echo 'Foo add Action';
}
public function deleteAction(){
echo 'Foo delete Action';
}
}
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
http://example.com/magento/index.php/helloworld/foo
http://example.com/magento/index.php/helloworld/foo/add
http://example.com/magento/index.php/helloworld/foo/delete
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.