Как я могу встроить представление в шаблон, если имя представления и параметры передаются как переменные?
Внутри моего шаблона абзаца у меня есть переменные, которые содержат идентификатор категории и имя машины просмотра. Поэтому, когда я печатаю их вот так:
{{ 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()
Ничего не работает.
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 }}