web-dev-qa-db-fra.com

Comment ajouter twig suggestions de modèles par mode d'affichage avec un module personnalisé?

J'ai un module personnalisé où j'essaie d'utiliser des modèles personnalisés twig basés sur l'utilisateur mode d'affichage . Les fichiers de modèles que j'essaye d'ajouter à mon thème sont:

  • user.html.twig
  • user--compact.html.twig
  • user--token.html.twig

Ceux-ci résident dans un dossier appelé MYMODULE/templates/.

Voici mon code de module actuel:

module_name.module:

/**
 * Implements hook_theme().
 */
function MYMODULE_theme($existing, $type, $theme, $path) {

  return [
    'user' => [
      'template'  => 'user',
      'base hook' => 'user',
    ],
    'user__compact' => [
      'template'  => 'user--compact',
      'base hook' => 'user',
    ],
    'user__token' => [
      'template'  => 'user--token',
      'base hook' => 'user',
    ],
  ];

}
3
Prestosaurus

hook_theme_suggestions_HOOK_alter() est plus adapté pour modifier les suggestions existantes.

Dans ce cas, si vous ajoutez simplement une suggestion, sans modifier les préexistantes, vous pouvez utiliser le hook_theme_suggestions_HOOK .

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function MYMODULE_theme_suggestions_user(array $variables) {
  return [
    'user__' . $variables['elements']['#view_mode']
  ];
}

/**
 * Implements hook_theme().
 */
function MYMODULE_theme($existing, $type, $theme, $path) {

  return [
    'user' => [
      'template'  => 'user',
      'base hook' => 'user',
    ],
    'user__compact' => [
      'template'  => 'user--compact',
      'base hook' => 'user',
    ],
    'user__token' => [
      'template'  => 'user--token',
      'base hook' => 'user',
    ],
  ];
}
3
Cesar Moore

Le correctif garantissait l'ajout des suggestions de thèmes via HOOK_theme_suggestions_HOOK_alter() , ainsi que le passage d'un modèle de user à user__full. Voici le code du module mis à jour:

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function MYMODULE_theme_suggestions_user_alter(&$suggestions, $variables) {

  $view_mode = $variables['elements']['#view_mode'];
  $suggestions[] = 'user__' . $view_mode;
}

/**
 * Implements hook_theme().
 */
function MYMODULE_theme($existing, $type, $theme, $path) {

  return [
    'user__full'    => [
      'template'  => 'user--full',
      'base hook' => 'user',
    ],
    'user__compact' => [
      'template'  => 'user--compact',
      'base hook' => 'user',
    ],
    'user__token'   => [
      'template'  => 'user--token',
      'base hook' => 'user',
    ],
  ];
}
2
Prestosaurus