web-dev-qa-db-fra.com

Utilisation des suggestions de modèles sur Drupal 8

J'ai besoin de Drupal pour utiliser un modèle de page personnalisé si l'URL contient un paramètre _ GET particulier.

Dans D7 je ferais quelque chose comme ça dans le template.php du thème:

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

Cependant, cela ne fonctionne pas en D8 (j'aurais été surpris par le contraire, compte tenu de tous les changements architecturaux dans la couche de thème).

Des idées?

Question bonus: est-il possible de définir une telle fonction dans un module, afin de pouvoir la publier publiquement sans que les utilisateurs ne modifient leurs thèmes?

8
Sifro

Vous pouvez implémenter le nouveau hook hook_theme_suggestions_HOOK_alter() .

Modifie les suggestions nommées pour un crochet de thème spécifique.

Ce crochet permet à n'importe quel module ou thème de fournir des suggestions de nom de fonction ou de modèle de thème alternatif et de réorganiser ou de supprimer les suggestions fournies par hook_theme_suggestions_HOOK () ou par des invocations antérieures de ce crochet.

Vous pouvez l'utiliser comme ça

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

Vous pouvez l'implémenter dans un module ou un thème

13
Clive