Оскільки ви вже знаєте, як створити перший контролер у 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/

Ви побачите цю сторінку:

Hello Word

У прикладах ми створимо модуль 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.