Tworzenie nowego modułu w Magento 2
W tym wpisie pokażę jak utworzyć i dodać najprostszy moduł w Magento 2.
Zanim zaczniesz
Dobrze jest wyłączyć cache i ustawić tryb działania projektu na developer. W tym celu użyjemy konsoli. Z wiersza poleceń wchodzimy do głównego katalogu naszego projektu.
Aby ustawić tryb developer, należy wpisać:
|
1 |
php bin/magento deploy:mode:set developer |
Inny napotkanym przeze mnie problemem był brak niektórych obrazków, skryptów czy css-ów. Problem ten możemy łatwo rozwiązać, wpisując poniższą komendę:
|
1 |
php bin/magento setup:static-content:deploy |
Powyższą komendę będziemy używać często, pracując nad modyfikacją skryptów czy stylowania. Zapamiętaj: w trybie developer, jeśli chcemy ręcznie wymusić wygenerowanie takich plików, potrzebujemy wykonać powyższe polecenie z parametrem -f.
Podczas pracy, będziemy potrzebowali czyścić cache z Magento. Możemy to zrobić za pomocą komendy:
|
1 |
php bin/magento cache:clean |
W celu całkowitego wyłączenia cache’owania należy wpisać poniższą komendę:
|
1 |
php bin/magento cache:disable |
W odpowiedzi konsola wypisze nam informację o wyłączonych rodzajach cache:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Changed cache status: config: 1 -> 0 layout: 1 -> 0 block_html: 1 -> 0 collections: 1 -> 0 reflection: 1 -> 0 db_ddl: 1 -> 0 eav: 1 -> 0 customer_notification: 1 -> 0 full_page: 1 -> 0 config_integration: 1 -> 0 config_integration_api: 1 -> 0 translate: 1 -> 0 config_webservice: 1 -> 0 |
Więcej o zarządzaniu cache’em można przeczytać w dokumentacji: Manage the cache. Sam cache możemy również wyłączyć w panelu admina. W tym celu wchodzimy w panelu admina do System ➤ Cache Management i zaznaczamy dany rodzaj cache’u, który chcemy wyłączyć.
Podstawowa struktura modułu
W Magento 1 mieliśmy code pool podzielony na trzy części: community, core i local, w których znajdowały się moduły. W Magento 2 tego nie ma. Swoje moduły tworzymy w katalogu app/code, gdzie nazwy poszczególnych katalogów to przestrzenie nazw, a one zawierają już katalog z konkretną nazwą modułu. Dla przykładu stwórzmy moduł Anna_FirstModule. Stwórzmy więc dla niego katalogi:
|
1 2 |
app\code\Anna\ app\code\Anna\FirstModule |
Na początek, w głównym katalogu naszego modułu stwórzmy plik registration.php, w którym rejestrujemy nazwę naszego modułu:
|
1 2 3 4 5 6 7 8 |
<?php use Magento\Framework\Component\ComponentRegistrar; ComponentRegistrar::register( ComponentRegistrar::MODULE, 'Anna_FirstModule', __DIR__); |
Kolejnym plikiem, który jest niezbędny do stworzenia modułu, jest dodanie pliku module.xml, który tworzymy w podkatalogu etc.
Definicja dla Magento wersji starszej niż 2.3:
|
1 2 3 4 5 |
<?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="Anna_FirstModule" setup_version="0.0.1"/> </config> |
W elemencie <config> mamy element <module>, dla którego atrybut name przyjmuje wartość według wzoru: NazwaProducenta_NazwaModułu. Wymagane jest również określenie atrybutu setup_version.
Dla nowszych wersji Magento:
|
1 2 3 4 5 |
<?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="Anna_FirstModule"/> </config> |
W elemencie <config> mamy element <module>, dla którego atrybut name przyjmuje wartość według wzoru: NazwaProducenta_NazwaModułu. Nie używamy tu atrybutu setup_version.
Dodatkowo, przy bardziej zaawansowanym module możemy stworzyć plik composer.json (dokumentacja schematu tutaj):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "name": "anna/module-firstmodule", "description": "N/A", "require": { "php": "~5.6.0|7.0.2|~7.0.9", "magento/framework": "100.1.*" }, "type": "magento2-module", "version": "101.0.1", "autoload": { "files": [ "registration.php" ], "psr-4": { "Anna\\FirstModule\\": "" } } } |
Po więcej informacji odsyłam do artykułu: Creating a magento 2 composer module.
Końcowa struktura utworzonego modułu, który na razie nic nie robi, wygląda następująco:

Rejestracja modułu
Aby zarejestrować nowy moduł, wystarczy wpisać w konsoli:
|
1 |
php bin/magento setup:upgrade |
Następnie czyścimy cache i gotowe.
|
1 |
php bin/magento cache:clean |
Poniższa komenda pokaże nam listę dostępnych modułów:
|
1 |
php bin/magento module:status |
Jeśli wszystko jest w porządku, nasz moduł znajdzie się na liście. Kiedy moduł jest zarejestrowany, w pliku app/etc/config.php zobaczymy, że został on dodany do listy.
W przypadku, gdy w pliku module.xml mamy zdefiniowany atrybut setup_version dla węzła <module> — to zostaje również dodany wpis do bazy danych w tabeli setup_module.
Magento 2: dynamiczna inicjalizacja komponentu UI - Web Programming
2 grudnia 2023 @ 04:49
[…] początek potrzebujemy stworzyć nowy moduł. Poniżej przedstawiam konfigurację dla modułu […]
Pluginy w Magento 2 - Web Programming
16 lutego 2024 @ 02:30
[…] nowy moduł, […]