Puncte:0

Cum redau corect linkurile în lista de articole personalizată când folosesc o matrice de randare complexă?

drapel ar

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?

Kevin avatar
drapel in
https://drupal.stackexchange.com/a/136772/57
Protomancer avatar
drapel ar
@Kevin este bine de știut, dar nu ajută la rezolvarea punctelor goale. Continuă să funcționeze la fel.
4uk4 avatar
drapel cn
Pentru a utiliza șablonul de bază ca cârlig de bază, aveți nevoie de un nume precum `item_list__mymodule`.
drapel cn
Care invocă [`template_preprocess_item_list`](https://api.drupal.org/api/drupal/core%21includes%21theme.inc/function/template_preprocess_item_list/9.2.x) și setează corect fiecare dintre `elementele` (a structura cu cheile „valoare” și „atribute” așa cum sunt utilizate în șablonul dvs.), care este bitul care vă lipsește în prezent

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.