Puncte:1

Modificarea șablonului personalizat din cod

drapel pt

Cum pot elimina în mod programatic blocurile și alte elemente dintr-un singur șablon personalizat?

În modelul meu personalizat am definit o rută către un controler care apoi încarcă un șablon care este, de asemenea, conținut în același modul. Încarc cu succes datele de la controler în șablon.

Problema mea este că șablonul moștenește blocuri și meniul din tema activă pe care trebuie să o elimin, dar numai în șablonul modulelor. De exemplu, blocurile de căutare și de navigație primară nu trebuie să fie afișate.

am implementat:

funcția mymodule_export_preprocess_page(&$variabile)
{
  unset($variables['pagina']['header']['formul de căutare']);
  unset($variables['pagină']['menu_primar']);
}

Dar mai târziu mi-am dat seama că blocurile de căutare și navigare au fost eliminate nu doar din șablonul de modul, ci și din fiecare pagină de pe site.

Caut si eu ceva de genul hook_page_alter care nu a găsit nimic potrivit pentru sarcină.

Puncte:2
drapel bd

Cred că încurci temele și șabloanele.

A temă este un set de fișiere care controlează afișarea site-ului dvs. prin utilizarea fișierelor șablon, CSS și Javascript (mai ales asta, există mai multe dacă săpați).

A fișier șablon este doar unul dintre acele fișiere dintr-o temă.

Deci, motivul pentru care logica din dvs hook_preprocess_page afectează fiecare pagină, este că aplicați acele modificări necondiționat. Acele cârlige de preprocesare (atunci când sunt definite într-un modul) sunt aplicate temei active pentru orice solicitare de pagină, indiferent de tema utilizată.

Este puțin dificil să sugerezi o soluție specifică în cazul tău fără a vedea codul suplimentar, de ex. de la controlerul dvs., dar puteți încerca ceva în acest sens (pseudo-cod):

funcția mymodule_export_preprocess_page(&$variabile) {
  dacă (\Drupal::routeMatch()->getRouteName() === 'route.to.controller') {
    unset($variables['pagina']['header']['formul de căutare']);
    unset($variables['pagină']['menu_primar']);
  }
}
drapel pt
Mulțumesc berlinez. M-am investit prea mult într-o soluție orientată pe cârlig și am uitat totul despre umila declarație if

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.