Помощь начинающим веб
разработчикам

Drupal 8 – Программное создание блока

21.06.2017

Как вам известно, в Drupal 8 блоки, тоже стали сущностями – это означает, что мы может создать «Тип блока» и добавлять для каждого типа блока свой набор полей, - это то, что действительно не хватало в Drupal 7, когда поля для блоков можно было реализовать только написанием кастомного модуля.

Сегодня мы займемся созданием  кастомного блока из своего модуля.

Система блоков теперь имеет по сути, 2 отдельных API

  1. Plugin API – позволяет создавать блоки
  2. Entity API – позволяет управлять настройками блока и определять настройки видимости блока

Итак, приступим, наш модуль будет называться custom_block. Из чего состоит пользовательский модуль в Drupal 8 – останавливаться не будем, уже проходили, напомню только, что все кастомные модули должны находиться по пути

module/custom

Файл custom_block.info.yml

name: Example custom block drupal 8
description: Простой пример создания блока в Drupal 8
core: 8.x
type: module
dependencies:
- block

После описания модуля, вы сразу же увидите свой модуль в списке модулей.

custom_block_drupal8_1.png

Можем сразу его активировать. Далее для создания блока, нам необходимо реализовать плагин (по стандарту PSR-4), который должен быть размещён по пути

module_name/src/Plugin/Block

Хочу заметить, что название файла должно соответствовать исполняемому классу.

Создаем файл CustomBlock.php по данному пути и напишем реализацию класса с одноименным именем в данном файле

Файл CustomBlock.php

<?php
/**
 * @file
 * Contains \Drupal\custom_block\Plugin\Block\CustomBlock.
 */
namespace Drupal\custom_block\Plugin\Block;

use Drupal\Core\Block\BlockBase;
/**
 * Provides a custom_block.
 *
 * @Block(
 *   id = "custom_block",
 *   admin_label = @Translation("Custom block"),
 *   category = @Translation("Custom block example")
 * )
 */
class CustomBlock extends BlockBase {
  /**
   * {@inheritdoc}
   */
  public function build() {
    return array(
      '#type' => 'markup',
      '#markup' => 'This custom block content.',
    );
  }
}

Хочу заметить, что метод build, всегда должен возвращать массив, с указанием типа контента.

Хочу заметить, что для реализации плагинов, добавление аннотации является обязательным, иначе вы не увидите свой блок в списке блоков.

Аннотация @Block

  • Id – Возвращает ID блока
  • admin_label – Возвращает заголовок блока на странице управления блоками
  • category – Определяет категорию блока

Аннотация @Translation – добавляет возможность перевода строки на другие языки системы.

Если у вас модуль был активирован, то чистим кеш сайта и далее идем по пути «Структура – Схема блоков» и выводим наш кастомный блок в необходимый регион

custom_block_drupal8_2.png

И смотрим результат

custom_block_drupal8_3.png

Как вы могли заметить при создание кастомного блока, использовалось минимум кода, больше никаких hook_block_info и hook_block_view. Думаю на этом можно пока закончить.

Скачать модуль используемый в примере

Скачать

Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

Добавить комментарий

- Оповестить о новом комментарии.
- Все комментарии
- Только мои комментарии