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 & Drupal 9 - Ajouter un champ Media dans un formulaire et l'afficher dans un template

VIa le module media_library_form_element, Voici comment ajouter un champ de type « référence à un media » dans un formulaire personnalisé en utilisant le widget Media Library :

Ajouter un commentaire

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