Jak stworzyć prosty moduł "Hello World" w Magento?
Jak można wykonać następujące czynności w Magento?
Wyświetla komunikat "Hello World" za pomocą podejścia kontroler / widok / model. Tak więc, gdybym poszedł do
http://example.com/myController
to pokazuje ciąg "Hello World". Możliwość wyświetlenia tego ciągu w szablonie mojej strony (na przykład nagłówka, stopki itp.) będzie premią.Jak dodać metodę do tego kontrolera (lub w razie potrzeby nowy kontroler), która współdziała z modelem i wykonuje ZAPYTANIE
Select * FROM articles where id='10'
i zwraca wiersz (zawierający Kolumnyid, title, content
) do kontrolera? 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) wyświetli wiersz w widoku. (Nie trzeba być fantazyjnym, wystarczyecho $row->id;
lub coś podobnego by zadziałało.)
Wszelkie inne informacje na temat struktury kodu Magento będą również bardzo pomocne.
6 answers
Przede wszystkim gorąco polecam zakup PDF / E-Book z PHP Architect. To US$20, ale jest jedynym prostym zasobem "Oto jak działa Magento", który udało mi się znaleźć. Zacząłem również pisać tutoriale Magento na mojej własnej stronie internetowej .
Po drugie, jeśli masz wybór, a nie jesteś doświadczonym programistą lub nie masz dostępu do doświadczonego programisty (najlepiej w PHP i} Java), wybierz inny koszyk. Magento jest dobrze zaprojektowany, ale został zaprojektowany, aby być rozwiązaniem wózka, na którym inni programiści mogą budować Moduły. Nie został zaprojektowany tak, aby był łatwo zrozumiały dla ludzi, którzy są inteligentni, ale nie są programistami.
Po Trzecie, Magento MVC bardzo różni się od Ruby on Rails, Django, CodeIgniter, CakePHP , itd. Model MVC, który jest popularny wśród programistów PHP w dzisiejszych czasach. Myślę, że bazuje na modelu Zend , a całość jest bardzo podobny do Javy. Są dwa kontrolery, o które musisz się martwić. Moduł / frontName controller, a następnie kontroler MVC.
Po czwarte, sama aplikacja Magento jest zbudowana przy użyciu tego samego systemu modułów, którego będziesz używać, więc grzebanie w kodzie głównym jest użyteczną taktyką uczenia się. Ponadto, wiele z tego, co będziesz robił z Magento, to nadpisywanie istniejących klas. To, co tu omawiam, to tworzenie nowej funkcjonalności, a nie nadpisywanie. Zostawić pamiętaj o tym, gdy patrzysz na próbki kodu.
Zacznę od pierwszego pytania, pokazując, jak skonfigurować kontroler / router, aby odpowiedzieć na konkretny adres URL. To będzie mała powieść. Może później będę miał czas na tematy związane z modelem/szablonem, ale na razie nie mam. będę jednak krótko rozmawiał z twoim pytaniem SQL.
Magento wykorzystuje architekturę bazy danych EAV . Jeśli to możliwe, spróbuj użyć obiektów modelu, które System zapewnia aby uzyskać potrzebne informacje. Wiem, że wszystko jest w tabelach SQL, ale najlepiej nie myśleć o pobieraniu danych za pomocą surowych zapytań SQL, albo oszalejesz.Ostateczne zastrzeżenie. Używam Magento od około dwóch lub trzech tygodni, więc caveat emptor. Jest to ćwiczenie, aby uzyskać to prosto w mojej głowie, jak to jest, aby pomóc przepełnienie stosu.
Utwórz moduł
Wszystkie dodatki i dostosowania do Magento są wykonywane za pomocą modułów. Więc pierwszą rzeczą, której potrzebujesz aby to zrobić, należy utworzyć nowy moduł. Tworzenie pliku XML w app/modules
o następującej nazwie
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 jest unikalną przestrzenią nazw dla Twoich modyfikacji, nie musi to być Nazwa Twojej firmy, ale zalecana konwencja my magento. HelloWorld
to nazwa Twojego modułu.
Wyczyść pamięć podręczną aplikacji
Teraz, gdy plik modułu jest już na miejscu, musimy powiadomić o tym Magento (i sprawdzić naszą pracę). W aplikacji admin
- idź do System - > Zarządzanie Cache
- wybierz Odśwież z menu All Cache
- kliknij Zapisz Ustawienia pamięci podręcznej
- przejdź do System - > Konfiguracja
- Kliknij Zaawansowane
- w polu ustawień" Wyłącz wyjście modułów " poszukaj nowego modułu o nazwie "MyCompanyName_HelloWorld"
Jeśli możesz żyć z wydajnością spowolnić, możesz wyłączyć pamięć podręczną aplikacji podczas rozwój/uczenie się. Nic nie jest bardziej frustrujące niż zapominanie o wyczyszczeniu pamięci podręcznej i zastanawianie się, dlaczego twoje zmiany nie pojawiają się.
Konfiguracja struktury katalogów
Następnie musimy skonfigurować strukturę katalogów dla modułu. Nie będziesz potrzebował wszystkich tych katalogów, ale nie ma nic złego w skonfigurowaniu ich wszystkich teraz.
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
I dodać plik konfiguracyjny
touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml
I wewnątrz pliku konfiguracyjnego Dodaj następujący tekst, który jest zasadniczo " pustym" konfiguracja.
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<version>0.1.0</version>
</MyCompanyName_HelloWorld>
</modules>
</config>
Upraszczając sprawy, ten plik konfiguracyjny pozwoli Ci powiedzieć Magento, jaki kod chcesz uruchomić.
[[60]}Konfiguracja routeraNastępnie musimy skonfigurować routery modułu. Dzięki temu system będzie wiedział, że obsługujemy dowolne adresy URL w postaci
http://example.com/magento/index.php/helloworld
Więc w pliku konfiguracyjnym dodaj następującą sekcję.
<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>
To, co mówisz, to " dowolny adres URL z nazwą frontową helloworld ...
http://example.com/magento/index.php/helloworld
Powinien używać kontrolera mycompanyname_helloworld".
Więc, z powyższą konfiguracją na miejscu, po załadowaniu strony helloworld powyżej, otrzymasz stronę 404. To dlatego, że nie stworzyliśmy pliku dla naszego kontrolera. Zróbmy to teraz.
touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php
Spróbuj załadować stronę. Postęp! Zamiast 404, otrzymasz wyjątek PHP/Magento
Controller file was loaded but class does not exist
Więc otwórz plik, który właśnie stworzyliśmy i wklej poniższy kod. Nazwa klasa musi być oparta na nazwie podanej w routerze.
<?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";
}
}
Właśnie skonfigurowaliśmy kontroler module/frontName. Jest to domyślny kontroler i domyślne działanie modułu. Jeśli chcesz dodać Kontrolery lub akcje, musisz pamiętać, że pierwsza część drzewa adresu URL Magento jest niezmienna.]}
Więc jeśli chcesz dopasować ten adres URL
http://example.com/magento/index.php/helloworld/foo
Będziesz musiał mieć FooController, który możesz w ten sposób:
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';
}
}
Proszę zauważyć, że domyślny Kontroler IndexController i domyślna akcja indexAction mogą być niejawne, ale muszą być jawne, jeśli coś nastąpi po niej.
Tak więc http://example.com/magento/index.php/helloworld/foo
będzie pasował do kontrolera FooController i akcji indexAction, a nie do akcji fooAction Indexcontrollera. Jeśli chcesz mieć fooAction, w kontrolerze IndexController musisz wywołać ten kontroler jawnie w ten sposób :
http://example.com/magento/index.php/helloworld/index/foo
ponieważ druga część adres url jest i zawsze będzie nazwą kontrolera.
To zachowanie jest dziedzictwem Zend Framework dołączonego do Magento.
Teraz powinieneś być w stanie trafić na następujące adresy URL i zobaczyć wyniki swoich poleceń echo
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
To powinno dać ci podstawowe pojęcie o tym, jak Magento wysyła kontroler. Stąd polecam szturchnięcie na istniejące klasy kontrolerów Magento, aby zobaczyć, jak powinny być używane modele i system szablonu/układu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-03 22:17:44
Zmagałem się z Magento przez ostatni miesiąc i wciąż próbuję to rozgryźć. Więc jest to przypadek niewidomego prowadzącego niewidomego. Niewiele jest na drodze do dokumentacji, a forum / wiki jest co najwyżej chaotyczne. Nie tylko to, ale istnieje kilka rozwiązań, które są przestarzałe lub dalekie od optymalnych. Nie jestem pewien, czy masz projekt, czy po prostu próbujesz go rozgryźć, ale prawdopodobnie łatwiej będzie, jeśli zaczniesz od modyfikacji istniejących funkcjonalności, a nie tworzenia coś zupełnie nowego. W tym celu zdecydowanie wybrałbym "Polecane artykuły dla programistów" na wiki. Nowa metoda płatności one otworzyła oczy.
Do debugowania zdecydowanie polecam używanie FirePHP i przeglądanie źródła HTML, gdy coś pójdzie nie tak. Metoda debugowania Ole echo nie działa tak dobrze.
Ogólna architektura jest tak skomplikowana, że nawet gdybym ją całkowicie zrozumiał, musiałbym napisać książkę do zakryj to. Najlepsze, co mogę zrobić, to dać ci radę, której żałuję, że ktoś mi nie dał, kiedy zaczynałem...Trzymaj się z dala od podstawowych plików. Nie modyfikuj ich, zamiast tego napisz swój własny moduł i Nadpisz to, czego potrzebujesz.
Magento używa plików konfiguracyjnych składających się z XML, aby zdecydować, co ma zrobić. Aby go uruchomić własne rzeczy, w przeciwieństwie do podstawowej funkcjonalności, potrzebujesz poprawnego xml. Niestety nie ma przewodnika jak zbudować XML; trzeba spojrzeć na przykłady i zrobić kilka poważne testy. Aby skomplikować rzeczy zawartość tych plików jest w dużej mierze wielkość liter. Jednak jeśli opanujesz je, możesz zastąpić dowolną część podstawowej funkcjonalności, która sprawia, że system jest bardzo wydajny.
Magento używa metod takich jak Mage::getModel('mymodel')
, Mage::getSingleton('mysingleton')
, Mage::helper('myhelper')
zwracanie obiektów określonych klas. Znajduje je domyślnie w swojej podstawowej przestrzeni nazw. Jeśli chcesz, aby używała twoich własnych, musisz nadpisać je w pliku config.xml
.
Nazwa zajęć musi odpowiadać folder, w którym są.
Wiele obiektów w Magento ostatecznie rozszerza coś, co nazywa sięVarien_Object
. Jest to klasa ogólnego przeznaczenia (coś w rodzaju szwajcarskiego noża wojskowego) i jej celem w życiu jest umożliwienie definiowania własnych metod/zmiennych w locie. Na przykład zobaczysz, że jest używana jako gloryfikowana tablica do przekazywania danych z jednej metody do drugiej.
Podczas tworzenia upewnij się, że buforowanie jest wyłączone. To sprawi, że magento będzie niesamowicie powolne, ale zaoszczędzi Ci dużo głowy trauma (od walenia go na biurku).
Zobaczysz $this
jest często używany. Oznacza to inną klasę w zależności od tego, jaki plik widzisz. Jest twoim przyjacielem, zwłaszcza w połączeniu z FirePHP.
Przeczytaj poradnik projektanta tutaj . Jest przeznaczony głównie dla grafików, ale ty potrzebujesz , aby zrozumieć, gdzie i dlaczego wyjście z twojego modułu zakończy się. W tym celu nie zapomnij włączyć "podpowiedzi do ścieżki szablonu" w sekcji deweloper w panelu administracyjnym.
Jest tego więcej, ale zatrzymam się tutaj, zanim to zamieni się w rozprawę doktorską.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:54:55
Raczej polecę Mage2Gen , to pomoże Ci wygenerować boilerplate i możesz po prostu skupić się na podstawowej logice biznesowej. to tylko przyspiesza sprawy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-27 14:55:32
Moduł Magento to grupa katalogów zawierających bloki, Kontrolery, helpery i modele, które są potrzebne do utworzenia określonej funkcji sklepu. Jest to jednostka dostosowywania na platformie Magento. Moduły Magento można tworzyć w celu wykonywania wielu funkcji z logiką wspierającą wpływ na wrażenia użytkownika i wygląd witryny sklepowej. Ma cykl życia, który pozwala na ich zainstalowanie, usunięcie lub wyłączenie. Z perspektywy zarówno handlowców, jak i deweloperów rozszerzeń, Moduły są jednostką centralną platformy Magento.
Deklaracja modułu
Musimy zadeklarować moduł używając pliku konfiguracyjnego. Jako Magento 2 wyszukaj moduł konfiguracyjny w katalogu etc modułu. Więc teraz stworzymy moduł pliku konfiguracyjnego.xml.
Kod będzie wyglądał tak:
<?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>
Rejestracja modułu Moduł musi być zarejestrowany w systemie Magento 2 przy użyciu klasy Magento Component Registrar. Teraz będziemy Utwórz rejestrację pliku.php w katalogu głównym modułu:
app/code/Cloudways/Mymodule/registration.php
Kod będzie wyglądał tak:
?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Cloudways_Mymodule',
__DIR__
);
Sprawdź Status Modułu Po wykonaniu powyższych kroków stworzylibyśmy prosty moduł. Teraz sprawdzimy status modułu i czy jest on włączony czy wyłączony za pomocą następującego wiersza poleceń:
php bin/magento module:status
php bin/magento module:enable Cloudways_Mymodule
Podziel się swoją opinią po przejściu przez cały proces]}Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-20 14:36:11
Próbowałem zrobić mój moduł z magaplaza hello world tutorial, ale coś poszło nie tak. Zaimportowałem Kod tego modułu https://github.com/astorm/magento2-hello-world z Githuba i zadziałało. z tego modułu utworzyłem go kategorie podkategorie ajax wybierz rozwijany 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. następnie uruchom te polecenia...
php bin/magento setup:update
php bin/magento setup:static-content:deploy -f
php bin/magento c:c
Teraz możesz sprawdzić funkcjonalność modułu z następującym adresem URL http: / / {{www.example.com}} / hello_mvvm / hello / world
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-03 07:36:58
I,
Proponuję zapoznać się z konfiguracją systemu.
Jak wyświetlić wszystkie kategorie w polu Konfiguracja systemu?
Tutaj rozwiązałem z dobrym przykładem. Działa. Możesz sprawdzić i nauczyć się przepływu kodu.
Jest też zbyt wiele innych przykładów, których powinieneś się nauczyć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-05 13:23:19