Puncte:1

Funcție de temă personalizată pentru un câmp

drapel in

Vreau să schimb un cârlig de temă pentru un câmp dintr-un FieldFormatter personalizat. Este #theme callback este „câmp”, dar vreau să ofer utilizatorului opțiunea de a comuta o setare care o schimbă în „field_raw”, care apoi utilizează un șablon Twig fără markup. Nu pot să-mi dau seama de cârligul tematic.

Șablon crenguță:

{%- pentru articol din articole %}{{ item.content }}{% endfor -%}

Cârlig modul:

funcția mymodule_theme($existent, $tip, $temă, $cale) {
  întoarcere [
    'field_raw' => [
      'items' => NULL,
    ],
  ];
}

Nu sunt sigur ce să trec aici pentru a ajunge la șablonul de crenguță. Pot scoate text în șablon, astfel încât să știu că este lovit. Care sunt variabilele potrivite de setat aici, astfel încât șablonul să-l primească?

am incercat si eu:

'render element' => 'element'
'render element' => 'elemente'
'render element' => 'copii'
Puncte:1
drapel cn

Folosind cârligul de bază de câmp

Dacă acest șablon fără marcaj ar trebui să scoată valorile câmpului {{ item.content }} aveți nevoie de codul de bază pentru procesarea acestor valori prin definirea unui cârlig de bază.

Vezi de exemplu comment_theme():

/**
 * Implementează hook_theme().
 */
function comment_theme() {
  întoarcere [
    ... 
    'field__comment' => [
      'base hook' => 'câmp',
    ],
  ];
}

În acest caz, nu este suficient să începeți numele cârligului temei cu cârligul de bază, este nevoie și de liniuțe duble: field__raw.


Implementarea unui cârlig de temă personalizată

Nerecomandat, în scop demonstrativ, puteți copia codul de bază relevant în propriul șablon:

mymodule.module:

funcția mymodule_theme($existent, $tip, $temă, $cale) {
  întoarcere [
    'field_raw' => [
      'render element' => 'element',
    ],
  ];
}

funcția template_preprocess_field_raw(&$variabile, $hook) {
  $element = $variabile['element'];
  $variabile['articole'] = [];
  $delta = 0;
  în timp ce (!gol ($element[$delta])) {
    $variables['items'][$delta]['content'] = $element[$delta];
    $delta++;
  }
}

În acest caz, puteți alege un nume aleatoriu pentru cârligul temei, dar nu trebuie să înceapă cu camp__.

Comutați la acest șablon în formatatorul de câmp personalizat:

  vizualizare funcție publică (FieldItemListInterface $articole, $langcode = NULL) {
    $elemente = parent::view($items, $langcode);
    if (isset($elements['#theme'])) {
      $elements['#theme'] = 'field_raw';
    }
    returnează $elemente;
  }

Și în cele din urmă plasați șablonul minim în folderul modulului

mymodule/templates/field-raw.html.twig

{%- pentru articol din articole %}{{ item.content }}{% endfor -%}

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.