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ób
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 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
- Przejdź do System-> Zarządzanie pamięcią podręczną
- Wybierz Odśwież z menu Cała pamięć podręczna
- Kliknij Zapisz ustawienia pamięci podręcznej
Teraz upewniamy się, że Magento wie o module
- Przejdź do System-> Konfiguracja
- Kliknij Zaawansowane
- W polu ustawień „Wyłącz wyjście modułów” znajdź nowy moduł o nazwie „MyCompanyName_HelloWorld”
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.
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 dodaj plik konfiguracyjny
touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml
i w pliku konfiguracyjnym dodaj następujący tekst, który jest zasadniczo „pustą” konfiguracją.
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<version>0.1.0</version>
</MyCompanyName_HelloWorld>
</modules>
</config>
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
http://example.com/magento/index.php/helloworld
Tak 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>
Mówisz tutaj: „dowolny adres URL z nazwą frontu helloworld ...
http://example.com/magento/index.php/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.
touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php
Teraz spróbuj załadować stronę. Postęp! Zamiast 404 otrzymasz wyjątek PHP / Magento
Controller file was loaded but class does not exist
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.
<?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 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
http://example.com/magento/index.php/helloworld/foo
Będziesz musiał mieć FooController, który możesz zrobić 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';
}
}
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
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 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.