Jak można wykonać następujące czynności w Magento?
Wyświetl komunikat „Hello World” za pomocą kontrolera / widoku / modelu. Tak więc, gdybym do
http://example.com/myController
niego podszedł , pokazywałby ciąg „Hello World”. Możliwość pokazania tego ciągu w szablonie mojej witryny (na przykład nagłówek, stopka itp.) Będzie dodatkowym atutem.Jak dodać metodę do tego kontrolera (lub nowego kontrolera, jeśli to konieczne), który współdziała z modelem i wykonuje zapytanie
Select * FROM articles where id='10'
i zwraca wiersz (zawierający kolumnyid, title, content
) do kontrolera? A następnie użyj kontrolera, aby dołączyć widok, który wyświetli ten wiersz. Więc przejście dohttp://example.com/myController/show_row
(lub czegoś podobnego) spowoduje wyświetlenie wiersza w widoku. (Nie musisz być fantazyjny, wystarczyłobyecho $row->id;
coś podobnego.)
Wszelkie inne informacje o strukturze kodu Magento również będą bardzo pomocne.
źródło
Odpowiedzi:
Przede wszystkim gorąco polecam zakup PDF / E-Book od PHP Architect . Jest to 20 USD, ale jest to jedyny prosty zasób „Oto jak działa Magento”, jaki udało mi się znaleźć. Zacząłem też pisać samouczki Magento na mojej stronie internetowej .
Po drugie, jeśli masz wybór i nie jesteś doświadczonym programistą lub nie masz dostępu do doświadczonego programisty (najlepiej w PHP i Javie), wybierz inny koszyk . Magento jest dobrze zaprojektowany, ale został zaprojektowany tak, aby był koszykiem, na którym inni programiści mogą budować moduły. Nie został zaprojektowany tak, aby był łatwy do zrozumienia dla ludzi, którzy są sprytni, ale nie są programistami.
Po trzecie, Magento MVC bardzo różni się od Ruby on Rails , Django , CodeIgniter , CakePHP itp. Model MVC, który jest obecnie popularny wśród programistów PHP. Myślę, że jest oparty na modelu Zend , a całość jest bardzo podobna do Java OOP. Jest dwa kontrolery trzeba być zaniepokojony. Kontroler modułu / frontName, a następnie kontroler MVC.
Po czwarte, sama aplikacja Magento jest zbudowana przy użyciu tego samego systemu modułów, którego używasz, więc szukanie kodu źródłowego jest przydatną taktyką uczenia się. Ponadto wiele z tego, co będziesz robić z Magento, zastępuje istniejące klasy. Omawiam tutaj tworzenie nowych funkcji, a nie zastępowanie. Należy o tym pamiętać, patrząc na próbki kodu tam.
Zacznę od pierwszego pytania, które pokazuje, jak skonfigurować kontroler / router, aby odpowiadał na określony adres URL. To będzie mała powieść. Mogę mieć trochę czasu na tematy związane z modelem / szablonem, ale na razie nie. Będę jednak krótko mówić na twoje pytanie SQL.
Magento korzysta z architektury bazy danych EAV . O ile to możliwe, spróbuj użyć obiektów modelu dostarczonych przez system, aby uzyskać potrzebne informacje. Wiem, że wszystko jest w tabelach SQL, ale najlepiej nie myśleć o pobieraniu danych za pomocą surowych zapytań SQL, bo inaczej oszalejesz.
Ostateczne wyłączenie odpowiedzialności. Używam Magento od około dwóch lub trzech tygodni, więc zastrzegaj sobie coś. To jest ćwiczenie, które pozwala mi zrozumieć to tak samo, jak pomoc w przepełnieniu stosu.
Utwórz moduł
Wszystkie dodatki i dostosowania do Magento są dokonywane za pośrednictwem modułów. Pierwszą rzeczą, którą musisz zrobić, to stworzyć nowy moduł. Utwórz plik XML o
app/modules
nazwie w następujący sposóbMyCompanyName to unikalna przestrzeń nazw dla twoich modyfikacji, nie musi to być nazwa twojej firmy, ale to zalecana konwencja moja magento.
HelloWorld
to nazwa twojego modułu.Wyczyść pamięć podręczną aplikacji
Teraz, gdy plik modułu jest na miejscu, będziemy musieli powiadomić Magento o tym (i sprawdzić naszą pracę). W aplikacji administratora
Teraz upewniamy się, że Magento wie o module
Jeśli możesz żyć ze spowolnieniem wydajności, możesz chcieć wyłączyć pamięć podręczną aplikacji podczas programowania / nauki. Nie ma nic bardziej frustrującego niż zapomnienie wyczyszczenia pamięci podręcznej i zastanowienie się, dlaczego zmiany się nie pojawiają.
Skonfiguruj strukturę katalogów
Następnie będziemy musieli skonfigurować strukturę katalogów dla modułu. Nie będziesz potrzebować wszystkich tych katalogów, ale konfigurowanie ich teraz nie zaszkodzi.
I dodaj plik konfiguracyjny
i w pliku konfiguracyjnym dodaj następujący tekst, który jest zasadniczo „pustą” konfiguracją.
Upraszczając rzeczy, ten plik konfiguracyjny pozwoli Ci powiedzieć Magento, jaki kod chcesz uruchomić.
Konfigurowanie routera
Następnie musimy skonfigurować routery modułu. Dzięki temu system będzie wiedział, że obsługujemy wszelkie adresy URL w formie
Tak więc w pliku konfiguracyjnym dodaj następującą sekcję.
Mówisz tutaj: „dowolny adres URL z nazwą frontu helloworld ...
powinien użyć kontrolera frontName MyCompanyName_HelloWorld ".
Tak więc, przy powyższej konfiguracji, po załadowaniu powyższej strony helloworld otrzymasz stronę 404. To dlatego, że nie stworzyliśmy pliku dla naszego kontrolera. Zróbmy to teraz.
Teraz spróbuj załadować stronę. Postęp! Zamiast 404 otrzymasz wyjątek PHP / Magento
Otwórz plik, który właśnie utworzyliśmy, i wklej następujący kod. Nazwa klasy musi być oparta na nazwie podanej w routerze.
Właśnie skonfigurowaliśmy sterownik modułu / frontName. Jest to domyślny kontroler i domyślna akcja modułu. Jeśli chcesz dodać kontrolery lub akcje, musisz pamiętać, że pierwsza część drzewa adresu URL Magento jest niezmienna, zawsze będą iść w tę stronę
http://example.com/magento/index.php/frontName/controllerName/actionName
Więc jeśli chcesz dopasować ten adres URL
Będziesz musiał mieć FooController, który możesz zrobić w ten sposób:
Należy pamiętać, że domyślny kontroler IndexController i domyślna akcja indexAction mogą być niejawne, ale muszą być jawne, jeśli coś po tym nastąpi.
http://example.com/magento/index.php/helloworld/foo
Dopasuje więc kontroler FooController i akcję indexAction, a NIE akcję fooAction IndexController. Jeśli chcesz mieć fooAction, w kontrolerze IndexController musisz wtedy wywołać ten kontroler jawnie w następujący sposób:http://example.com/magento/index.php/helloworld/index/foo
ponieważ druga część adresu URL jest i zawsze będzie nazwą kontrolera. To zachowanie jest dziedzictwem Zend Framework zawartym w Magento.Powinieneś teraz być w stanie trafić w poniższe adresy URL i zobaczyć wyniki swoich instrukcji echa
To powinno dać ci podstawowy pomysł na to, jak Magento wysyła do kontrolera. Odtąd poleciłem zajrzeć do istniejących klas kontrolerów Magento, aby zobaczyć, jak należy używać modeli i systemu szablonów / układu.
źródło
Walczyłem z Magento od około miesiąca i wciąż próbuję to rozgryźć. Jest to przypadek niewidomego prowadzącego niewidomego. Dokumentacja jest niewielka, a forum / wiki jest w najlepszym razie chaotyczne. Ponadto istnieje kilka rozwiązań, które są albo przestarzałe, albo dalekie od optymalnych. Nie jestem pewien, czy masz projekt, czy po prostu próbujesz go rozgryźć, ale prawdopodobnie łatwiej jest zacząć od zmodyfikowania istniejącej funkcjonalności zamiast tworzenia czegoś zupełnie nowego. W tym celu zdecydowanie skorzystam z „Zalecanych artykułów dla programistów” na wiki. Nowa metoda płatności była naprawdę atrakcyjna.
Do debugowania zdecydowanie polecam użycie FirePHP i sprawdzenie źródła HTML, gdy coś pójdzie nie tak. Metoda debugowania ole echo nie działa tak dobrze.
Ogólna architektura jest tak zadziwiająco złożona, że nawet jeśli ją całkowicie rozumiem, musiałbym napisać książkę na jej temat. Najlepsze, co mogę zrobić, to dać ci radę, jakiej życzyłby mi ktoś, kiedy zaczynałem ...
Unikaj podstawowych plików. Nie modyfikuj ich, zamiast tego napisz własny moduł i zastąp to, czego potrzebujesz.
Magento korzysta z plików konfiguracyjnych składających się z XML, aby zdecydować, co należy zrobić. Aby uruchomić własne rzeczy w przeciwieństwie do podstawowych funkcji, potrzebujesz poprawnego kodu XML. Niestety nie ma instrukcji, jak zbudować ci XML; musisz spojrzeć na przykłady i przeprowadzić poważne testy. Aby skomplikować sprawę, w zawartości tych plików rozróżniana jest wielkość liter. Jednak jeśli je opanujesz, możesz zastąpić dowolną część podstawowej funkcjonalności, która tworzy bardzo wydajny system.
Magento używa metod, takich jak
Mage::getModel('mymodel')
,Mage::getSingleton('mysingleton')
,Mage::helper('myhelper')
aby powrócić obiekty niektórych klas. Znajduje je domyślnie w swojej głównej przestrzeni nazw. Jeśli chcesz, aby używał własnego, musisz zastąpić je w swoimconfig.xml
pliku.Nazwa twoich klas musi odpowiadać folderowi, w którym się znajdują.
Wiele obiektów w Magento ostatecznie rozszerza coś o nazwie a
Varien_Object
. Jest to klasa ogólnego przeznaczenia (coś w rodzaju szwajcarskiego noża wojskowego), a jej celem w życiu jest umożliwienie definiowania własnych metod / zmiennych w locie. Na przykład zobaczysz, że jest używany jako gloryfikowana tablica do przesyłania danych z jednej metody do drugiej.Podczas programowania upewnij się, że buforowanie jest wyłączone. Sprawi, że magento będzie niesamowicie powolny, ale pozwoli ci zaoszczędzić wiele urazów głowy (od uderzenia go w biurko).
Będziesz
$this
często używany. Oznacza inną klasę w zależności od tego, jaki plik ją widzisz.get_class($this)
jest twoim przyjacielem, szczególnie w połączeniu z FirePHP.Zanotuj rzeczy na papierze. Dużo. Istnieje niezliczona ilość faktoidów, których będziesz potrzebować 1-2 dni po ich spotkaniu.
Magento kocha OO. Nie zdziw się, jeśli śledzenie metody poprowadzi cię przez 5-10 różnych klas.
Przeczytaj przewodnik projektanta tutaj . Jest przeznaczony głównie dla projektantów graficznych, ale musisz go zrozumieć, gdzie i dlaczego skończy się wyjście z twojego modułu. W tym celu nie zapomnij włączyć opcji „Wskazówki dotyczące ścieżki szablonu” w sekcji dla programistów panelu administracyjnego.
Jest więcej, ale zatrzymam się tutaj, zanim przerodzi się w rozprawę.
źródło
Raczej polecę Mage2Gen , to pomoże ci wygenerować podstawkę i możesz skupić się na podstawowej logice biznesowej. po prostu pomaga to przyspieszyć.
źródło
Moduł Magento to grupa katalogów zawierających bloki, kontrolery, pomocniki i modele, które są potrzebne do utworzenia określonej funkcji sklepu. Jest to jednostka dostosowywania w platformie Magento. Moduły Magento można tworzyć w celu wykonywania wielu funkcji z logiką wspierającą, wpływającą na wrażenia użytkownika i wygląd sklepu. Ma cykl życia, który pozwala na ich instalację, usuwanie lub wyłączanie. Z perspektywy zarówno handlowców, jak i twórców rozszerzeń moduły są jednostką centralną platformy Magento.
Deklaracja modułu
Musimy zadeklarować moduł za pomocą pliku konfiguracyjnego. Jako Magento 2 wyszukaj moduł konfiguracji w katalogu etc modułu. Teraz stworzymy plik konfiguracyjny module.xml.
Kod będzie wyglądał następująco:
Rejestracja modułu Moduł musi być zarejestrowany w systemie Magento 2 przy użyciu klasy Magento Component Registrar. Teraz utworzymy plik register.php w głównym katalogu modułu:
Kod będzie wyglądał następująco:
Sprawdź status modułu Po wykonaniu powyższych kroków utworzylibyśmy prosty moduł. Teraz sprawdzimy status modułu i to, czy jest włączony, czy wyłączony za pomocą następującego wiersza poleceń:
Podziel się swoją opinią po zakończeniu całego procesu
źródło
Próbowałem zrobić mój moduł z samouczka magaplaza hello world, ale coś poszło nie tak. Zaimportowałem kod tego modułu https://github.com/astorm/magento2-hello-world z github i działało. z tego modułu utworzyłem go podkategorie kategorii ajax select drops drops Moduł. Po zainstalowaniu go w katalogu aap / code instalacji magento2 postępuj zgodnie z tym adresem URL. Http://www.example.com/hello_mvvm/hello/world Możesz pobrać jego kod stąd https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns i umieść go w folderze aap / code. niż uruchomić te polecenia ...
Teraz możesz sprawdzić funkcjonalność modułu za pomocą następującego adresu URL http: // {{www.example.com}} / hello_mvvm / hello / world
źródło
I,
Sugeruję zapoznanie się z konfiguracją systemu.
Jak wyświetlić wszystkie kategorie w polu konfiguracji systemu?
Tutaj rozwiązałem z dobrym przykładem. To działa. Możesz sprawdzić i nauczyć się przepływu kodu.
Jest też zbyt wiele przykładów, których powinieneś się nauczyć.
źródło