Hello World, czyli jak stworzyć pierwszy moduł na Magento 2.1.5

Hello World!

Z artykułu dowiesz się jak w prosty sposób utworzyć swój pierwszy moduł na Magento 2.1.5. Dla przykładu utworzymy razem moduł wyświetlający blok z napisem „Hello World”, podpowiadając jak zrobić to przy użyciu akcji i kontrolera.


Przygotowanie

Do wykonania tego zadania wykorzystamy Magento w wersji 2.1.5. Przed samym rozpoczęciem prac warto rozpatrzyć dwa poniższe punkty, które mogą się również okazać pomocne w tym i innych zadaniach związanych z pracą z Magento 2.

1. Wyłączenie pamięci podręcznej

Wyłączenie pamięci podręcznej jest bardzo pomocne w procesie budowy nowego modułu. Dzięki temu nie będziemy musieli jej czyścić za każdym razem kiedy dokonamy jakiejś zmiany i będziemy chcieli obejrzeć efekty swoich prac.

Jak wyłączyć pamięć podręczną?
Admin → System → Cache Management → zaznaczenie wszystkich i wyłączenie.

2. Magento tryb „developer”

Włączenie trybu „developer” pozwala na wyświetlanie wszystkich błędów związanych z wytwarzaniem nowego kodu.

Jak włączyć tryb „developer”?
Przejdź do katalogu głównego i uruchom polecenie:

$ php bin/magento deploy:mode:set developer

Tworzymy moduł

Podstawowa konfiguracja

W Magento 2 w odróżnieniu do pierwszej wersji, wszystkie moduły umieszczamy w odpowiednich przestrzeniach nazw w katalogu „app/code” np. „app/code/Foo/Bar”, więc naszym pierwszym krokiem będzie stworzenie wymaganych plików do zarejestrowania nowego modułu:

1. Stwórz odpowiednie foldery:

– app/code/Unity
– app/code/Unity/Helloworld

Katalog Unity jest przestrzenią nazw, a Helloworld nazwą modułu.

!Ważne – jeżeli nie posiadasz katalogu code stwórz go.

2. Po stworzeniu folderów utwórz plik module.xml w katalogu app/code/Unity/Hellowrold/etc i umieść w nim kod:

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

3. By zarejestrować moduł stwórz plik registration.php w katalogu app/code/Unity/Hellowrold/ i umieść w nim kod:

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

4. Otwórz terminal i w głównym katalogu magento uruchom polecenie:

$ php bin/magento setup:upgrade

By sprawdzić czy moduł zainstalował się poprawnie przejdź w Panelu Administracyjnym do:

Admin → Stores → Configuration → Advanced → Advanced, wyszukaj moduł i sprawdź jego status.

Tworzymy kontroler

1. W pierwszej kolejności zdefiniujemy „router” tworząc plik routers.xml w katalogu app/code/Unity/Hellowrold/etc/frontend i kodem poniżej:

<?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="standard">
        <route id="helloworld" frontName="helloworld">
            <module name="Unity_Helloworld" />
        </route>
    </router>
</config>

Magento url-e są tworzone na zasadzie:<frontName>/<controler_folder_name>/<controller_class_name>

Więc w naszym przykładzie będzie on wyglądał następująco:
helloworld/index/index

2. Pora na stworzenie akcji. W Magento 2 każdy kontroler może posiadać tylko jedną akcję czyli inaczej niż w pierwszej wersji gdzie akcji mogło być wiele. Tworzymy plik Index.php w katalogu app/code/Unity/Hellowrold/Controller/Index i dodajemy poniższy kod:

<?php

namespace Unity\Helloworld\Controller\Index;

use Magento\Framework\App\Action\Context;

class Index extends \Magento\Framework\App\Action\Action
{
    protected $_resultPageFactory;
 
    public function __construct(Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory)
    {
        $this->_resultPageFactory = $resultPageFactory;
        parent::__construct($context);
    }
 
    public function execute()
    {
        $resultPage = $this->_resultPageFactory->create();
        return $resultPage;
    }
}

Tworzymy blok

W tej sekcji utworzymy prosty blok z metodą „getText”, która zwróci ciąg znaków Hello world!

1. Tworzymy plik Helloworld.php w katalogu app/code/Unity/Hellowrold/Block i dodajemy poniższy kod:

<?php
namespace Unity\Helloworld\Block;
 
class Helloworld extends \Magento\Framework\View\Element\Template
{
    public function getText()
    {
        return 'Hello world!’;
    }
}

Tworzymy pliki układu i szablonu

W Magento 2 pliki układu i szablonu są trzymane w katalogu view naszego modułu. Zadany katalog może posiadać trzy podkatalogi adminhtml, base i frontend.

• adminhtml – używamy do Panelu Adminsitracyjnego
• frontend – używamy do zmian widocznych dla klienta
• base – posiada domyślne pliki powyższych katalogów

1. W pierwszej kolejności stworzymy plik helloworld_index_index.xml w katalogu app/code/Unity/Helloworld/view/frontend/layout i dodamy do niego kod poniżej:

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" layout="1column">
    <body>
        <referenceContainer name="content">
            <block class="Unity\Helloworld\Block\Helloworld" name="helloworld" template="helloworld.phtml" />
        </referenceContainer>
    </body>
</page>

Każda strona może posiadać plik układu strony w naszym przypadku helloworld_index_index gdzie:

<frontName>_<controler_folder_name>_<controller_class_name>

2. Następnie stwórz plik szablonu helloworld.phtml w katalogu app/code/Unity/Helloworld/view/frontend/templates i dodaj do niego kod:

<h1><?php echo $this->getText(); ?></h1>

Oglądamy efekt

Pod adresem helloworld/index/index w przeglądarce powinna się nam ukazać strona jak poniżej:

Napisz do nas

Potrzebujesz więcej informacji lub jesteś zainteresowany współpracą z nami? Chętnie odpowiemy na każde pytanie. Zapraszamy do kontaktu!
Pola oznaczone * są wymagane.