Doresc să folosesc un șablon personalizat de listă de articole într-un modul care modifică <h3>
etichetă. Elementele pe care le redau sunt matrice de redare a linkurilor.
Când folosesc șablonul implicit, o matrice de redare a linkurilor funcționează corect și scoate linkurile. Când folosesc un șablon personalizat, linkurile nu mai apar. Pierd vreun pas?
Acesta este codul pe care îl folosesc în modul.
funcția mymodule_theme($existent, $tip, $temă, $cale) {
întoarcere [
'mymodule__item_list' => [
'variabile' => [
'articole' => [
'atribute' => [],
„valoare” => [],
],
'title' => ''',
'list_type' => 'ul',
'wrapper_attributes' => [],
'atribute' => [],
'gol' => NULL,
'context' => [],
],
'template' => 'mymodule--item-list',
],
];
}
Fișierul șablon /templates/mymodule--item-list.html.twig conține următorul cod.
{#
/**
* @fișier
* Implementarea temei personalizate pentru o listă de articole.
*
* Variabile disponibile:
* - articole: o listă de articole.Fiecare articol conține:
* - atribute: atribute HTML care trebuie aplicate fiecărui element din listă.
* - valoare: Conținutul elementului de listă.
* - title: titlul listei.
* - list_type: eticheta pentru elementul de listă ("ul" sau "ol").
* - wrapper_attributes: atribute HTML care urmează să fie aplicate la wrapper-ul listei.
* - atribute: atribute HTML care trebuie aplicate listei.
* - gol: un mesaj de afișat atunci când nu există elemente. Valoarea permisă este a
* șir sau matrice de randare.
* - context: o listă de date contextuale asociate listei. Poate conține:
* - list_style: stilul personalizat de listă.
*
* @vede template_preprocess_item_list()
*
* Tematică @ingroup
*/
#}
{% if context.list_style %}
{%- set attributes = attributes.addClass('item-list__' ~ context.list_style) %}
{% endif %}
{% dacă articole sau % goale}
{%- dacă titlul nu este gol -%}
<p><strong>{{ title }}</strong></p>
{%- endif -%}
{%- dacă articole -%}
<{{ list_type }}{{ atribute }}>
{%- pentru articol din articole -%}
<li{{ item.attributes }}>{{ item.value }}</li>
{%- endfor -%}
</{{ list_type }}>
{%- else -%}
{{- gol -}}
{%- endif -%}
{%- endif %}
În modul, adun elementele de legătură în lista neordonată folosind următorul cod.
// $foo și $bar sunt setate din codul anterior.
$commonlyUsedForItems = [];
foreach ($commonlyUsedfor ca $name) {
$url = Url::fromRoute('mymodule.page', [], [
'interogare' => [
'foo' => $foo,
'bar' => $bar,
'nume' => $nume,
],
]);
// Creați o matrice de tablouri de randare a linkurilor.
$commonlyUsedForItems[] = [
'#type' => 'link',
'#title' => $this->t($name),
'#url' => $url,
];
}
$commonlyUsedForRenderArray = [
'#theme' => 'mymodule__item_list',
'#type' => 'ul',
'#title' => 'Utilizat frecvent pentru:',
'#items' => $commonlyUsedForItems,
'#attributes' => ['class' => 'commonlyUsedFor'],
'#wrapper_attributes' => ['class' => 'container'],
];
Codul de mai sus funcționează corect schimbându-se '#theme' => 'mymodule__item_list',
la '#theme' => 'item_list',
.
Codul așa cum este funcționează, dar imprimă puncte goale.
Știu că aș putea inversa $commonlyUsedForItems
matrice pentru a marca și codifica HTML, dar încerc să păstrez HTML și PHP separate cât de mult pot.
Ai vreo idee?