Magento s\u0142ynie z tego, \u017ce jest platform\u0105 umo\u017cliwiaj\u0105c\u0105 rozbudow\u0119 w praktycznie nieograniczonej skali. Nowa wersja systemu, Magento 2, jeszcze bardziej rozszerza nie tylko ofert\u0119 gotowych rozwi\u0105za\u0144 i wdro\u017ce\u0144, ale r\u00f3wnie\u017c mo\u017cliwo\u015bci tworzenia swoich w\u0142asnych modu\u0142\u00f3w. Stworzenie ca\u0142kowicie nowego modu\u0142u pozwala nam na dodanie funkcji do naszego biznesu, kt\u00f3re nie s\u0105 obecne w wersji podstawowej. Sprawia to, \u017ce sami mo\u017cemy decydowa\u0107, w jaki spos\u00f3b chcemy budowa\u0107 przewag\u0119 nad konkurencj\u0105 i jak chcemy zarz\u0105dza\u0107 naszym systemem. Dlatego te\u017c warto wiedzie\u0107 jak stworzy\u0107 taki modu\u0142.<\/p>\n
Z tego artyku\u0142u dowiesz si\u0119:<\/p>\n
Po pierwsze, <\/span>utw\u00f3rz katalog o nazwie takiej samej jak modu\u0142<\/b>, dla kt\u00f3rego tworzysz \u00f3w katalog. W celach szkoleniowych w tym artykule naszemu modu\u0142owi nadamy nazw\u0119 “Hello World”,\u00a0 zatem nasz katalog te\u017c b\u0119dzie tak si\u0119 nazywa\u0142. <\/span>Utw\u00f3rz go w katalogu wedle swojego uznania, gdzie przechowasz go razem z innymi modu\u0142ami<\/b>. U nas b\u0119dzie to katalog firmowy, a wi\u0119c \u015bcie\u017cka dost\u0119pu b\u0119dzie si\u0119 prezentowa\u0107 w ten spos\u00f3b: “app\/code\/Global4Net\/”, jednak u Ciebie b\u0119dzie on wygl\u0105da\u0142 inaczej. Nasz katalog jest stworzony tylko w celach tutorialowych, dlatego ca\u0142o\u015b\u0107 \u015bcie\u017cki powinna wygl\u0105da\u0107 tak:<\/span><\/p>\n app\/code\/Global4Net\/HelloWorld<\/p>\n<\/blockquote>\n Po drugie, w katalogu naszego modu\u0142u, <\/span>stw\u00f3rz kolejny katalog o nazwie “etc”<\/b>. Dodaj do niego plik “<\/span>module.xml<\/b>“. B\u0119dzie on przechowywa\u0142 informacje o nazwie modu\u0142u, jego wersji oraz zale\u017cno\u015bciach wobec innych modu\u0142\u00f3w \u2013 czyli tego jak wp\u0142ywa on na ich dzia\u0142anie, np. czy nadpisuje inne modu\u0142y, itp. Funkcja zale\u017cno\u015bci jest opcjonalna i dla u\u0142atwienia nasz modu\u0142 nie b\u0119dzie jej posiada\u0142. Wed\u0142ug tych zasad ca\u0142y nasz tutorialowy plik “module.xml” powinien wygl\u0105da\u0107 w ten spos\u00f3b:<\/span><\/p>\n Zanim przyst\u0105pimy do nast\u0119pnych krok\u00f3w, wyja\u015bnijmy sobie co oznaczaj\u0105 poszczeg\u00f3lne terminy.<\/p>\n W trzecim kroku dodaj plik “registration.php” do swojego katalogu<\/strong>. \u015acie\u017cka prowadz\u0105ca do pliku powinna wygl\u0105da\u0107 tak:<\/p>\n app\/code\/Global4Net\/HelloWorld\/registration.php<\/p><\/blockquote>\n Dlaczego plik “registration.php” jest potrzebny? Bez niego modu\u0142 w Magento<\/a> nie b\u0119dzie m\u00f3g\u0142 dzia\u0142a\u0107. Dzi\u0119ki niemu platforma mo\u017ce go zlokalizowa\u0107. Po tym jak go utworzysz, musisz przyst\u0105pi\u0107 do wype\u0142nienia jego zawarto\u015bci. Powinna by\u0107 ona nast\u0119puj\u0105ca:<\/p>\n Warto podkre\u015bli\u0107, \u017ce <\/span>zawarto\u015b\u0107 tego rodzaju pliku jest uniwersalna dla ka\u017cdego modu\u0142u. Zmienia si\u0119 jedynie nazwa modu\u0142u, kt\u00f3ry chcemy rejestrowa\u0107<\/b>. Nazwa ta powinna by\u0107 taka sama jak nazwa modu\u0142u, kt\u00f3r\u0105 okre\u015blili\u015bmy w pliku “module.xml”.<\/span><\/p>\n Nast\u0119pny krok sprawi, \u017ce tw\u00f3j modu\u0142 b\u0119dzie “widoczny”w Magento. \u017beby tak by\u0142o <\/span>musisz go aktywowa\u0107<\/b>. Dokonasz tego wpisuj\u0105c komend\u0119 w g\u0142\u00f3wnym katalogu naszego projektu:<\/span><\/p>\n Teraz mo\u017cesz sprawdzi\u0107, czy modu\u0142 zosta\u0142 aktywowany<\/b>. Mo\u017cesz to zrobi\u0107 za pomoc\u0105 dw\u00f3ch r\u00f3\u017cnych komend. Pami\u0119taj, \u017ce niekt\u00f3re jej cz\u0119\u015bci b\u0119d\u0105 si\u0119 r\u00f3\u017cni\u0107 od tego co tu zobaczysz.<\/span><\/p>\n Je\u015bli wszystko jest w porz\u0105dku, powinien Ci si\u0119 wy\u015bwietli\u0107 kr\u00f3tki komunikat “Module is enabled”. Druga metoda prezentuje si\u0119 nast\u0119puj\u0105co:\u00a0<\/span><\/p>\n W wyniku wpisania tej komendy, powinien wy\u015bwietli\u0107 Ci si\u0119 fragment pliku “config.php” w twoim projekcie: “‘Global4Net_HelloWorld’ => 1”. Oznacza to, \u017ce utworzony modu\u0142 ma status o warto\u015bci “1” \u2013 czyli jest w\u0142\u0105czony.\u00a0<\/span><\/p>\n W Magento 2 kontrolery i akcje s\u0105 odpowiedzialne za funkcjonowanie tworzonego przez nas modu\u0142u. To one okre\u015blaj\u0105, jakie operacje i funkcje b\u0119d\u0105 obecne w module i na jakich zasadach b\u0119dzie mo\u017cna ich u\u017cywa\u0107. Dlatego s\u0105 one r\u00f3wnie wa\u017cne podczas tworzenia ca\u0142kowicie nowego modu\u0142u w Magento 2.<\/span><\/p>\n Zanim zaczniesz tworzy\u0107 kontroler i akcj\u0119 w twoim module, <\/span>musisz zarejestrowa\u0107 w Magento trasy adres\u00f3w URL<\/b>. My chcemy, aby nasz modu\u0142 wy\u015bwietla\u0142 informacje w panelu administracyjnym, dlatego zarejestrujemy je dla routera “admin”. \u017beby to zrobi\u0107 tworzymy plik “app\/code\/Global4Net\/HelloWorld\/etc\/adminhtml\/routes.xml”. Nast\u0119pnie dodajemy do niego poni\u017csz\u0105 zawarto\u015b\u0107:<\/span><\/p>\n Pora wyja\u015bni\u0107 kolejne terminy:<\/p>\n Pami\u0119taj, \u017ce u Ciebie nazwy powinny by\u0107 przyporz\u0105dkowane twoim projektom i modu\u0142om!<\/strong><\/p>\n Je\u015bli zrobi\u0142e\u015b wszystko, co by\u0142o trzeba i zdefiniowa\u0142e\u015b swoj\u0105 tras\u0119, to ka\u017cdy adres “magento2.localhost\/admin\/helloworld\/*” (tutaj zak\u0142adamy, \u017ce \u015bcie\u017cka do panelu administracyjnego jest skonfigurowana pod \/admin) b\u0119dzie kierowa\u0142 na tw\u00f3j modu\u0142 i podejmowa\u0142 pr\u00f3b\u0119 odnalezienia odpowiadaj\u0105cych mu kontroler\u00f3w i akcji.\u00a0<\/span><\/p>\n Teraz mo\u017cesz tworzy\u0107 ju\u017c kontroler lub akcj\u0119. Najpierw stw\u00f3rz katalog kontrolera.<\/strong> W tym tutorialu b\u0119dzie to “SayHello”, czyli \u015bcie\u017cka dla niego b\u0119dzie wygl\u0105da\u0142a nast\u0119puj\u0105co:<\/p>\n app\/code\/Global4Net\/HelloWorld\/Controller\/Adminhtml\/SayHello<\/p><\/blockquote>\n Nast\u0119pnie, stw\u00f3rz w swoim nowo powsta\u0142ym katalogu akcj\u0119 “Index”<\/strong>.<\/p>\n app\/code\/Global4Net\/HelloWorld\/Controller\/Adminhtml\/SayHello\/Index.php<\/p><\/blockquote>\n Wyst\u0119puj\u0105ca w pliku akcji “Index.php” klasa “Index” b\u0119dzie rozszerza\u0142a Magentow\u0105 klas\u0119 akcji “\\Magento\\Backend\\App\\Action”. Jej zawarto\u015b\u0107 powinna by\u0107 nast\u0119puj\u0105ca:<\/p>\n\n
Krok 2: Stw\u00f3rz katalog informacyjny do swojego modu\u0142u<\/h3>\n
<?xml version=\"1.0\"?>
\n<config xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"urn:magento:framework:Module\/etc\/module.xsd\">
\n<module name=\"Global4Net_HelloWorld\" setup_version=\"1.0.0\"\/>
\n<\/config><\/code><\/p>\n\n
Krok 3: Dodanie pliku “registration.php”<\/h3>\n
<?php
\n\\Magento\\Framework\\Component\\ComponentRegistrar::register(
\n\\Magento\\Framework\\Component\\ComponentRegistrar::MODULE,
\n'Global4Net_HelloWorld',
\n__DIR__
\n);
\n<\/code><\/p>\nAktywacja modu\u0142u<\/h4>\n
$ php bin\/magento setup: upgrade<\/code><\/p>\n
$ php bin\/magento module:status Global4Net_HelloWorld<\/code><\/p>\n
$ grep Global4Net_HelloWorld app\/etc\/config.php<\/code><\/p>\n
Jak utworzy\u0107 kontroler i akcj\u0119 do naszego modu\u0142u?<\/h2>\n
Krok 1: Zarejestruj trasy adres\u00f3w URL<\/h3>\n
<?xml version=\"1.0\"?>
\n<config xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"
\nxsi:noNamespaceSchemaLocation=\"urn:magento:framework:App\/etc\/routes.xsd\">
\n<router id=\"admin\">
\n<route id=\"helloworld\" frontName=\"helloworld\">
\n<module name=\"Global4Net_HelloWorld\"\/>
\n<\/route>
\n<\/router>
\n<\/config><\/code><\/p>\n\n
Krok 2: Stw\u00f3rz kontroler i akcj\u0119<\/h3>\n
<?php
\nnamespace Global4Net\\HelloWorld\\Controller\\Adminhtml\\SayHello;
\nuse Magento\\Backend\\App\\Action;
\nuse Magento\\Framework\\App\\ResponseInterface;
\nuse Magento\\Framework\\Controller\\ResultInterface;
\n\/**<\/em>
\n* Class Index
\n* @package<\/strong> Global4Net\\HelloWorld\\Controller\\Adminhtml\\Say
\n<\/em>*\/
\nclass Index extends Action
\n{
\n\/**
\n* @return <\/strong>ResponseInterface<\/em>|ResultInterface<\/em>|void
\n<\/em>\u00a0 \u00a0 *\/
\npublic function execute()
\n{
\necho \"Hello!\";
\n}<\/code><\/p>\n