ul. Strzegomska 2-4
53-611 Wrocław
NIP 8992786490
KRS 0000608120
REGON 363987723
Global4Net Sp. z o. o.
+48 71 358 41 00
© 2009 – Global4Net. All Rights Reserved.
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ł.
Z tego artykułu dowiesz się:
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
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.
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”.
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.
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.
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:
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.
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.
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ć?
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:
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ż”.
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.
Napisz do nas