Пожалуйста, помогите со следующим:
Мне нужен новый виджет (просто немного измененный выбор), который может быть настроен кем угодно из пользовательского интерфейса. Я сделал следующее:
Создал новый пользовательский модуль и включил его.
Создал новый виджет.
<?php
пространство имен Drupal\filtered_select\Plugin\Field\FieldWidget;
используйте Drupal\Core\Field\FieldItemListInterface;
используйте Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsSelectWidget;
используйте Drupal\Core\Form\FormStateInterface;
/**
* Реализация плагина виджета filtered_select.
*
* @FieldWidget(
* идентификатор = "filtered_select",
* label = @Translation("Отфильтрованный выбор"),
* типы полей = {
* "entity_reference"
* },
* несколько_значений = ЛОЖЬ
* )
*/
класс FilteredSelectWidget расширяет OptionsSelectWidget {
/**
* {@inheritdoc}
*/
публичная функция formElement(FieldItemListInterface $items, $delta, элемент массива $, массив &$form, FormStateInterface $form_state) {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
// Используем функцию родительского выбора,
// просто переключите элемент.
$element['#type'] = 'fselect';
вернуть $элемент;
}
}
- Создал новый элемент, чтобы я мог переключать тему. (не уверен, что это необходимо)
<?php
пространство имен Drupal\filtered_select\Element;
используйте Drupal\Core\Render\Element\Select;
/**
* Предоставляет отфильтрованный элемент выбора.
*
* @FormElement("fselect")
*/
класс FilteredSelect расширяет Select {
/**
* {@inheritdoc}
*/
публичная функция getInfo() {
$info = родитель::getInfo();
// Переключатель темы.
$info['#theme'] = 'fselect';
вернуть $информацию;
}
}
- В противном случае это не сработало, поэтому я также добавил hook_theme в свой файл модуля, например:
/**
* Реализует hook_theme().
*/
функция filtered_select_theme ($ существующая, $ тип, $ тема, $ путь): массив {
возвращаться [
'fвыбрать' => [
'рендерить элемент' => 'элемент',
'шаблон' => 'fselect',
],
];
}
- Я просто скопировал шаблон из ядра в свой пользовательский модуль, и он работает в том смысле, что он печатает правильный шаблон, я еще не изменил этот, я просто хочу сначала получить ту же старую основную функциональность, работающую под другим именем.
Проблема:
В моем новом элементе рендеринга отсутствует массив параметров, и я не могу понять, почему. Я сделал действительно базовую перезапись и не могу понять, почему он не создает массив параметров.
Свалки Twig Var:
--- ЭТО ОСНОВНОЙ ВЫБОР ---
массив: 15 [≥ ¼
"элемент" => массив: 41 [ ¶]
"theme_hook_original" => "выбрать"
"атрибуты" => Drupal\Core\Template\Attribute {#7543 â¶}
"title_attributes" => Drupal\Core\Template\Attribute {#7932 â¶}
"content_attributes" => Drupal\Core\Template\Attribute {#7896 â¶}
"префикс_названия" => []
"title_suffix" => []
"db_is_active" => истина
"is_admin" => правда
"logged_in" => правда
"user" => Drupal\Core\Session\AccountProxy {#2354 â¶}
"каталог" => "ядро/темы/семь"
"options" => массив: 3 [â¼0 => массив: 4 [â¶]
1 => массив: 3 [▶]
2 => массив: 3 [▶]
]
"#cache" =>массив:1 [❖]
"theme_hook_suggestions" => []
]
--- ЭТО МОЙ 'НОВЫЙ' фильтрованный выбор ---
массив: 14 [≈ ¼
"элемент" => массив: 41 [ ¶]
"theme_hook_original" => "fselect"
"атрибуты" => Drupal\Core\Template\Attribute {#7543 â¶}
"title_attributes" => Drupal\Core\Template\Attribute {#8034 â¶}
"content_attributes" => Drupal\Core\Template\Attribute {#7708 â¶}
"префикс_названия" => []
"title_suffix" => []
"db_is_active" => истина
"is_admin" => правда
"logged_in" => правда
"user" => Drupal\Core\Session\AccountProxy {#2354 â¶}
"каталог" => "ядро/темы/семь"
"#cache" =>массив:1 [❖]
"theme_hook_suggestions" => []
]
Как видите, мне не хватает массива параметров, и я не могу понять, почему. Пожалуйста, порекомендуйте.