Я пытаюсь реализовать поле автозаполнения объекта в форме, в которой объекты автозаполнения фильтруются по типу контента и определенному полю этого типа контента.
Я знаю, что могу отфильтровать автозаполнение, используя target_bundles
в #selection_settings
'#selection_handler' => 'по умолчанию',
'#selection_settings' => [
'target_bundles' => ['my_content_type'],
]
Но я все еще не понимаю, как дальше фильтровать по полю в этом типе контента. Из того, что я нашел, я могу добавить 'фильтр' => ['my_field_name' => 'my_field_value'],
к #selection_settings
. Но тогда мне пришлось бы использовать пользовательский #selection_handler
.
Я нашел этот пример в Интернете о реализации плагина обработчика выбора.
<?php
пространство имен Drupal\test_module_name\Plugin\EntityReferenceSelection;
используйте Drupal\node\Plugin\EntityReferenceSelection\NodeSelection;
/**
* Обеспечивает определенный контроль доступа для типа сущности узла.
*
* @EntityReferenceSelection(
* id = "по умолчанию: node_by_field",
* label = @Translation("Узел по выбору поля"),
* entity_types = {"узел"},
* группа = "по умолчанию",
* вес = 3
* )
*/
класс NodeByFieldSelection расширяет NodeSelection {
/**
* {@inheritdoc}
*/
защищенная функция buildEntityQuery ($ match = NULL, $ match_operator = 'CONTAINS') {
$query = parent::buildEntityQuery($match, $match_operator);
$handler_settings = $this->configuration['handler_settings'];
если (!isset($handler_settings['фильтр'])) {
вернуть $запрос;
}
$filter_settings = $handler_settings['фильтр'];
foreach ($filter_settings как $field_name => $value) {
$query->условие($field_name, $value, '=');
}
вернуть $запрос;
}
}
Я считаю, что в этом примере они используют обработчик выбора, называемый по умолчанию: node_by_field
. Я совершенно новичок в плагинах, но знаком с модулями. Я чувствую, что я очень близко. Спасибо за любое руководство.