od Podstaw
5 godz. 56 min · PHP · Full-stack i Programowanie
Patryk WaluśBackend DeveloperZanim przejdziemy do omawiania możliwości Magento, przedstawię Ci w jaki sposób skonfigurować środowisko developerskie oraz jak zainstalować nowy projekt. Omówimy też polecenia i narzędzia, które są przydatne podczas pracy developerów.
Rozpoczniemy od przedstawienia oraz omówienia funkcji poszczególnych katalogów, które znajdują się w projekcie. Po wstępie stworzymy swój pierwszy moduł oraz przedstawię podstawowe techniki wykorzystywane przez Magento do zarządzania konfiguracjami czy modułami.
Magento wykorzystuje bardzo popularny wzorzec MVC, który składa się z trzech elementów. Aby z łatwością rozumieć jak system obsługuje żądania HTTP najpierw przestawię ogólne działanie MVC, a następnie jak to działa w Magento.
Szczegółowe omówienie wzorca MVC rozpoczniemy od literki C czyli Controller'a. W tym rozdziale dowiesz się jak zarejestrować w systemie nową ścieżkę, jak pobierać parametry oraz w jaki sposób zwrócić rezultat odpowiedni dla danego przypadku.
Gdy już zarejestrujemy nową stronę, konieczne będzie zdefiniowanie jej wyglądu. Dlatego też, przedstawię Ci jak to zrobić oraz jakie możliwości Magento udostępnia do manipulacji układem stron. Omówię różnice między kontenerem, a blokiem oraz pokaże jak modyfikować tagi w sekcji.
Aby wcześniej dodana strona była funkcjonalna, konieczna jest jej integracja z bazą danych. Do tego celu stworzymy m.in. Model, za pomocą którego będziemy komunikować się z MySQL. Przedstawię Ci też dobre praktyki, które pozwalają na tworzenie kodu wysokiej jakości.
W ostatnim rozdziale omówimy konfigurację nowego motywu w Magento. Pozwoli Ci to zrozumieć jak tworzyć różne wersje wyglądu dla sklepów internetowych.
Ten kurs w szczególności przyda się osobom, które chcą poznać podstawy framework'a Magento 2. Przedstawione w nim fundamentalne informacje pomogą zrozumieć sposób działania systemu, a także w jaki sposób można dodawać czy rozszerzać swój projekt o nowe funkcjonalności.
Zanim stworzymy swój własny router
wytłumaczę w jaki sposób w ogóle do tego podejść.
Naszym celem w tej lekcji jest stworzenie
user friendly URL czyli na ten moment mamy nazwę domeny następnie
nazwę Front kontroler oraz akcję czyli Brand View Index i na końcu podajemy
identyfikator marki którą chcemy załadować.
Chcemy natomiast aby ten adres URL był ładniejszy.
Dlatego też stworzymy tor kropka.
Następnie Flesz i URL danej marki dzięki
czemu to w bazie danych będziemy przechowywać adres URL do danej marki.
Więc teraz w jaki sposób możemy dodać taki router.
Zacznijmy od tego że po wpisaniu w pasek
przeglądarki adresu URL Edu Web Flesz URL dla danej marki
maczetą zacznie wyszukiwać router który będzie wiedział co zrobić z danym
robotem który oczywiście nie będzie wiedział co z nim zrobić.
Dlatego też przekaże to żądanie dalej do URL Live On też nie będzie wiedział co z
tym zrobić więc zostanie przekazane do routera.
Standard Standard wiedziałby co z nim zrobić natomiast nie wie ponieważ brakuje
mu informacji o front kontrolerzy oraz akcje i właśnie powrót że standard
dodamy nasz nowy router Brand router w tym router wykryje my na podstawie Uri.
Jaką markę powinniśmy załadować
skonfigurować specjalną klasę forward której przekażemy informacje o module.
Następnie kontrolę oraz akcji i ustawiamy
też identyfikator marki dzięki czemu po zwróceniu obiektu forward tak
skonfigurować go Marzena rozpocznie znowu wyszukiwać ścieżkę od routera.
Robot jest znowu robot nie będzie wiedział
co z nim zrobić następnie URL nie będzie wiedział co z nim zrobić.
Jednak gdy dojdzie już do routera standard to on wykryje że chodzi o moduł Brand
kontroler w akcji indeks oraz przekażemy parametry identyfikator oraz 1 dzięki
czemu standard odpowiednio ładuje naszą akcję i wyświetli odpowiedni model.
Co by się stało gdyby Brandt znalazł się wcześniej np.
przed lustrem standard
przepływ danych byłby taki sam czyli zaczęli byśmy
robot który następnie przekazał informację do URL i następnie do brand router Brand
router skonfigurować by najpierw rozpoznał markę a następnie skonfigurować obiekt.
Format i potwierdzenie tego obiektu
znowu zaczęto by rozpoczęło wyszukiwanie Oto robot URL.
I niestety znowu byśmy wrócili do routera Brand router który znowu wykryje daną
markę znowu skan figuruje obiekt format i tym samym znowu wrócimy do przetwarzania.
Od teraz robot dlatego też tworzy się
przekierować przekierować i w końcu kto zwróci błąd.
O tym że za dużo zostało wykonanych dlatego też konieczne będzie
jeśli chcemy skorzystać z możliwości routera standard.
Czyli rozpoznania za pomocą
frontu kontrolera oraz akcji ścieżki do danej akcji.
Moglibyśmy też Brand router przygotować swoją własną logikę czyli np.
zaimplementowane jako zależność
odpowiedni kontroler natomiast często wykorzystywany jest po prostu
router standard czyli we własnym routera skonfigurować ścieżkę do odpowiedniej
akcji i następnie router standard wykrywa gdzie dane Request ma iść.
Przejdźmy więc do edytora kodu i skąd figuruje nasz router Brand router.
Zacznijmy od przejścia do folderu s a
następnie do pliku XML tutaj za pomocą tak skonfigurować
obiekt klasy router list i dodamy do niego informacje o naszym nowym rycerze.
Tak więc zróbmy najpierw tak Tilt
w nam wskaż klasę do której chcemy dodać informację o nowym elemencie.
Następnie tak jak w przypadku
skonfigurować pewnych argumentów dla bloków mamy tutaj możliwość skorzystania z
tego argument i tutaj podpowiada nam że jest taki argument jak router list.
I właśnie to do niego będziemy musieli
skonfigurować informacje o naszym nowym rycerza na początku skąd figurują typ.
Jest to tablica i następnie do tablicy dodamy nowy element.
Który będzie identyfikatory naszego
routera nazwiemy go tak jak na prezentacji Brand router.
I oznacza to że jest on typu ale ponieważ
dodamy jeszcze konfigurację dla tego routera.
Dlatego też dodajemy kolejne zagęszczenie.
Znowu będzie słowo i do wykorzystania.
I teraz tak na początku wskazujemy klasę
która będzie reprezentowała nasz router do tego celu najpierw jeszcze dodajmy typ.
I tym razem nie będzie to obiekt tylko będzie to wartość testowa czyli string.
Pełną klasą dla naszego routera będzie duet.
Brand.
Kontroler.
Brand.
Router.
Następnie dodamy informację o tym że ten router nie jest wyłączony.
Dodamy typ.
Mulligan Następnie wskazujemy na wartość Falls czyli że wszystko jest włączone
dlatego routera i na koniec musimy też dodać informację o
kolejności który ma zostać załadowane dany router.
Nam zależy na tym aby ten router został dodany po standard.
Dlatego też najpierw dodajemy informację że będzie ona typu string.
I teraz jaką kolejność tutaj wpisać do tego celu.
Przejdziemy do dokumentacji.
Tej dokumentacji byliśmy już w rozdziale o
kontrolera natomiast co nas interesuje jest informacja o kolejności czyli właśnie
sort order sort order dla Lutra standard jest 30 a dla routera CMS 60.
Dlatego też nasz router Brand router
znajdziemy pomiędzy wartości 30 a 60 Ustawiamy więc wartość 40.
Wróćmy do edytora kodu.
Do ustawy wartość 40 dzięki temu będzie
mieć pewność że Brandt wykonał się po wieżach standard.
Przejdźmy jeszcze na chwilę do klasy router.
Zauważmy że zawiera ona atrybut router list który jest typu tablicą
i przechowuje informacje czy też elementy router interfejs
za pomocą pliku XML możemy skonfigurować jakie elementy mają trafić do klasy router
list i następnie obiekt menadżer zapewnia to że są one przekazywane do
konstruktora do zmiennej router list która następnie jest przekazywana do atrybutów.
Router jest klasy router list przejdziemy jeszcze teraz do klasy front kontroler.
W metodzie tej spać znajduje się tutaj interakcja po router jest router.
Jest to właśnie klasa w której przed chwilą byliśmy
i czujemy po elementach routera które są odpowiednio dobrane w zależności od sort
order i teraz to co mówiłem na prezentacji router wykonuje metodę
na podstawie sprawdza czy dana ścieżka URL jest przez niego rozumiana.
Jeśli zostanie zwrócona instancja akcji to taka akcja zostanie przedłużona i
następnie zostanie przerwana za pomocą instrukcji BREAK.
Wyszukiwanie kolejnego routera natomiast
jeśli ta instancja nie zostanie znaleziona to instrukcja ładuje kolejny element i
przechodzi do następnego routera który znowu sprawdza czy jest dokładnie to co
powiedzieliśmy w prezentacji nie przedłużając.
Przejdźmy do tworzenia implementacji naszego routera do folderu kontroler.
Dodajemy nową klasę.
Nazywamy ją Brand.
Router.
Konieczne będzie dodanie pasa.
A następnie.
Im prezentujemy interfejs router.
Interfejs.
Mad Men to framework UP.
Ten interfejs jak już wiemy zawiera metodę
dzięki której będziemy mogli sprawdzić czy dany adres URL odpowiada jakiejś marce.
Zanim przejdziemy jednak do implementacji
tej metody dodamy zależności które są potrzebne w tym klasie.
Zaczniemy od dodania Brand repozytorium
interfejs dzięki któremu będziemy mogli pobrać odpowiedni model.
Następnym argumentem natomiast będzie Action Factory.
Z marzeń to framework Hub dzięki któremu
stworzymy instancje klasy forward ale to za chwilę.
Dodajmy atrybuty do klasy.
Trochę to bylibyśmy.
I przejdźmy do implementacji metody MAC na początku tej metody.
Konieczne będzie wykorzystanie obiektu Request do pobrania adresu URL.
Zrobimy to za pomocą gwiazd i metody GET info.
Ta metoda zwróci nam końcówkę adresu URL czyli Slash i URL do marki.
Dlatego też my potrzebujemy tylko mieć sam URL.
Dlatego też skorzystamy z funkcji Stream.
Przekażemy request a następnie przekażemy jaki znak chcemy usunąć.
Będzie to znak Flesz.
I teraz rezultat wykonania tej funkcji piszemy do.
Słynnej uroki i to ona będzie zawierała właśnie uroki danej marki.
Oczywiście jeśli piszemy do adresu URL coś
innego to nie będzie URL kijem który jest rozumiany przez nasz moduł.
To po prostu zostanie zwrócony
pusta wartość dzięki czemu może to przejdzie do następnego wykonania czyli w
tym przypadku CMS routera a jeśli i CMS router nie znajdzie
i nie rozpozna danej ścieżki to po prostu zostanie zwrócona strona 404.
Następnie za pomocą zmiennej URL będziemy musieli sprawdzić czy w bazie
danych istnieje model o właśnie takim polu.
Dlatego też wykorzystamy Brand Store.
Konieczne będzie dodanie nowej metody nazwijmy ją Get By URL King.
Przejdziemy więc do repozytorium.
Następnie dodamy metodę GET Uri.
Parametrem będzie String woreczki.
I rezultatem Brand.
Interfejs.
Przejdziemy teraz do implementacji repozytorium.
Dodamy nową metodę.
I następnie skorzystamy trochę z metody Get It disco pijemy zawartość.
Jedyne co musimy to zmienić.
To drugi argument dla metody LOT czyli będzie to URL ki i w następnym polu dodamy
informacje jakie pole na podstawie jakiego pola ma to ma załadować dany model.
Domyślnie jest to identyfikator danego modelu.
Natomiast w tym przypadku możemy wskazać aby to było pole URL.
Lepiej będzie jeśli w sumie skorzystamy z stałej która znajduje się w Brand.
Interfejs URE ki dzięki temu
model działa na podstawie URL a odpowiedni model jeśli oczywiście takowy istnieje.
Wróćmy do naszego routera.
Przekażemy do URL ki URL ki który jest zmienną.
Następnie rezultatem będzie Brand data
sprawdził tylko dlaczego podkreśla że nie ma takiej klasy.
Nie ma takiej metody GET by URL ki
Brand repozytorium interfejs oczywiście nie dostaliśmy.
Przynajmniej ja nie dodałem.
Trzeba też zmienić to w Brand Get By.
URL KI I teraz przechodząc do routera wszystko poprawnie się wyświetla.
Następny krok sprawdzimy czy obiekt Brand
data przechowuje informacje o identyfikator że.
Jeśli ją posiada to znaczy że repozytorium
poprawnie zachowało na podstawie URL odpowiedni model.
Dzięki czemu możemy skonfigurować teraz
obiekt Request i ustawić set mobilne które wskazuje na
front czyli będzie to w tym przypadku Brand następnie set.
Kontroler.
Będzie to w tym przypadku View następnie metoda Asset Action.
Wskazujemy na akcję czyli będzie to indeks
i ostatnią metodą którą wykorzystamy będzie para do ustawienia parametru ID.
Z racji że Brand data posiada taki
identyfikator to wskazujemy najpierw na nazwę tego argumentu czyli ID.
Następnie Brand data powiedzmy Get It.
I teraz jedyne co nam zostaje to stworzyć
instalację nowego obiektu forward za pomocą Action Factory.
Dlatego też wykorzystujemy Action Factory projekt i następnie wskazujemy
nazwę klasy którą chcemy stworzyć będzie to w tym przypadku forward.
Ma to framework AB Action dodajemy jeszcze klas.
I dodajemy słowo kluczowe Ritter.
Następnie jeśli nie została znaleziona
Marka o danym url to zwracają po prostu rektor KUL dzięki
czemu to przekaże Rivas do naszego routera.
Zanim przejdziemy do przeglądarki dowiecie się.
Przejdziemy teraz z powrotem do przeglądarki.
Na stronę UP i teraz podamy URL ki czyli np.
Tesla.
Pojawiła się strona 404 to znaczy że coś poszło nie tak.
Przejdźmy teraz do edytora kodu i sprawdźmy dlaczego.
Zacznijmy od tego że w pliku XML
skonfigurować mieliśmy informacje o naszym routera.
W tym samym pliku skład wykonywaliśmy
także informacje o tym jakie trasy mają być ładowane gdy napotka dany interfejs.
Zrobione zostało to w folderze FCC czyli w
ogólnym folderze zawierającym konfigurację.
Natomiast aby zarejestrować router który ma znaleźć się w fontannie konieczne
będzie dodanie pliku XML właśnie w strefie frontu.
Dlatego też do katalogu frontem stworzymy nowy plik.
Możemy sobie skopiować zawartość tamtego.
I z tego pliku XML usunięto tagi preferencje.
Zostanie tylko informacja o rycerze
natomiast w folderze głównym w pliku XML usunie informację o numerze.
Teraz wrócimy do konsoli wyczyścić je jeszcze raz cóż.
I Przejdziemy teraz do przeglądarki otwieramy stronę.
Pojawił się kolejny problem mianowicie skorzystaliśmy ze złej metody
metoda Asset Action nie istnieje w klasie HTTP która komplementuje interfejs.
Natomiast istnieje metoda Asset Action.
Dlatego też popieramy to i przejdźmy do przeglądarki.
Tym razem powinno wszystko zadziałać poprawnie.
I dokładnie tak się stało.
Została zbudowana strona z marką Tesla
możemy sprawdzić czy jeśli zmienimy na przykład BMW znajduje się wśród nas BMW.
Poprawnie zachowała się i tak samo Volvo.
W tym rozdziale to już tyle udało nam się dodać nową tabelę do bazy danych skąd
wygrywaliśmy model resort model oraz kolekcję nauczyliśmy się korzystać z
serwis kontrakt i na samym końcu stworzyliśmy swój własny router.
W następnym rozdziale opowiemy więcej o motywach.