Magento udostępnia możliwość tworzenia statycznych podstron z poziomu CMS’a, aczkolwiek może się zdarzyć, że będziemy potrzebowali dodać niestandardową stronę z własnym kontrolerem, blokiem i routingiem. Zakładam, że znasz sposób tworzenia modułów w Magento 2. Jeśli nie to przeczytaj najpierw artykuł: „TWORZENIE NOWEGO MODUŁU”.
1. MODUŁ
Przygotuj pusty moduł Test_Example z poprzedniego rozdziału lub stwórz własny moduł.
1 |
/app/code/Test/Example/ |
2. KONTROLER
Utwórz plik Index.php (/app/code/Test/Example/Controller/Index/Index.php).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php // /app/code/Test/Example/Controller/Index/Index.php namespace Test\Example\Controller\Index; class Index extends \Magento\Framework\App\Action\Action { /** * @var \Magento\Framework\View\Result\PageFactory */ protected $resultPageFactory; /** * @param \Magento\Framework\App\Action\Context $context * @param \Magento\Framework\View\Result\PageFactory resultPageFactory */ public function __construct( \Magento\Framework\App\Action\Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory ){ $this->resultPageFactory = $resultPageFactory; parent::__construct($context); } /** * @return void */ public function execute() { return $this->resultPageFactory->create(); } } ?> |
Zawartość kontrolera jest standardowa, tak więc skopiuj ją bez wyrzutów sumienia 😉 Do konstruktora dołączamy klasę PageFactory, która odpowiada za renderowanie widoku. Metoda execute() wykonuje to działanie.
3. LAYOUT
Utwórz plik example_index_index.xml (/app/code/Test/Example/view/frontend/layout/example_index_index.xml):
1 2 3 4 5 6 7 8 9 10 |
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="content"> <block class="Test\Example\Block\Example" name="test_example" template="Test_Example::page.phtml" /> </referenceContainer> </body> </page> |
W layoucie definiujemy blok (Test\Example\Block\Example) oraz szablon widoku (Test_Example::page.phtml). Plik szablonu page.phtml utworzony zostanie w kroku 5.
4. BLOK
W poprzednim kroku w layoucie zdefiniowaliśmy blok o nazwie Example, w którym zawarte będą wszelkie metody rozszerzające szablon widoku.
Utwórz więc plik Example.php (/app/code/Test/Example/Block/Example.php):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php // /app/code/Test/Example/Block/Example.php namespace Test\Example\Block; class Example extends \Magento\Framework\View\Element\Template { public function _prepareLayout() { return parent::_prepareLayout(); } } |
Blok Example rozszerza (extends) metody zawarte w klasie Template (\Magento\Framework\View\Element\Template). Do tego bloku możesz dodawać swoje metody.
5. SZABLON WIDOKU
Utwórz plik page.phtml (/app/code/Test/Example/view/frontend/templates/page.phtml):
1 |
<p>Under construction...</p> |
6. ROUTING
Utwórz plik routes.xml (/app/code/Test/Example/etc/frontend/routes.xml):
1 2 3 4 5 6 7 8 |
<?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="example" frontName="example"> <module name="Test_Example" /> </route> </router> </config> |
W pliku tym wskazujemy moduł, którego ma dotyczyć trasowanie (module name=”Test_Example„). W znaczniku <route> podajemy nazwę example (id=”example” frontName=”example”), która pojawi się w adresie Url, według wzoru:
https://your_domain.com/frontName/Controller/Action
czyli w naszym przykładzie adres Url będzie taki:
https://your_domain.com/example/index/index
Oczywiście strona wyświetli się poprawnie również pod takim adresem: https://your_domain.com/example/ – dlatego, że Magento automatycznie dopasowuje / szuka ścieżek routingu w modułach, stronach itd.
Do następnego! –>