Magento 2 – jak stworzyć działający moduł?

21.04.2021 Mateusz Rabiega
tworzenie modułów praca z kodem

Magento słynie z tego, że jest platformą umożliwiającą rozbudowę w praktycznie nieograniczonej skali. Nowa wersja systemu, Magento 2, jeszcze bardziej rozszerza nie tylko ofertę gotowych rozwiązań i wdrożeń, ale również możliwości tworzenia swoich własnych modułów. Stworzenie całkowicie nowego modułu pozwala nam na dodanie funkcji do naszego biznesu, które nie są obecne w wersji podstawowej. Sprawia to, że sami możemy decydować, w jaki sposób chcemy budować przewagę nad konkurencją i jak chcemy zarządzać naszym systemem. Dlatego też warto wiedzieć jak stworzyć taki moduł.

Jak stworzyć własny moduł w Magento 2?

Z tego artykułu dowiesz się:

  1. Jak utworzyć pusty moduł w Magento 2?
  2. Jak stworzyć kontroler i akcję do naszego modułu?
  3. W jaki sposób podlinkować moduł w menu nawigacyjnym w Magento 2?

Krok 1: Stwórz pusty moduł w Magento 2

Po pierwsze, utwórz katalog o nazwie takiej samej jak moduł, dla którego tworzysz ów katalog. W celach szkoleniowych w tym artykule naszemu modułowi nadamy nazwę “Hello World”,  zatem nasz katalog też będzie tak się nazywał. Utwórz go w katalogu wedle swojego uznania, gdzie przechowasz go razem z innymi modułami. U nas będzie to katalog firmowy, a więc ścieżka dostępu będzie się prezentować w ten sposób: “app/code/Global4Net/”, jednak u Ciebie będzie on wyglądał inaczej. Nasz katalog jest stworzony tylko w celach tutorialowych, dlatego całość ścieżki powinna wyglądać tak:

app/code/Global4Net/HelloWorld

Krok 2: Stwórz katalog informacyjny do swojego modułu

Po drugie, w katalogu naszego modułu, stwórz kolejny katalog o nazwie “etc”. Dodaj do niego plik “module.xml“. Będzie on przechowywał informacje o nazwie modułu, jego wersji oraz zależnościach wobec innych modułów – czyli tego jak wpływa on na ich działanie, np. czy nadpisuje inne moduły, itp. Funkcja zależności jest opcjonalna i dla ułatwienia nasz moduł nie będzie jej posiadał. Według tych zasad cały nasz tutorialowy plik “module.xml” powinien wyglądać w ten sposób:

<?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="Global4Net_HelloWorld" setup_version="1.0.0"/>
</config>

Zanim przystąpimy do następnych kroków, wyjaśnijmy sobie co oznaczają poszczególne terminy.

  • “name” określa nazwę naszego modułu, bazującej na nazwach katalogów, które wcześniej utworzyliśmy,
  • “setup_version”, jak łatwo się domyśleć, określa wersję samego modułu,

Krok 3: Dodanie pliku “registration.php”

W trzecim kroku dodaj plik “registration.php” do swojego katalogu. Ścieżka prowadząca do pliku powinna wyglądać tak:

app/code/Global4Net/HelloWorld/registration.php

Dlaczego plik “registration.php” jest potrzebny? Bez niego moduł w Magento nie będzie mógł działać. Dzięki niemu platforma może go zlokalizować. Po tym jak go utworzysz, musisz przystąpić do wypełnienia jego zawartości. Powinna być ona następująca:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Global4Net_HelloWorld',
__DIR__
);

Warto podkreślić, że zawartość tego rodzaju pliku jest uniwersalna dla każdego modułu. Zmienia się jedynie nazwa modułu, który chcemy rejestrować. Nazwa ta powinna być taka sama jak nazwa modułu, którą określiliśmy w pliku “module.xml”.

Aktywacja modułu

Następny krok sprawi, że twój moduł będzie “widoczny”w Magento. Żeby tak było musisz go aktywować. Dokonasz tego wpisując komendę w głównym katalogu naszego projektu:

$ php bin/magento setup: upgrade

Teraz możesz sprawdzić, czy moduł został aktywowany. Możesz to zrobić za pomocą dwóch różnych komend. Pamiętaj, że niektóre jej części będą się różnić od tego co tu zobaczysz.

$ php bin/magento module:status Global4Net_HelloWorld

Jeśli wszystko jest w porządku, powinien Ci się wyświetlić krótki komunikat “Module is enabled”. Druga metoda prezentuje się następująco: 

$ grep Global4Net_HelloWorld app/etc/config.php

W wyniku wpisania tej komendy, powinien wyświetlić Ci się fragment pliku “config.php” w twoim projekcie: “‘Global4Net_HelloWorld’ => 1”. Oznacza to, że utworzony moduł ma status o wartości “1” – czyli jest włączony. 

Jak utworzyć kontroler i akcję do naszego modułu?

W Magento 2 kontrolery i akcje są odpowiedzialne za funkcjonowanie tworzonego przez nas modułu. To one określają, jakie operacje i funkcje będą obecne w module i na jakich zasadach będzie można ich używać. Dlatego są one równie ważne podczas tworzenia całkowicie nowego modułu w Magento 2.

Krok 1: Zarejestruj trasy adresów URL

Zanim zaczniesz tworzyć kontroler i akcję w twoim module, musisz zarejestrować w Magento trasy adresów URL. My chcemy, aby nasz moduł wyświetlał informacje w panelu administracyjnym, dlatego zarejestrujemy je dla routera “admin”. Żeby to zrobić tworzymy plik “app/code/Global4Net/HelloWorld/etc/adminhtml/routes.xml”. Następnie dodajemy do niego poniższą zawartość:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="admin">
<route id="helloworld" frontName="helloworld">
<module name="Global4Net_HelloWorld"/>
</route>
</router>
</config>

Pora wyjaśnić kolejne terminy:

  • ‘router id=”admin”‘ – określa do jakiego routera chcesz dodać dodatkową trasę URL,
  • ‘route id=”helloworld”‘ – określa ID trasy
  • ‘frontName=”helloworld”‘ – konfiguruje sposób w jaki będzie prezentowany nasz adres URL,
  • “Global4Net_HelloWorld” – to nazwa modułu, do którego ma prowadzić twoja trasa.

Pamiętaj, że u Ciebie nazwy powinny być przyporządkowane twoim projektom i modułom!

Jeśli zrobiłeś wszystko, co było trzeba i zdefiniowałeś swoją trasę, to każdy adres “magento2.localhost/admin/helloworld/*” (tutaj zakładamy, że ścieżka do panelu administracyjnego jest skonfigurowana pod /admin) będzie kierował na twój moduł i podejmował próbę odnalezienia odpowiadających mu kontrolerów i akcji. 

Krok 2: Stwórz kontroler i akcję

Teraz możesz tworzyć już kontroler lub akcję. Najpierw stwórz katalog kontrolera. W tym tutorialu będzie to “SayHello”, czyli ścieżka dla niego będzie wyglądała następująco:

app/code/Global4Net/HelloWorld/Controller/Adminhtml/SayHello

Następnie, stwórz w swoim nowo powstałym katalogu akcję “Index”.

app/code/Global4Net/HelloWorld/Controller/Adminhtml/SayHello/Index.php

Występująca w pliku akcji “Index.php” klasa “Index” będzie rozszerzała Magentową klasę akcji “\Magento\Backend\App\Action”. Jej zawartość powinna być następująca:

<?php
namespace Global4Net\HelloWorld\Controller\Adminhtml\SayHello;
use Magento\Backend\App\Action;
use Magento\Framework\App\ResponseInterface;
use Magento\Framework\Controller\ResultInterface;
/**
* Class Index
* @package Global4Net\HelloWorld\Controller\Adminhtml\Say
*/
class Index extends Action
{
/**
* @return ResponseInterface|ResultInterface|void
    */
public function execute()
{
echo "Hello!";
}

Aby Magento mogło zobaczyć nasze zmiany, takie jak ustawienie nowych tras URL, musimy jeszcze wyczyścić cache aplikacji, co możemy wykonać komendą:

$ php bin/magento cache:flush

Gdy poprawnie wpiszesz komendę, twój moduł powinien być dostępny pod adresem “http://magento2.localhost/admin/helloworld/sayHello/index”. Dostawanie się do swojego modułu poprzez wpisywanie adresu URL za każdym razem nie jest efektywną metodą. Aby usprawnić dostęp do niego w kolejnym kroku opisujemy, jak dodać odnośnik do naszego modułu w menu panelu administracyjnego. 

Jak podlinkować moduł w menu nawigacyjnym Magento 2?

Wykonałeś już konstrukcję modułu, jego kontroler i akcję. Jednak, żeby móc z niego skorzystać, musisz sprawić, aby pojawił się w twoim menu nawigacyjnym. Jak to zrobić?

Krok 1: Stwórz plik menu

Aby dodać element do menu nawigacyjnego w Magentowym panelu administracyjnym, pierwszą rzeczą jaką musisz zrobić jest utworzenie pliku w swoim module o nazwie “menu.xml”. Stwórz go w katalogu “app/code/Global4Net/HelloWorld/etc/adminhtml/. Następnie wpisz zawartość postępując zgodnie z tymi zasadami:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento Backend:etc/menu.xsd">
<menu>
<add id="Global4Net_HelloWorld::say_hello" title="Say Hello!" module="Global4Net_HelloWorld"
resource="Magento Backend::content"
parent="Magento Sales::sales"
action="helloworld/sayHello/index"/>
</menu>
</config>

Teraz wyjaśnijmy poszczególne terminy znajdujące się w powyższej zawartości:

  • ‘id=”Global4Net_HelloWorld::say_hello”‘ – określa ID twojego elementu w menu,
  • ‘title=”Say Hello!”‘ – od tego zależy jaki tytuł będzie wyświetlany w menu,
  • ‘module=”Global4Net_HelloWorld”‘ – określa moduł którego dotyczy zawartość pliku,
  • ‘resource=”Magento_Backend::content”‘ – jest to zasób do którego musimy mieć dostęp, aby nasz element menu był widoczny,
  • ‘parent=”Magento_Sales::sales”‘ – termin ten oznacza określa do jakiej zakładki nasz element menu zostanie podpięty w panelu administracyjnym Magento,
  • ‘action=”helloworld/sayHello/index”‘ – określa akcję, na którą kierować ma nasz element menu,

Krok ostatni: Wyczyść cache’a

Po dodaniu zawartości pliku i zapisaniu go w katalogu musisz wyczyścić cache swojej aplikacji. Możesz zrobić wpisując następującą komendę:

$ php bin/magento cache:flush

Gdy wyczyścisz cache aplikacje, możesz odświeżyć swój panel administracyjny. W zakładce, pod którą podpiąłeś swój element menu będzie teraz podlinkowany twój moduł. W naszym tutorialu jest to zakładka “Sprzedaż”.

ikona modułu widoczna w menu magento

Po kliknięciu w ten element wyświetli się nam strona naszego modułu.  Jeśli tak się dzieje to właśnie stworzyłeś działający moduł. Możesz teraz zacząć poszerzać funkcje swojego e-sklepu i rozbudowywać jego strukturę według swojego uznania.

Cyfrowe newsy / Bądź na bieżąco

Od początku 2022 roku wchodzimy w skład Unity Group. Teraz zapisując się do naszego newslettera, będziesz na bieżąco z informacjami całej naszej organizacji.

    Wypełniając formularz wyrażasz zgodę na wysyłkę newslettera przez Unity S.A. z siedzibą we Wrocławiu. Zgodę możesz wycofać w każdej chwili. Więcej informacji na ten temat znajdziesz w naszej polityce prywatności.

    *Wymagane

    Andrzej-kurs-programowania

    Andrzej Szylar

    Chief Executive Officer

    E-mail:

    a.szylar@global4net.com
    Magda2

    Magdalena Paczyńska-Kamienik

    HR Manager

    Aleksandra

    Aleksandra Bielawska-Clegg

    HR Business Partner

    E-mail:

    Michal

    Michał Duława

    New Business Developer

    E-mail:

    Katarzyna

    Katarzyna Zajchowska

    Marketing Partner

    E-mail: