Типы полей определяют свойства и поведение полей. Типы полей определяются как плагины, поэтому рекомендуется ознакомиться с API плагинов перед тем, как приступить к написанию нового типа поля.
Чтобы создать тип поля в Drupal 8, вам нужен класс с аннотацией FieldType.
Расположение класса типа поля должно быть помещено в MODULE_NAME/src/Plugin/Field/FieldType
/modules/foo/src/Plugin/Field/FieldType/BazItem.php
В Drupal 8 все типы полей, виджеты и форматтеры являются плагинами.
Они автоматически обнаруживаются, если размещены в ожидаемой структуре каталогов и используют корректную аннотацию.
Структура каталогов для модуля, который реализует все три компонента, выглядит следующим образом:
foo_bar_fields
Этот учебник был первоначально опубликован в Web Wash. Однако Berdir спросил, могу ли я разместить учебник здесь, так что он здесь.
Модуль в Drupal 7 позволяет хранить примеры кода/фрагменты в поле. Он поставляется с настраиваемым полем под названием «Поле фрагментов» и отображает три элемента формы: описание, исходный код и режим подсветки синтаксиса (какой язык программирования).
Но теперь пришло время обновить модуль до Drupal 8.
Este guia reune tutoriais para criar seu proprio field type widget e formatter no D8.
Часть V из Практического руководства по созданию базовых модулей Drupal 8
От .info к тестам, только основы
Помните, в начале этого урока я говорил, что мы определим блок с формой? Что ж, сейчас самое время разобраться с этим.
Чтобы использовать конфигурацию экземпляров блока, мы можем изменить метод build () класса HelloBlock:
/**
* {@inheritdoc}
*/
public function build() {
$config = $this->getConfiguration();
if (!empty($config['hello_block_name'])) {
$name = $config['hello_block_name'];
}
else {
$name = $this->t('to no one');
}
return [
'#markup' => $this->t('Hello @name!', [
'@name' => $name,
]),
];
}
Добавьте следующий метод в класс HelloBlock. В этом примере он находится в файле src/Plugin/Block/HelloBlock.php, но, как вы начинаете думать в более ООП-режиме, где он физически расположен в файловой структуре, он менее важен, чем в пространстве имен. Если вы очень умный OO-программист, вы держите две вещи очень тесно выровненными. Но на всякий случай это фактически пространство имен, очень похожее на имя папки модуля и имя машины для нашего обсуждения модуля ранее в этом разделе, которое будет важно позже, когда вы захотите программно взаимодействовать с кодом вашего модуля.
Теперь давайте скажем, что мы хотим добавить возможность для строителя сайта вводить часть конфигурации для каждого экземпляра нашего пользовательского блока. Всегда имейте в виду, что все конфигурации построения сайта в Drupal 8 можно экспортировать с сайта разработки и импортировать на рабочий сайт (известный как Управление конфигурацией). Вы, как сборщик модулей, можете также предоставить конфигурацию по умолчанию для автоматического заполнения формы, когда создатель сайта создает новый блок.
Блоки в Drupal 8 являются экземплярами плагина блоков.
Менеджер блоков Drupal сканирует ваши модули на наличие классов, которые содержат аннотацию @Block.
Приведенный ниже пример кода использует аннотацию @Block вместе со свойствами «id» и «admin_label» для определения пользовательского блока.
В отличие от Drupal 7, создание нескольких экземпляров блока для размещения на вашем сайте - простая задача в Drupal 8.
В этом руководстве вы узнаете, как программно добавить блок в интерфейс макета блока. Как добавить (административную) конфигурационную форму в блок и как ее обработать. Наконец, вы узнаете, как добавить и отобразить значения конфигурации по умолчанию для формы.
Перед началом этого пошагового руководства подготовьте каркас модуля в соответствии с инструкциями «Подготовьте каркас модуля».