it-swarm.com.de

Arbeiten mit Vorlagenvorschlägen für Drupal 8

Ich brauche 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?

8
Sifro

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

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

Mit diesem Hook kann jedes Modul oder Thema Vorschläge für alternative 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

13
Clive