Оскільки ви вже знаєте, як створити перший контролер у Magento 2 та як відображати текст "Hello World" на вашій власній сторінці, у цій статті ми покажемо вам, як відобразити його в новому блоці.
1. Додайте новий блок класу PHP.
Створіть цей файл:
app/code/<VendorName>/<ModuleName>/Block/SomeName.php
та додайте до нього наступний код:
<?php
namespace VendorName\ModuleName\Block;
class SomeName extends \Magento\Framework\View\Element\Template
{
public function getWelcomeText()
{
return 'Hello World';
}
}
де
SomeName – це випадкова назва у форматі CamelCase .
\Magento\Framework\View\Element\Template – клас, від якого ви успадковуєте власний блок, що взаємодіє з шаблоном.
getWelcomeText — публічний метод, який ми створили для повернення тексту "Hello World". Ви можете створити для нього назву самостійно.
2. Додайте файл шаблону (файл шаблону .phtml)
Створіть цей файл:
app/code/<VendorName>/<ModuleName>/view/frontend/templates/some-name.phtml
та додайте туди наступний код:
<h1><?php echo $block->escapeHtml($block->getWelcomeText()) ?></h1>
З міркувань безпеки пропустіть вивід тексту через метод escapeHtml . Це позбавить сайт від HTML-ін'єкцій.
3. Об'єднайте блок класу PHP та файл шаблону у файлі макета.
Створіть цей файл:
app/code/<VendorName>/<ModuleName>/view/frontend/layout/<rute_id>_<controller_name>_<action_name>.xml
та додайте до нього наступний код:
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="VendorName\ModuleName\Block\SomeName" name="some.block.name" template="VendorName_ModuleName::some-name.phtml" />
</referenceContainer>
</body>
</page>
де
layout — атрибут, що визначає тип макета сторінки. За замовчуванням доступні такі типи: 1column, 2columns-left, 2columns-right, 3columns, empty. Експериментуйте з ними — встановлюйте різні типи макетів та порівнюйте їх.
content — назва контейнера, де буде розміщено блок.
Пам’ятайте, що після зміни та збереження файлу макета слід очистити кеш макетів, якщо він увімкнено. Виконайте команду CLI:
php bin/magento cache:clean layout
4. Викличте завантаження та рендеринг макета в контролері.
Відредагуйте цей файл:
app/code/<VendorName>/<ModuleName>/Controller/<ControllerName>/<ActionName>.php
помістіть наступний код у метод execute :
$this->_view->loadLayout();
$this->_view->renderLayout();
Ось як це має виглядати:
<?php
namespace VendorName\ModuleName\Controller\ControllerName;
class ActionName extends \Magento\Framework\App\Action\Action
{
public function execute()
{ $this->_view->loadLayout();
$this->_view->renderLayout(); }
}
5. Відвідайте відредаговану сторінку.
Перейдіть за цим посиланням:
http://your-magento-store.com/ шлях / controllerName/actionName/
Ви побачите цю сторінку:
![]()
У прикладах ми створимо модуль Magefan_Faq для розділу Часто задаваних питань (FAQ). Результуюча структура модуля виглядатиме так:
├── app
│ └── code
│ └── Magefan
│ └── Faq
│ ├── Block
│ │ └──Index.php
│ │
│ ├── etc
│ │ ├──module.xml
│ │ └──frontend
│ │ └── routes.xm
│ │
│ ├── registration.php
│ ├── Controller
│ │ └── Index // controller_name
│ │ └── Index.php // action_name
│ │
│ └── view
│ └── frontend
│ ├── layout
│ │ └── magefan_faq_index_index.xml
│ └── templates
│ └── index.phtml
│
Ви можете переглянути змінені файли модуля Magefan_Faq на GitHub.