web-dev-qa-db-fra.com

Remplacer le modèle de thème du module sans implémenter de thème

J'ai un projet sur D8 où je n'utilise aucun thème personnalisé, j'utilise le thème sept par défaut pour tout car il n'y a pas besoin de thème visuel.

Donc, ma question: est-il possible de remplacer le modèle de thème à l'aide du module? sans mettre en œuvre le thème du tout?

J'ai un cas où je veux ajouter une valeur générée par un tiers personnalisé dans le modèle de nœud.

Voici ce que j'ai fait:

Modèle personnalisé implémenté:

function MY_MODULE_theme($existing, $type, $theme, $path) {
  return array(
    'video_teaser' => [
      'template' => 'video_teaser',
      'variables' => NULL,
    ]
  );
}

Implémentation de hook_theme_suggestions_alter:

function MY_MODULE_theme_suggestions_alter(array &$suggestions, array $variables, $hook) {
  if(in_array('node__teaser', $suggestions)){
    $suggestions[] = 'video_teaser';
  }
} 

Et cela fonctionne, au lieu du modèle par défaut, mon video_teser le modèle est utilisé.

MAIS: J'ai un problème lors de la transmission des variables de nœud par défaut à mon modèle personnalisé, elles ne sont pas transmises automatiquement et je n'ai pas pu trouver le moyen de le faire en utilisant l'approche actuelle.

3
otarza

Vous pouvez le faire dans hook_theme() avec le crochet de base 'node':

function MY_MODULE_theme($existing, $type, $theme, $path) {
  return [
    'node__video_teaser' => [
      'template' => 'node--video-teaser',
      'base hook' => 'node',
    ],
  ];
}

Vous n'avez pas besoin de définir le crochet de base. Drupal peut le découvrir automatiquement. L'important est que vous utilisiez le double soulignement, car cela fonctionne exactement comme les suggestions de thème. Après Drupal a trouvé le crochet de base, il clonera les fonctions de prétraitement de ce hook et fournira les variables pour le nœud.

10
4k4