Il y a actuellement plusieurs manières de générer des Display avec Drupal. Les développeurs plus expérimentés utilisent principalement Display Suite. Dans ce post, nous allons voir comment générer quelques output en fonction du format sélectionné avec Display Suite, et aussi modifier des view modes des champs existant.
Il faut tout d'abord télécharger le module Display Suite (DS) et installer au moins DS et DS UI, mais il est conseillé d’activer toute la liste suivante. Comme dépendance il y a aussi le module Devel, et pour travailler avec des hooks nous allons créer un module customisé (main.module)
Dans notre module nous allons travailler principalement avec deux hooks :
- Modification des view modes des champs existant (hook_entity_view_mode_alter )
Changer le view mode d’une entité dans un certain display. - Génération des champs avec Display Suite (hook_ds_fields_info)
Création/définition des champs avec certaines règles dans les displays.
Nous allons faire un exemple pour le premier cas où nous allons utiliser un type de contenu déjà existant (page), et un champ checkbox qui doit être créé depuis le backoffice (admin/structure/types/manage/page) qui s’appelle Checkfield (field_checkfield), du type "liste des integers" et allowed values = 1|Yes
Pour l’exemple dans notre hook nous allons modifier le display du type full (/admin/structure/types/manage/page/display/full), du display teaser (/admin/structure/types/manage/page/display/teaser), nous ferons une vérification du $view_mode, du champ “field_checkfield”, il montrera une image ou une autre. Pour cet exemple il y a la même image, mais il est possible de changer les dimensions pour chaque cas.
Si le champ Checkfield est coché dans le front office, l’image cat_image (dimension 40x40) apparaîtra de cette façon.
Pour le deuxième cas, il va falloir configurer les options du display @admin/structure/types/manage/page/display.
Par défaut, plusieurs thèmes d’administration n’offrent pas un layout propre et préparé, donc dans l’onglet « Custom Display Settings » il faut cocher « Full Content » et « Teaser » pour les activer.
Ensuite, dans chaque formulaire (admin/structure/types/manage/page/display/full), sélectionnez un layout (obligatoire pour faire marcher Display Suite)
Ensuite, nous allons créer un autre hook dans le module customisé où nous définirons deux champs différents. Faire attention au deuxième “Variable Field…” parce qu’il a deux formatters que nous pouvons voir après dans le formulaire d’administration du display, pour les sélectionner.
Chaque champ a une fonction de callback pour imprimer ce que nous voulons dans chaque cas. Encore autre fois, nous allons vérifier si la checkbox est cochée ou pas, dans le première exemple, pour montrer une image de 200x200
Et dans le deuxième, nous montrons seulement du texte HTML pour chaque format diffèrent.
Vous l'avez peut-être remarqué, dans ce dernier exemple, nous avons utilisé un droit customisé…. Pour compléter cela, je vais vous montrer comment créer ce droit dans le module main.module
Il est important d’activer notre nouveau champ (admin/structure/types/manage/page/display/full)
Customized field for content types
Variable Field depending on selected format. Nous allons sélectionner le deuxième (Second Format)
Dans la page créée avant, nous pourrons voir :
- La grande image du chat (200 x 200) grâce au champ “Customized field for content types”
- Le HTML “Second format selected” grâce au champ “Variable Field…” et sélectionner le deuxième formatter
- La petite image du chat (champ checkfield)