Puncte:0

Cum pot adăuga o sugestie de șablon de nod după titlul nodului?

drapel in

Depanarea crenguțelor sugerează nod--4.html.twig ca fișier șablon pentru un nod al cărui ID este 4. Deoarece ID-ul nodului se modifică la schimbarea mediului, ar trebui să folosesc un fișier șablon al cărui nume se bazează pe titlul nodului.

Există o modalitate simplă de a realiza acest lucru?

Folosesc Drupal 9.

MrD avatar
drapel cn
MrD
Puteți folosi hook_theme_suggestions_node_alter pentru a adăuga mai mult șablon de sugestie.
drapel in
@LesLim Am actualizat întrebarea pentru a reflecta faptul că folosesc Drupal 9, mulțumesc!
drapel in
@MrD De asemenea, folosesc Twig Template Suggester și nici nu vine cu nimic util în acest sens.
MrD avatar
drapel cn
MrD
@johnny_n Puteți activa alias pentru nod și puteți adăuga sugestie prin url la fel cu sugestia de pagină.
sonfd avatar
drapel in
Este posibil să nu doriți să utilizați câmpul de titlu pentru aceasta. Poate creați un câmp special pentru definirea acestei sugestii de șablon. Dacă aveți nevoie cu adevărat de el pentru o singură pagină, puteți seta valoarea câmpului și apoi puteți elimina câmpul din afișarea formularului tipului de conținut, astfel încât să nu poată fi schimbat ulterior. Ar fi un adevărat obstacol dacă o simplă schimbare a titlului îți rupe aspectul paginii!
drapel in
@sonfd - Bun apel. Și mulțumesc domnule D pentru sfatul suplimentar. Acest lucru a fost incredibil de util, mulțumesc!
Puncte:1
drapel de

În urma comentariului lui MrD, hook_theme_suggestions_hook_alter este cheia (vezi documentație despre acest hook) sau hook_theme_suggestions_alter() dacă doriți să adăugați sugestii la mai multe tipuri de entități.

Vă va permite să adăugați sugestiile de șablon care vă lipsesc.

function yourTheme_theme_suggestions_node_alter(array &$suggestions, array $variables) {
  // Folosiți variabila $variables pentru a obține date legate de nodul dvs
  // de exemplu. $node = $variables["elements"]["#node"] pentru a obține obiectul Node

  // Folosiți variabila matrice $suggestions pentru a adăuga sugestiile dvs. personalizate la listă
  // de exemplu. $suggestions[] = „nod__” . „myawesomesuggestion”;
}

Apoi, adăugați nodul fișierului șablon--myawesomesuggestion.html.twig la tema dvs. și ar trebui să terminați cu el.

drapel in
Multumesc @misterdidi - ai perfecta dreptate. Apreciez clarificarea, am înțeles greșit natura cârligului.
Puncte:0
drapel us

Modulul Nod nu adaugă sugestii de șabloane care includ titlul nodului, în node_theme_suggestions_node(). Modulele și temele pot modifica implementarea sugestiilor existente hook_theme_suggestions_HOOK_alter().
Un punct de reținut este că numele șablonului sugerat ar trebui să conțină doar caractere permise într-un nume de funcție PHP.

Pentru titlul nodului, aș folosi următorul cod.

function mymodule_theme_suggestions_node_alter(matrice &$sugestii, matrice $variabile) {
  $node_title = \Drupal::transliteration()->transliterate($variables['elements']['#node']->getTitle());
  $suggestions[] = 'nod__' . preg_replace('/[^a-z0-9_]+/', '_', mb_strtolower($node_title));
}

Codul de înlocuire a caracterelor care nu ar trebui să fie într-un nume de funcție PHP este același folosit de la media_theme_suggestions_media() pentru $provider_id.

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.