Как я могу встроить представление в шаблон, если имя представления и параметры передаются как переменные?


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

  {{ content.field_category }}
  {{ content.field_view }}

Я получаю правильные значения.

Затем я использую twig tweak для встраивания представления, и если я встраиваю его с жестко закодированными значениями, например:

  {{ drupal_view('view_machine_name', 'embed_1', 33) }}

Это тоже работает. Я жестко закодировал те же значения, которые мои переменные отображают сверху.

Теперь я хочу использовать свои значения полей вместо жестко закодированных значения:

{{ drupal_view(content.field_view, 'embed_1', content.field_category) }}

Я получаю ошибку типа:

Warning: array_flip(): Can only flip STRING and INTEGER values! in Drupal\Core\Entity\EntityStorageBase->loadMultiple() (line 266 of core/lib/Drupal/Core/Entity/EntityStorageBase.php). Warning: Illegal offset type in isset or empty in Drupal\Core\Entity\EntityStorageBase->load() (line 251 of core/lib/Drupal/Core/Entity/EntityStorageBase.php). 

Когда я пытаюсь заменить параметр представления и:

InvalidArgumentException: Placeholders must have a trailing [] if they are to be expanded with an array of values. in Drupal\Core\Database\Connection->expandArguments() (line 738 of core/lib/Drupal/Core/Database/Connection.php).

Когда я пытаюсь заменить параметр категории.

Я предполагаю, что content.field_category не является значением int, а content.field_view не является строкой, как ожидает этот фильтр веток, но я понятия не имею, как преобразовать их в эти примитивные типы?

Пробовал intval - не работает

Пробовал number_format - также не работает

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

Попробовал content.field_category.id() и content.field_view.id()

Ничего не работает.

Author: leymannx, 2020-04-14

1 answers

Старайтесь избегать использования {{ content }} таким образом. Позиция, которую вы нашли в массиве визуализации в своем последнем комментарии , может измениться в любое время при перенастройке типа абзаца или при установке/обновлении кода. Массивы визуализации не являются API-интерфейсами, и от них требуется только наличие допустимых дочерних элементов для визуализации на самом низком уровне, но не фиксированная структура.

С другой стороны, API сущности, который вы использовали бы для доступа к {{ paragraph }} в шаблоне абзаца, не меняется, по крайней мере, не без переходного периода, пока вы все еще можете использовать устаревший API.

Пример:

// field value like string or number
{{ paragraph.field_example.value }}

// target id of a reference field
{{ paragraph.field_reference.target_id }}

См. также https://drupal.stackexchange.com/a/263285/47547.

 0
Author: 4k4, 2020-04-15 19:45:52