Рейтинг:0

Как фильтровать результаты entity_autocomplete по типу контента и полю

флаг ng

Я пытаюсь реализовать поле автозаполнения объекта в форме, в которой объекты автозаполнения фильтруются по типу контента и определенному полю этого типа контента.

Я знаю, что могу отфильтровать автозаполнение, используя 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. Я совершенно новичок в плагинах, но знаком с модулями. Я чувствую, что я очень близко. Спасибо за любое руководство.

флаг ru
По какой-то конкретной причине вы не используете модуль Views? Вы можете создать представления типа «Ссылка на сущность», а затем выбрать это (предварительно отфильтрованное) представление в качестве источника для поля ссылки на сущность.
spacecraft96 avatar
флаг ng
Мне нужно, чтобы эта форма была сгенерирована полностью программно, и представления, похоже, не соответствовали моим потребностям в этом отношении. Поэтому я бы предпочел решить эту проблему с помощью элементов рендеринга формы.

Ответить или комментировать

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