Frage

Wie kann Folgendes in Magento erreicht werden?

  • Zeigen Sie eine „Hallo Welt“-Nachricht mithilfe eines Controller-/Ansichts-/Modell-Ansatzes an.Also, wenn ich dorthin gehen würde http://example.com/myController es würde die Zeichenfolge „Hello World“ anzeigen.Die Möglichkeit, diese Zeichenfolge in der Vorlage meiner Website (z. B. Kopf- und Fußzeile usw.) anzuzeigen, ist ein Bonus.

  • Wie füge ich diesem Controller (oder ggf. einem neuen Controller) eine Methode hinzu, die mit einem Modell interagiert und die Abfrage ausführt? Select * FROM articles where id='10' und gibt die Zeile (mit den Spalten) zurück id, title, content) zum Controller?Und dann verwenden Sie den Controller, um eine Ansicht einzubinden, die diese Zeile anzeigt.Also werde ich es tun http://example.com/myController/show_row (oder etwas Ähnliches) würde die Zeile innerhalb einer Ansicht anzeigen.(Kein Grund, schick zu sein, nur ein echo $row->id; oder etwas Ähnliches würde funktionieren.)

Alle anderen Informationen zur Codestruktur von Magento sind ebenfalls sehr hilfreich.

War es hilfreich?

Lösung

In erster Linie empfehle ich Ihnen dringend, das zu kaufen PDF/E-Book von PHP Architect.Es kostet 20 US-Dollar, ist aber die einzige unkomplizierte „So funktioniert Magento“-Ressource, die ich finden konnte.Ich habe auch angefangen zu schreiben Magento-Tutorials auf meiner eigenen Website.

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 Warenkorb.Magento ist gut entwickelt, aber es wurde als Warenkorblösung konzipiert, auf der andere Programmierer Module aufbauen können.Es wurde nicht so entwickelt, dass es von schlauen Leuten, die aber keine Programmierer sind, leicht verständlich ist.

Drittens unterscheidet sich Magento MVC stark von Ruby auf Schienen, Django, CodeIgniter, CakePHP, usw.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 basiert die Magento-Anwendung selbst auf demselben Modulsystem, das Sie verwenden werden. Daher ist es eine nützliche Lerntaktik, sich im Kerncode umzusehen.Vieles, was Sie mit Magento tun werden, ist auch überragend bestehende Klassen.Was ich hier beschreibe, ist Erstellen neue Funktionalität, nicht überschreibend.Bedenken Sie dies, wenn Sie sich die Codebeispiele ansehen.

Ich beginne mit Ihrer ersten Frage und zeige Ihnen, wie Sie einen Controller/Router so einrichten, dass er auf eine bestimmte URL reagiert.Dies wird ein kleiner Roman sein.Vielleicht habe ich später noch Zeit für die modell-/vorlagenbezogenen Themen, aber im Moment habe ich keine Zeit.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 besser, nicht daran zu denken, Daten mithilfe von Roh-SQL-Abfragen abzurufen, sonst werden Sie verrückt.

Abschließender Haftungsausschluss.Ich benutze Magento seit ungefähr zwei oder drei Wochen, also Vorsicht.Dies ist eine Übung, um mir das klar zu machen und um den Stapelüberlauf zu unterstützen.

Erstellen Sie ein Modul

Alle Ergänzungen und Anpassungen an Magento erfolgen über Module.Als Erstes müssen Sie also ein neues Modul erstellen.Erstellen Sie eine XML-Datei in app/modules wie folgt benannt

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 unbedingt 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 nun vorhanden ist, müssen wir Magento darüber informieren (und unsere Arbeit überprüfen).In der Admin-Anwendung

  1. Gehen Sie zu System->Cache-Verwaltung
  2. Wählen Sie im Menü „Alle Caches“ die Option „Aktualisieren“.
  3. Klicken Sie auf Cache-Einstellungen speichern

Jetzt stellen wir sicher, dass Magento über das Modul Bescheid weiß

  1. Gehen Sie zu System->Konfiguration
  2. Klicken Sie auf Erweitert
  3. Suchen Sie im Einstellungsfeld „Modulausgabe deaktivieren“ nach Ihrem neuen Modul mit dem Namen „MyCompanyName_HelloWorld“.

Wenn Sie mit der Leistungsverlangsamung leben können, sollten Sie den Anwendungscache beim Entwickeln/Lernen deaktivieren.Nichts ist frustrierender, als das Leeren 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 kann nicht schaden, sie alle jetzt 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>

Vereinfachend können Sie mit dieser Konfigurationsdatei 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 URLs in der Form verarbeiten

http://example.com/magento/index.php/helloworld

Fügen Sie also 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 „helloworld ...“

http://example.com/magento/index.php/helloworld

sollte den FrontName-Controller MyCompanyName_HelloWorld verwenden.

Wenn Sie also die obige Konfiguration eingerichtet haben, erhalten Sie beim Laden der obigen Helloworld-Seite eine 404-Seite.Das liegt daran, dass wir keine Datei für unseren Controller erstellt haben.Machen wir das jetzt.

touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php

Versuchen Sie nun, die Seite zu laden.Fortschritt!Anstelle einer 404 erhalten Sie eine PHP/Magento-Ausnahme

Controller file was loaded but class does not exist

Öffnen Sie also die soeben 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 der 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 bedenken, dass der erste Baumteil einer Magento-URL unveränderlich ist und immer in diese Richtung geht http://example.com/magento/index.php/frontName/controllerName/actionName

Wenn Sie also diese URL abgleichen möchten

http://example.com/magento/index.php/helloworld/foo

Sie benötigen einen FooController, was Sie folgendermaßen tun 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.Also http://example.com/magento/index.php/helloworld/foo stimmt mit dem Controller FooController und der Aktion indexAction überein und NICHT mit der Aktion fooAction des IndexControllers.Wenn Sie eine fooAction haben möchten, müssen Sie im Controller IndexController diesen Controller explizit wie folgt aufrufen:http://example.com/magento/index.php/helloworld/index/foo denn der zweite Teil der URL ist und bleibt der ControllerName.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 Echo-Anweisungen 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 eine grundlegende Vorstellung davon geben, wie Magento an einen Controller sendet.Von hier aus würde ich empfehlen, in den vorhandenen Magento-Controller-Klassen herumzustöbern, um zu sehen, wie Modelle und das Vorlagen-/Layoutsystem verwendet werden sollten.

Andere Tipps

Ich habe für den letzten Monat mit Magento gerungen oder so und ich bin immer noch versuchen, es herauszufinden. So ist dies ein Fall, der Blinde den Blinden führt. Es gibt wenig in der Art der Dokumentation und das Forum / wiki ist bestenfalls chaotisch. Nicht nur das, aber es gibt mehrere Lösungen, die entweder veraltet oder bei weitem nicht optimal sind. Ich bin mir nicht sicher, ob Sie ein Projekt haben, oder nur versucht, es herauszufinden, aber es ist wahrscheinlich einfacher, wenn Sie mit der Änderung bestehenden Funktionalität beginnen im Gegensatz zu etwas völlig Neues zu schaffen. Denn das würde ich auf jeden Fall mit dem „Empfohlene Artikel für Entwickler“ im Wiki gehen. Die neue Zahlungsmethode war ein echter Augenöffner.

Für das Debuggen würde ich auf jeden Fall empfehlen mit FirePHP und suchen Sie in Ihren HTML-Quellcode wenn etwas schief geht. Das ole Echo Debug-Methode nicht wirklich funktioniert so gut.

Die allgemeine Architektur ist so nervtötend komplex, dass selbst wenn ich es vollständig verstanden, ich brauchen würde, um ein Buch zu schreiben, um es zu bedecken. Das Beste, was ich tun kann, ist Ihnen Ratschläge, die ich wünschte, jemand hatte mir gegeben, als ich anfing ...

Bleiben Sie weg von Core-Dateien. Ändern Sie sie nicht, stattdessen ein eigenes Modul schreiben und überschreiben, was Sie brauchen.

Magento verwendet Konfigurationsdateien von XML aus, um zu entscheiden, was er tun muss. Um es zu bekommen Ihre eigenen Sachen zu laufen als auf Kernfunktionalität Gegensatz benötigen Sie die korrekte xml. Leider gibt es keine Anleitung, wie Sie XML zu bauen; Sie müssen auf Beispiele sehen und einige ernsthafte Prüfung zu tun. Um die Dinge der Inhalt dieser Dateien erschweren weitgehend Fall empfindlich. Allerdings, wenn Sie diese meistern können Sie einen beliebigen Teil der grundlegenden Funktionen außer Kraft setzen, die für ein sehr leistungsfähiges System macht.

Magento nutzt Methoden wie Mage::getModel('mymodel'), Mage::getSingleton('mysingleton'), Mage::helper('myhelper') zu Objekten bestimmter Klassen zurück. Sie findet diese standardmäßig in seinem Kern-Namespace. Wenn Sie es Ihre eigene verwenden möchten, müssen Sie diese in Ihrem config.xml Datei außer Kraft zu setzen.

Der Name Ihrer Klassen in die Ordner, in sie sind entsprechen.

Viele der Objekte in Magento erweitern letztlich etwas ein Varien_Object genannt. Dies ist eine Allzweck-Klasse (Art wie ein Schweizer Taschenmesser) und sein Ziel im Leben ist es, Ihnen zu ermöglichen, Ihre eigenen Methoden / Variablen on the fly zu definieren. Zum Beispiel werden Sie sehen es als eine glorifizierte Array verwendet, um Daten von einem Verfahren zum anderen zu passieren.

Während der Entwicklung stellen Sie sicher, deaktiviert das Caching. Es wird magento quälend langsam machen, aber es wird Ihnen viel Kopftrauma speichern (ab es auf Ihrem Schreibtisch hämmern).

Sie werden sehen $this viel verwendet wird. Es bedeutet, eine andere Klasse je nachdem, welche Datei Sie es sehen. get_class($this) ist dein Freund, vor allem in Verbindung mit FirePHP.

Jot Dinge auf Papier. Viel. Es gibt unzählige kleine factoids, die Sie gonna Notwendigkeit sind 1-2 Tage nachdem Sie sie begegnen.

Magento liebt OO. Seien Sie nicht überrascht, wenn ein Verfahren Tracing 5-10 verschiedene Klassen führt durch.

Lesen Sie die Anleitung des Designers hier . Es ist vor allem für Grafikdesigner gedacht, aber Sie Notwendigkeit es zu verstehen, wo und warum die Ausgabe von Ihrem Modul enden. Dafür vergessen Sie nicht auf „Vorlage Pfad Hinweise“ im Entwicklerabschnitt des Admin-Panel zu drehen.

Es gibt noch mehr, aber ich werde hier stoppen, bevor diese in eine Dissertation dreht.

Ich werde eher empfehlen Mage2Gen , dies wird Ihnen helfen, die vorformulierten generieren und Sie können einfach auf das Kerngeschäft konzentrieren Logik. es hilft nur die Dinge zu beschleunigen.

Ein Magento-Modul ist eine Gruppe von Verzeichnissen Blöcke, Controller, Helfer enthalten, und Modelle, die eine bestimmte Speicher-Funktion nötig ist, um zu erstellen. Es ist die Einheit der Anpassung in der Magento-Plattform. Magento Module können erstellt werden, um mehrere Funktionen auszuführen, mit Logik unterstützt User Experience und Schaufenster Aussehen zu beeinflussen. Es hat einen Lebenszyklus, der sie installiert werden, gelöscht oder deaktiviert werden können. Aus der Perspektive der beiden Händler und Entwickler von Erweiterungen, Module sind die Zentraleinheit der Magento-Plattform.

Erklärung der Module

Wir haben das Modul deklarieren, indem Sie die Konfigurationsdatei. Als Magento 2 Suche nach Konfigurationsmodul in etc-Verzeichnis des Moduls. So, jetzt werden wir Konfigurationsdatei module.xml erstellen.

Der Code wird wie folgt aussehen:

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Cloudways_Mymodule" setup_version="1.0.0"></module> </config>

Registrierung von Modul Das Modul muss mit Magento Component Registrar-Klasse im Magento 2-System registriert werden. Jetzt werden wir die Datei registration.php im Modul Stammverzeichnis erstellen:

app/code/Cloudways/Mymodule/registration.php

Der Kodex wird wie folgt aussehen:

?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Cloudways_Mymodule',
__DIR__
);

Überprüfen Modulstatus Nachdem Sie die Schritte oben, hätten wir ein einfaches Modul erstellt. Jetzt werden wir den Status des Moduls prüfen und ob es aktiviert ist oder über die folgende Befehlszeile deaktiviert:

php bin/magento module:status

php bin/magento module:enable Cloudways_Mymodule

Geben Sie uns Feedback, sobald Sie durch vollständige Prozess gegangen sind

Ich habe versucht, mein Modul aus magaplaza Hallo Welt Tutorial, aber etwas schief gelaufen zu machen. Ich importierte Code dieses Moduls https://github.com/astorm/magento2-hello-world von github und es funktioniert. aus diesem Modul, habe ich es ein Kategorien Ajax wählen Drop-downs Module Unterkategorien. Nachdem es in aap / code Verzeichnis Ihrer magento2 Installation folgen Sie diese URL Installation .. http: // www .example.com / hello_mvvm / hallo / Welt Sie können ihren Code von hier https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns herunterladen und es in Ihre aap / code Ordner. als diese Befehle ausführen ...

php bin/magento setup:update
php bin/magento setup:static-content:deploy -f
php bin/magento c:c

Jetzt können Sie Modulfunktionalität mit folgenden URL http überprüfen: // {{www.example.com}} / hello_mvvm / hallo / world

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top