Jak stworzyć niestandardowy moduł w Magento 2?

Opublikowany: 2018-03-19

Co to jest moduł Magento?

Jak wiecie, moduł jest katalogiem zawierającym bloki , kontrolery , modele , helper itp. – które są związane z konkretną funkcją biznesową.

Zgodnie z zaangażowaniem Magento w optymalną modułowość, moduł zawiera jedną funkcję i ma minimalne zależności od innych modułów.

Moduły udostępniają funkcje biznesowe wraz z logiką wspierającą, a motywy silnie wpływają na wrażenia użytkownika i wygląd witryny sklepowej.

Przeznaczenie modułu

Celem każdego modułu jest dostarczenie określonych cech produktu poprzez wdrożenie nowej funkcjonalności lub rozszerzenie funkcjonalności innych modułów. Każdy moduł został zaprojektowany tak, aby funkcjonował niezależnie, więc włączenie lub wyłączenie określonego modułu zazwyczaj nie wpływa na funkcjonalność innych modułów.

W Magento 2 moduły będą dostępne w katalogu app/code instalacji Magento w następującym formacie: app/code/<Vendor>/<ModuleName>. Teraz wykonamy te kroki, aby stworzyć prosty moduł, który będzie działał na Magento 2.

Utwórz moduł Magento 2

  1. Utwórz folder modułu.
  2. Utwórz plik etc/module.xml.
  3. Utwórz plik registration.php.
  4. Uruchom skrypt bin/magento setup:upgrade, aby zainstalować nowy moduł.
  5. Sprawdź, czy moduł działa.

Przeanalizujmy szczegółowo każdy z tych kroków.

Krok 1: Utwórz folder modułu

  • Istnieją dwie możliwe lokalizacje modułów w Magento 2: folder app/code i folder dostawcy

W zależności od tego, jak zainstalowano Magento 2, moduły podstawowe mogą znajdować się w folderach vendor/magento/magento-* (w przypadku instalacji kompozytora) lub w folderze app/code/Magento/ (w przypadku klonowania github).

  • Którą z tych lokalizacji powinieneś wybrać dla swojego nowego modułu?

Jeśli budujesz moduł dla konkretnego projektu, najlepiej wybrać folder app/code i zatwierdzić do repozytorium projektu.

Jeśli budujesz rozszerzenie do ponownego użycia, lepiej jest użyć kompozytora do jego utworzenia i umieścić swój moduł w folderze vendor/<TWÓJ_DOSTAWCA>/module-coś.

Każda nazwa modułu w Magento 2 składa się z dwóch części – dostawcy i samego modułu, więc musisz zdefiniować nazwę dostawcy i modułu. Na potrzeby tego przykładu nazwijmy dostawcę „Nauka”, a moduł „Pierwsza jednostka”.

Utwórzmy folder app/code/Learning i wewnątrz tego folderu umieśćmy inny folder: FirstUnit. Jeśli używasz wiersza poleceń, kod będzie wyglądał następująco:

  1. cd do folderu głównego
  2. aplikacja/kod/nauka mkdir
  3. mkdirapp/kod/Nauka/Pierwsza jednostka

Upewnij się, że masz uprawnienia do tworzenia plików i folderów w swojej instalacji.

Krok 2: Utwórz plik etc/module.xml

Ten plik jest wymagany do istnienia modułu i zawiera następujące informacje:

  • Nazwa modułu
  • Wersja modułu
  • Zależności

Nazwa modułu jest zdefiniowana przez foldery, które właśnie utworzyliśmy, ponieważ w Magento 2 nazwy klas muszą być zgodne ze strukturą folderów. Ponieważ utworzyliśmy foldery Learning/FirstUnit, nazwa naszego modułu będzie brzmiała Learning_FirstUnit, a wszystkie klasy należące do tego modułu będą zaczynały się od Learning\FirstUnit – na przykład: Learning\FirstUnit\Observer\Test.

Wersja modułu wskazuje bieżącą wersję schematu i danych bazy danych i jest używana podczas aktualizacji. Załóżmy na przykład, że zdecydujesz się zmodyfikować schemat tabeli w swoim module. Skąd możesz mieć pewność, że ta zmiana nastąpi we wszystkich instancjach, w których wdrożony jest kod? Zmiana bazy danych przez bezpośrednie zapytania SQL nie zadziała. Zamiast tego Magento 2 posiada skrypty instalacji i aktualizacji w każdym module (opcjonalnie). Skrypty te zawierają polecenia służące do modyfikowania schematu lub danych bazy danych. Aby śledzić, czy wykonać skrypt, czy nie, Magento 2 używa wersji modułów. Za każdym razem, gdy wprowadzasz nową zmianę w bazie danych, wdrażasz nową wersję modułu i zmieniasz odpowiadający mu module.xml. Magento zapisuje aktualną wersję modułu w bazie danych, a jeśli wartość bazy danych i ta w module.xml nie pasują do siebie, wykona kod aktualizacji.

Zależności. Jeśli jeden moduł jest zależny od drugiego, plik module.xml będzie miał specjalną deklarację definiującą listę modułów, od których zależy bieżący moduł. W tym przykładzie uzależnimy nasz moduł od Magento_Catalog.

Używając następującego kodu wiersza polecenia, utwórz folder app/code/Learning/FirstUnit/etc :

 mkdir aplikacja/kod/nauka/pierwsza jednostka/itd

Następnie utwórz plik XML o następującej 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="Learning_FirstUnit" setup_version="0.0.1">
        <sekwencja>
            <nazwa modułu="Magento_Catalog" />
        </sequence>
    </moduł>
</config>

Zauważ, że w pliku XML określiliśmy:

  • Nazwa modułu: Learning_FirstUnit (na podstawie utworzonych przez nas folderów)
  • Wersja: 0.0.1 (pierwotna wersja naszego modułu)
  • Zależność: Magento_Catalog. Możemy mieć wiele zależności. W tym przypadku umieścilibyśmy węzły <nazwa modułu=”..” /> pod węzłem sekwencji.

Krok 3: Utwórz plik registration.php

Każdy moduł musi mieć ten plik, który mówi Magento, jak zlokalizować moduł. Kontynuując nasz przykład, utwórz plik app/code/Learning/FirstUnit/registration.php . Następnie umieść w nim następującą treść:

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

Registration.php to ustandaryzowany plik, który ma ten sam wzorzec dla wszystkich modułów.

Jedyną rzeczą, która się zmienia, jest nazwa modułu, która w naszym przypadku to Learning_FirstUnit .

Krok 4: Uruchom polecenie „setup:upgrade”

Uruchomienie tego polecenia aktywuje nowy moduł, powiadamiając Magento o jego obecności.

 Konfiguracja bin/magento php: aktualizacja

Powinno to odzwierciedlać dużą ilość danych wyjściowych, z których jeden wiersz powinien być Learning_FirstUnit . Sprawdź, czy ten wiersz kodu tam jest.

Krok 5: Sprawdź, czy nowy moduł jest aktywny

Do tej pory nie dodaliśmy żadnego przydatnego kodu do naszego modułu – nadal jest pusty (a więc niewidoczny). Aby sprawdzić, czy został rozpoznany, sprawdź plik app/etc/config.php . Zawiera listę automatycznie generowanych modułów, które są aktywne.

Nigdy nie zmieniaj tej listy ręcznie!

 cat app/etc/env.php | grep Learning_FirstUnit

Stosując te kroki, możesz z powodzeniem stworzyć nowy moduł w Magento 2.


Czytaj więcej:
Jak wdrożyć zawartość statyczną w Magento 2?