Nasz pierwszy moduł i kontroler w Magento 2
MAGENTO 2 TRYB DEWELOPERSKI
Aby umieścić Magento w trybie deweloperskim, konieczne jest wywołanie poniższej komendy:
php bin/magento deploy:mode:set developer
Dlaczego tego potrzebujemy? Pokazuje nam to wszystkie błędy, blokuje przechowywanie plików statycznych w pamięci, odblokowuje automatyczną kompilacje kodu oraz wzmacnia debugowanie. Logi systemowe znajdują się w var/reports. Jeżeli skończyliśmy, możemy ustawić Magento w trybie produkcyjnym poprzez:
php bin/magento deploy:mode:set production
Jest on szybszy niż tryb deweloperski. Wyjątki nie są wyświetlane dla użytkowników, a pliki statyczne zostają pobrane z folderu pub/static
MAGENTO 2 BLOKOWANIE PAMIĘCI PODRĘCZNEJ
W celu oszczędzenia czasu, możemy zablokować generowanie pamięci cache poprzez przejście do:
Admin -> System -> Cache Management
Wybieramy wszystkie możliwości i ustawiamy opcję „zablokuj” („disable”). Jeżeli tego nie zrobimy, będziemy zmuszeni czyścić pamięć cache za każdym razem, kiedy coś zmodyfikujemy. W razie potrzeby pamięć podręczną można wyczyścić także przy użyciu:
php bin/magento cache:clean
php bin/magento cache:flush
KONFIGURACJA MODUŁU
W pierwszym kroku musimy utworzyć plik module.xml w app/code/CleverCode/HelloWorld z zawartością:
<?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="CleverCode_HelloWorld" setup_version="1.0.0"/> </config>
W atrybucie „name” widzimy przestrzeń nazw oraz nazwę modułu, które są zgodne ze strukturą folderów. Naszemu modułowi nadamy określenie HelloWorld. Zostanie on utworzony w wersji 1.0.0
W następnym kroku tworzymy plik registration.php wapp/code/CleverCode/HelloWorld z zawartością:
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'CleverCode_HelloWorld', __DIR__ );
Określa on ścieżkę do folderu, w którym znajduje się nasz moduł. Wymagane jest powtórzenie tego kroku dla każdego nowego elementu. Po wykonaniu całego procesu moduł jest gotowy, jednak należy go odblokować. Status możemy sprawdzić poniższą komendą:
php bin/magento module:status
Jeżeli zobaczymy: List of disabled modules: CleverCode_HelloWorld będzie to sygnał, że wszystko jest w porządku. Aby odblokować moduł, należy wpisać:
php bin/magento module:enable CleverCode_HelloWorld
Inna możliwość polega na modyfikacji pliku: app/etc/config.php i dodaniu ‚CleverCode_HelloWorld’ =>; 1, jednak pierwsza opcja jest bardziej praktyczna.
Kolejno w celu zaktualizowania systemu wpisujemy:
php bin/magento setup:upgrade
Routing
Aby do naszego modułu dodać routing, tworzymy plik routes.xml wapp/code/CleverCode/HelloWorld/etc/frontend z poniższą zawartością:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <router id="standard"> <route id="hello" frontName="hello"> <module name="CleverCode_HelloWorld"/> </route> </router> </config>
Po co nam routing? Atrybut o nazwie frontName będzie użyty w adresie URL. Za każdym razem podczas wykorzystywania akcji z naszego modułu, zostanie wywołany frontName
KONTROLER
TAby wyświetlić dane przy użyciu frontName, niezbędne jest utworzenie kontrolera. Na początku stwórzmy plik Index.php w app/code/CleverCode/HelloWorld/Controller/World o treści:
<?php namespace CleverCode\HelloWorld\Controller; class Index extends \Magento\Framework\App\Action\Action { public function __construct( \Magento\Framework\App\Action\Context $context) { return parent::__construct($context); } public function execute() { echo 'Hello World'; } }
Umieszczamy go w folderze Controller modułu. Zawiera jedyną wywoływalną metodę execute() W przeciwieństwie do wersji 1, w Magento 2 nie jest możliwe utworzenie większej ilości wywoływalnych akcji. Celem uruchomienia kontrolera należy wpisać:
http://your-website/hello/world
lub
http://your-website/hello/world/index
Co to oznacza? Dopasowujemy akcję kontrolera do routingu. Po wpisaniu odpowiedniego URL wywołamy metodę execute() Wszystkie frontendowe kontrolery dziedziczą z klasy \Magento\Framework\App\Action\Action Posiada ona metodę dispatch, która sprawdza, czy żądanie jest wysłane, metodę redirect przekierowująca do określonego adresu URL oraz kilka innych użytecznych akcji. Jeżeli wyświetlają się błędy, należy wpisać:
php bin/magento setup:upgrade
Fatal error: Uncaught Error: Call to undefined function fb_like_button() in /home/marcolx/domains/clevercode.pl/public_html/wp-content/themes/clevercode/template-parts/content.php:25 Stack trace: #0 /home/marcolx/domains/clevercode.pl/public_html/wp-includes/template.php(690): require() #1 /home/marcolx/domains/clevercode.pl/public_html/wp-includes/template.php(647): load_template('/home/marcolx/d...', false) #2 /home/marcolx/domains/clevercode.pl/public_html/wp-includes/general-template.php(167): locate_template(Array, true, false) #3 /home/marcolx/domains/clevercode.pl/public_html/wp-content/themes/clevercode/single.php(5): get_template_part('template-parts/...', '') #4 /home/marcolx/domains/clevercode.pl/public_html/wp-includes/template-loader.php(74): include('/home/marcolx/d...') #5 /home/marcolx/domains/clevercode.pl/public_html/wp-blog-header.php(19): require_once('/home/marcolx/d...') #6 /home/marcolx/domains/clevercode.pl/public_html/index.php(17): require('/home/marcolx/d...') #7 {main} thrown in /home/marcolx/domains/clevercode.pl/public_html/wp-content/themes/clevercode/template-parts/content.php on line 25