Aș dori să folosesc Twig Tweak's drupal_view()
pentru a reda o vizualizare în șablonul meu de paragraf. Am câteva câmpuri de referință pentru entități în paragraf și am nevoie de ID-urile entităților la care se face referire transmise ca argumente de filtru contextual.
am construit un Șir de filtru contextual formatator de câmpuri pentru a formata șirul de filtru contextual cu speranța că ar putea fi transmis direct ca valoare a argumentului. Formatatorul va reveni toate
dacă câmpul de referință este gol, în caz contrar, va returna ID-urile entității la care se face referire ca șir cu separatori AND/OR, de ex. 1,2,3
pentru AND sau 1+2+3
pentru SAU.
În interiorul șablonului meu, încerc să redez vizualizarea cu următoarea crenguță:
{% set arg1 = content.field_arg1|renda %}
{% set arg2 = content.field_arg2|renda %}
{{ drupal_view('my_view', 'my_display', arg1, arg2) }}
Dar asta nu merge!
Mai degrabă decât șiruri, variabilele mele arg sunt de fapt Drupal\Core\Render\Markup obiecte astfel încât argumentele nu sunt transmise corect la vizualizare.
După ce am cercetat, am descoperit că pot rezolva această problemă prin filtrarea variabilelor mele arg cu un filtru php care returnează un șir. De exemplu, utilizarea filtrului de tăiere funcționează:
{% set arg1 = content.field_arg1|render|trim %}
{% set arg2 = content.field_arg2|render|trim %}
{{ drupal_view('my_view', 'my_display', arg1, arg2) }}
Dacă este posibil, aș dori să construiesc o matrice de randare care să nu necesite niciun joc de picioare elegant în șablon pentru a transmite valorile către drupal_view()
funcţie. i.e. o matrice de randare unde pot trece content.field_arg1
sau content.field_arg|renda
direct ca argumentele. Este posibil?
Matricele de randare pe care le-am încercat și care nu au funcționat:
$inline_template = [
'#type' => 'șablon_inline',
'#template' => '{{ contextual_filter_string }}', // am încercat și cu |trim filter aici
'#context' => [
'contextual_filter_string' => '1+2+3',
],
];
$markup = [
'#markup' => '1+2+3',
];
$text_plat = [
'#plain_text' => '1+2+3',
];
Notă: în tablourile de randare de mai sus nu sunt afișate metadatele din cache (etichete) pentru entitățile la care se face referire în câmp.
Da, există modalități alternative de a obține aceste valori de câmp și de a le transmite drupal_view()
, cu toate acestea, nu despre asta este vorba. Aș dori să folosesc un Field Formatter pentru a returna o matrice de randare (cred că trebuie să returnez o matrice de randare) care are ca rezultat un șir gata pentru a fi transmis direct către drupal_view()
. Acest lucru îmi permite să configurez formatul argumentului în UI fără să ating codul. Bănuiesc că acest lucru este imposibil.
Câteva abordări alternative pe care le-am luat în considerare:
- Aș putea să-mi preprocesez paragraful și să adaug aceste șiruri de filtru la
$variabile
matrice.
- Mi-aș putea construi propria funcție twig pentru a genera aceste șiruri de filtre contextuale.
- Aș putea obține valorile direct de la entitatea din șablonul meu, de ex.
paragraph.field_arg1.target_id
după cum a răspuns Les Lim, dar acest lucru nu funcționează corect pentru câmpurile cu valori multiple.
Editați | ×: Se pare că acest lucru este imposibil, așa că acceptând răspunsul lui Les Lim ca cea mai bună alternativă.