Drupal - créer des suggestions de templates pour des types d'entités personnalisés

Voici comment ajouter des suggestions de template à un type d'entité personnalisé en fonction du mode d'affichage (view_mode).

Ici mon module s’appelle « mon_module » et mon type d'entité personnalisé « resource » :

function monmodule_theme_suggestions_resource(array $variables) {
  $suggestions = [];
  $sanitized_view_mode = str_replace('.', '_', $variables['elements']['#view_mode']);
  $suggestions[] = $variables['theme_hook_original'] . '__' . $sanitized_view_mode;
  return $suggestions;
}

Ci dessous la syntaxe orientée objet utilisable à partir de drupal 11.1, voir même avant, cf : https://kgaut.net/blog/2024/drupal-11-utiliser-la-nouvelle-syntaxe-orie….

<?php
#mon_module/src/Hook/ThemeHooks.php

namespace Drupal\mon_module\Hook;

use Drupal\Core\Hook\Attribute\Hook;

/**
 * Provides hook implementations for Minisite ANCT Territoires d'industrie.
 */
class ThemeHooks {

  /**
   * Provides theme suggestions for entities Site cle en main.
   *
   * @param array $variables
   *   An associative array of variables about renderable elements.
   *
   * @return array
   *   An array of theme suggestion strings based on the processed view mode.
   */
  #[Hook('theme_suggestions_ressource')]
  public static function themmeSuggestionsRessource(array $variables) {
    $suggestions = [];
    $sanitized_view_mode = str_replace('.', '_', $variables['elements']['#view_mode']);
    $suggestions[] = $variables['theme_hook_original'] . '__' . $sanitized_view_mode;
    return $suggestions;
  }

}

 

Ainsi, si j'ai un mode d'affichage « teaser » je pourrais utiliser un template resource--teaser.html.twig à la place de celui par défaut : resource.html.twig

Vous pouvez évidement ajouter autant de suggestions de template que nécessaire, en fonction d'autres paramètres.

Contenus en rapport

Drupal 8 - rendre un formulaire dans un template

La form api de drupal est très puissante, mais pour jouer avec le markup html avec les #prefix et #suffix peut s'avérer rapidement complexe en plus d'être un peu sale au niveau du code.

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...