Arbeiten mit Vorlagenvorschlägen für Drupal 8

8

Ich benötige Drupal, um eine benutzerdefinierte Seitenvorlage zu verwenden, wenn die URL einen bestimmten _GET- Parameter enthält.

In D7 würde ich so etwas in der template.php des Themas machen:

function mytheme_preprocess_page(&$variables) {
      if($_GET['isCustomTpl'] == true)
        $variables['theme_hook_suggestions'][] =  'page__myCustomTpl';
}

In D8 funktioniert es jedoch nicht (ich wäre angesichts aller architektonischen Änderungen in der Themenebene vom Gegenteil überrascht gewesen).

Irgendwelche Ideen?

Bonusfrage: Ist es möglich, eine solche Funktion in einem Modul zu definieren, damit ich sie öffentlich veröffentlichen kann, ohne dass die Benutzer ihre Themen bearbeiten müssen?

Sifro
quelle

Antworten:

13

Sie können den neuen hook_theme_suggestions_HOOK_alter()Hook implementieren .

Ändert benannte Vorschläge für einen bestimmten Themen-Hook.

Mit diesem Hook kann jedes Modul oder Thema alternative Vorschläge für Themenfunktionen oder Vorlagennamen bereitstellen und Vorschläge, die von hook_theme_suggestions_HOOK () oder durch frühere Aufrufe dieses Hooks bereitgestellt wurden, neu anordnen oder entfernen.

Sie können es so verwenden

function MYMODULE_theme_suggestions_page_alter(array &$suggestions, array $variables) {
  if (\Drupal::request()->query->get('foo') == 'bar') {
    $suggestions[] = 'page__myCustomTpl';
  }
}

Sie können es entweder in einem Modul oder in einem Thema implementieren

Clive
quelle
1
Großartig, funktioniert perfekt! Hoffentlich entwickelt es sich zu einem voll funktionsfähigen pjax-Modul für d8!
Sifro
Wenn ich es thematisch machen möchte, muss ich diesen Code wie drupal 7 in die Datei template.php einfügen. und der Name der Themendatei muss page_myCustomTpl.html.twig sein? habe ich recht?
Shekoufeh