я хотел бы использовать Твиг Твик друпал_просмотр()
для отображения представления в моем шаблоне абзаца. У меня есть пара полей ссылок на сущности в абзаце, и мне нужны идентификаторы ссылочных сущностей, переданные в качестве аргументов контекстного фильтра.
я построил Строка контекстного фильтра средство форматирования поля для форматирования строки контекстного фильтра в надежде, что ее можно будет передать непосредственно в качестве значения аргумента. Форматтер вернется все
если поле ссылки пусто, в противном случае оно вернет идентификаторы ссылочных объектов в виде строки с разделителями И/ИЛИ, например. 1,2,3
для И или 1+2+3
для ИЛИ.
Внутри моего шаблона я пытаюсь отобразить представление со следующей веткой:
{% set arg1 = content.field_arg1|рендеринг %}
{% set arg2 = content.field_arg2|рендеринг %}
{{ drupal_view('my_view', 'my_display', arg1, arg2) }}
Но это не работает!
Вместо строк мои переменные arg на самом деле Друпал\Ядро\Визуализация\Разметка объекты, поэтому аргументы не передаются в представление правильно.
После исследования я обнаружил, что могу обойти эту проблему, отфильтровав переменные arg с помощью php-фильтра, который возвращает строку. Например, использование фильтра обрезки работает:
{% set arg1 = content.field_arg1|рендеринг|обрезка %}
{% set arg2 = content.field_arg2|рендеринг|обрезка %}
{{ drupal_view('my_view', 'my_display', arg1, arg2) }}
Если возможно, я хотел бы построить массив рендеринга, который не требует каких-либо причудливых действий в шаблоне для передачи значений в друпал_просмотр()
функция. т.е. массив рендеринга, где я могу передать content.field_arg1
или же content.field_arg|рендеринг
непосредственно в качестве аргументов. Это возможно?
Массивы рендеринга, которые я пробовал, не работали:
$inline_template = [
'#type' => 'inline_template',
'#template' => '{{ contextual_filter_string }}', // здесь также пробовали |trim filter
'#контекст' => [
'contextual_filter_string' => '1+2+3',
],
];
$разметка = [
'#разметка' => '1+2+3',
];
$plain_text = [
'#plain_text' => '1+2+3',
];
Примечание. В приведенных выше массивах рендеринга не показаны метаданные кеша (теги) для сущностей, на которые есть ссылки в поле.
Да, есть альтернативные способы получить значения этих полей и передать их в друпал_просмотр()
, однако это не то, о чем этот вопрос. Я хотел бы использовать средство форматирования поля для возврата массива рендеринга (я думаю, мне нужно вернуть массив рендеринга), в результате чего строка готова для передачи непосредственно в друпал_просмотр()
. Это позволяет мне настроить формат аргумента в пользовательском интерфейсе, не касаясь кода. Подозреваю, что это невозможно.
Некоторые альтернативные подходы, которые я рассматривал:
- Я мог бы предварительно обработать свой абзац и добавить эти строки фильтра в
$переменные
множество.
- Я мог бы создать свою собственную функцию ветки для генерации этих строк контекстного фильтра.
- Я мог бы получить значения непосредственно из объекта в моем шаблоне, например.
para.field_arg1.target_id
как ответил Лес Лим, но это не работает для полей с несколькими значениями.
Редактировать: Кажется, что это невозможно, поэтому примите ответ Леса Лима как лучшую альтернативу.