Как программно создать блок в Drupal 8

  1. Страница макета блока
  2. Создать блок с помощью интерфейса Drupal
  3. Создать блок с помощью кода
  4. 1. Создайте модуль
  5. 2. Создайте класс блока
  6. строить ()
  7. BlockAccess ()
  8. blockForm ()
  9. blockSubmit ()
  10. Создать блок с помощью Drupal Console
  11. Генерация блочного стандартного кода с использованием Drupal Console
  12. Резюме
  13. Ресурсы

Блоки, как следует из названия, представляют собой фрагменты контента, которые могут быть размещены в любом месте вашего сайта Drupal. Они могут содержать простой текст, формы или что-то со сложной логикой.

В этом уроке вы узнаете, как создать блок с помощью пользовательского кода и как его использовать. Консоль Drupal генерировать это. Если вы использовали блоки в Drupal 7, то вы будете знакомы с новым интерфейсом в Drupal 8. Если вы разработчик сайта, весь процесс создания, редактирования и удаления блока очень интуитивно понятен.

Прежде чем переходить к коду, давайте поговорим о пользовательском интерфейсе Drupal Block и разберемся, что изменилось после Drupal 7.

Страница макета блока

На этой странице теперь будут перечислены только блоки, назначенные определенному региону. Вы заметите, что один блок теперь может быть назначен нескольким регионам, и это потому, что блоки теперь являются объектами.

Если вы хотите назначить блок региону, просто нажмите кнопку «Поместить блок», и вы увидите наложение, показывающее все доступные блоки.

Эта страница может быть доступна по URL / admin / structure / block

Если вы хотите узнать, как создавать собственные типы блоков, ознакомьтесь с нашим руководством: Создайте блог в Drupal 8: Управление блоками

Создать блок с помощью интерфейса Drupal

Как и страница содержимого, пользовательские блоки теперь перечислены на выделенной странице, которая использует представления для отображения всех объектов типа «Блок». Используйте меню панели инструментов для доступа к этой странице: Структура -> Макет блока -> Библиотека пользовательских блоков.

Чтобы создать новый блок, нажмите «Добавить пользовательский блок» и выберите тип блока. Как упоминалось ранее, блоки теперь являются объектами с возможностью поля (например, узлами), поэтому вы можете видеть различные типы блоков.

Как упоминалось ранее, блоки теперь являются объектами с возможностью поля (например, узлами), поэтому вы можете видеть различные типы блоков

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

Создать блок с помощью кода

Как и предыдущая версия, Drupal 8 также позволяет нам создавать блоки с использованием кода. С концепциями ООП, представленными в этой версии 8, стало еще проще и понятнее использовать API, предоставляемые Drupal. Итак, начнем.

1. Создайте модуль

Перейдите в папку «/ modules / custom» (вам нужно будет создать папку «custom»), которая называется «my_block_example».

Внутри этой папки создайте файл «.info.yml».

my_block_example.info.yml

name: My Block Пример типа: описание модуля: Определяет пользовательский блок. ядро: 8.x пакет: зависимости WebWash: - блок

После того, как папка и файл будут созданы, включите модуль. Обратите внимание, что Drupal 8 не требует «.module».

2. Создайте класс блока

На этом шаге мы создадим класс, который будет содержать логику нашего блока. После Стандарты PSR-4 мы разместим наш класс PHP в / modules / custom / my_block_example / src / Plugin / Block . Создайте эту структуру папок, а затем создайте новый файл с именем MyBlock.php .

Путь к классу блоков должен в конечном итоге быть my_block_example / src / Plugin / Block / MyBlock.php.

Этот файл будет содержать:

  • Аннотации метаданных, которые позволят нам идентифицировать Блок. Если вы хотите узнать больше об аннотациях, отметьте « Плагины на основе аннотаций ”На drupal.org
  • Класс MyBlock , содержащий 4 метода:

build (), blockAccess (), blockForm () и blockSubmit ()

Итак, давайте создадим это

<? php namespace Drupal \ my_block_example \ Plugin \ Block; использовать Drupal \ Core \ Access \ AccessResult; использовать Drupal \ Core \ Block \ BlockBase; использовать Drupal \ Core \ Form \ FormStateInterface; использовать Drupal \ Core \ Session \ AccountInterface; / ** * Предоставляет блок с простым текстом. * * @Block (* id = "my_block_example_block", * admin_label = @Translation ("Мой блок"), *) * / класс MyBlock extends BlockBase {/ ** * {@inheritdoc} * / открытая функция build () {return ['#markup' => $ this-> t ('Это простой блок!'),]; } / ** * {@inheritdoc} * / защищенная функция blockAccess (AccountInterface $ account) {return AccessResult :: allowIfHasPermission ($ account, 'access content'); } / ** * {@inheritdoc} * / публичная функция blockForm ($ form, FormStateInterface $ form_state) {$ config = $ this-> getConfiguration (); вернуть форму $; } / ** * {@inheritdoc} * / публичная функция blockSubmit ($ form, FormStateInterface $ form_state) {$ this-> configuration ['my_block_settings'] = $ form_state-> getValue ('my_block_settings'); }}

Если вы предпочитаете, возьмите копию кода с GitHub ,

Это оно! Ваш блок создан и готов к использованию! Просто назначьте блок региону, и вы должны увидеть его.

Теперь давайте рассмотрим методы более подробно.

строить ()

Этот метод будет визуализировать массив рендеринга. В нашем случае мы возвращаем базовую разметку, но мы могли бы вернуть более сложный код, такой как форма или представления.

Код ниже демонстрирует, как визуализировать форму в качестве примера:

/ ** * {@inheritdoc} * / публичная функция build () {return \ Drupal :: formBuilder () -> getForm ('Drupal \ my_module \ Form \ MyBlockForm'); }

BlockAccess ()

Этот метод позволяет вам определять пользовательскую логику доступа. В нашем примере любой пользователь с «контентом доступа» увидит блок.

Обратите внимание, что здесь мы вызываем метод из класса AccessResult . Статический метод allowIfHasPermission проверит, имеет ли текущий пользователь (или анонимный) доступ к просмотру контента (в данном случае).

blockForm ()

Этот метод позволяет вам определить форму конфигурации блока. Предположим, мы хотим визуализировать собственный текст внутри этого блока вместо статического. Все, что нам нужно сделать, это создать форму, используя API формы а затем определите, какие поля нам нужны.

blockSubmit ()

Здесь мы сохраняем конфигурацию, определенную в предыдущем методе.

Создать блок с помощью Drupal Console

Если вы знакомы с Консоль Drupal Вы уже знаете его силу!

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

Если у вас уже установлена ​​консоль Drupal, выполните следующие действия, в противном случае просто следуйте инструкциям на сайте для ее установки.

Генерация блочного стандартного кода с использованием Drupal Console

Откройте терминал и перейдите в корневую папку вашего сайта на Drupal и выполните следующую команду:

drupal генерировать: плагин: блок

drupal генерировать: плагин: блок

Выберите модуль, под которым вы хотите создать блок, и ответьте на следующие вопросы, и все готово!

Резюме

Концепция блока на самом деле не изменилась, но то, как они реализованы, изменилось. Код для каждого блока аккуратно организован в своем классе. В то время как в Drupal 7 весь блочный код был брошен в файл «.module» и быстро запутался.

Этот код можно найти и загрузить с: https://github.com/rafaelferreir4/my_block_example/

Ресурсы

О Рафаэле Ногейре

Любитель веб-сайтов и энтузиастов сосредоточены на разработке красивых и мощных веб-решений (в основном, Drupal). Acquia Grand Master сертифицирован.