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
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 :
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