Puncte:-1

Cum pot suprascrie un nod afișat cu conținutul redat de un modul personalizat?

drapel de

Am o cale/aplicație, care este redată de un modul personalizat (printr-o combinație de tema cârlig/controller/routing/twig). Practic este o mini-aplicație.

Am și un nod Drupal /data, care este un nod Drupal cu conținut încărcat de Drupal.

Cu toate acestea, trebuie să încarc conținutul /application la /data. Am încercat să setez rutarea modulului meu personalizat să folosească /data în loc de /application, dar Drupal încă încarcă conținutul nodului Drupal la /data, mai degrabă decât conținutul modulului personalizat. Problema este că această aplicație specifică folosește câmpuri din acel nod, așa că nu vreau să șterg nodul.Vreau doar să schimb ceea ce este redat atunci când vizualizați nodul, dar îl lăsați activ și editabil.

Care este cel mai bun mod de a realiza acest lucru?

Hodba Khalaf avatar
drapel eg
Pentru a încărca variabile înainte ca nodul să fie randat, trebuie să utilizați HOOK_preprocess_node, ați încercat asta?
drapel cn
Schimbați calea nodului în ceva care nu este /data. Problema rezolvata.
Anton avatar
drapel de
@Clive În mod ideal, nu schimb calea nodului pentru că vreau să păstrez locul în care este folosit nodul în meniuri. Nu există nicio modalitate de a suprascrie vizualizarea unui nod cu un modul personalizat?
Anton avatar
drapel de
@HodbaKhalaf Am încercat asta, dar nu pot vedea o modalitate de a încărca totul dintr-un modul personalizat în vizualizatorul de noduri. Ai idee cum se poate face asta?
apaderno avatar
drapel us
Drupal folosește mai întâi aliasurile de cale, apoi rutele definite din module. Dacă ar fi să adăugați un nod cu /admin/config/people/accounts ca alias de cale, nu veți mai vedea pagina de setări pentru conturi.
Hodba Khalaf avatar
drapel eg
@Anton în preprocesor puteți dezactiva conținutul și puteți seta valorile generate în modulul personalizat, de ex. $variables['VARIABLE_NAME'] apoi îi puteți tema cu fișierul twig.dacă puteți partaja ceva cod, poate vă pot oferi un feedback mai bun.
Puncte:1
drapel us

Deoarece /data este un alias de cale pentru un nod, Drupal arată acel nod în loc să arate ce returnează un controler asociat acelei căi. Dacă ar fi să setați un alias pentru calea nodului la /admin/config/people/accounts, Drupal ar afișa acel nod în loc de pagina de setare a conturilor.

Dacă doriți să schimbați matricea de randare utilizată pentru un nod, trebuie să implementați hook_ENTITY_TYPE_view(). Puteți compara $entity->id() cu ID-ul nodului la care doriți să adăugați date în matricea de randare.

utilizați \Drupal\Core\Entity\EntityInterface;
utilizați \Drupal\Core\Entity\Display\EntityViewDisplayInterface;

/**
 * Implementează hook_ENTITY_TYPE_view().
 */
funcția mymodule_node_view(matrice &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
  if ($entity->id() == 3) {
    // Schimbați $build.
  }
}

Puteți găsi, de asemenea, ID-ul nodului având în vedere alias-ul căii, de exemplu cu cod similar cu următorul.

utilizați \Drupal\Core\Entity\EntityInterface;
utilizați \Drupal\Core\Entity\Display\EntityViewDisplayInterface;

/**
 * Implementează hook_ENTITY_TYPE_view().
 */
funcția mymodule_node_view(matrice &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
  $cale = \Drupal::service('path_alias.manager')->getPathByAlias('/data');

  if (preg_match('/node\/(\d+)/', $cale, $potriviri)) {
    if ($entity->id() == $potrive[1]) {
      // Schimbați $build.
    }
  }
}

Vedea Cum pot obține ID-ul nodului dintr-un alias de cale? care explică, de asemenea, când să utilizați path_alias.manager sau path.alias_manager serviciu.

Anton avatar
drapel de
Buna idee! Am reușit să încarc conținutul meu personalizat al modulului aici, adăugând la $build. O întrebare pe care o am pentru aceasta este: în interiorul hook_ENTITY_TYPE_view(), în loc să folosiți $entity->id(), există vreo modalitate elegantă de a utiliza routing.yml al modulului personalizat pentru a obține și a apela dinamic metoda de control corespunzătoare? În caz contrar, codific ID-urile, ceea ce se simte la fel ca doar crearea unui tip de suprascriere „node--3.html.twig” și, de asemenea, codific hard ce controler și metodă de la care să încărcați conținutul.
apaderno avatar
drapel us
Puteți obține ID-ul nodului având în vedere aliasul căii, așa cum arăt în răspunsul actualizat. Codul încă codifică o valoare (alias-ul de cale), dar este mai ușor să setați același alias de cale pe site-uri diferite decât să obțineți același ID de nod pentru nodurile de pe site-uri diferite.

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.