Dans Drupal 8 modes de vues sont pris en charge par Core, ce qui rend modes de vue d'entité obsolètes. J'aimerai avoir la possibilité de changer mon mode de vue par nœud sans utiliser - Display Suite .
Est-ce que quelqu'un sait si je peux le faire en utilisant uniquement Drupal core ou un module de contribution plus léger que Display suite pour?
Idéalement, j'aurai une liste de sélection pour choisir mon mode d'affichage dans l'interface utilisateur au niveau du nœud.
J'ai utilisé le module View Mode Selector dans Drupal 7 dans ce but précis. Je ne l'ai pas essayé dans D8, mais il existe une version de développement juste après la date 8.0.0.
C'est une tâche pour hook_entity_view_mode_alter
.
Modifiez le mode d'affichage d'une entité affichée.
Consultez l'exemple de travail suivant qui permet automatiquement au noeud 123
être rendu dans le mode de vue teaser
lors d'un accès en pleine page. Vous pouvez également ajouter simplement votre propre logique (type, utilisateur, date/heure, etc.).
/**
* Implements hook_entity_view_mode_alter().
*/
function MYMODULE_entity_view_mode_alter(&$view_mode, Drupal\Core\Entity\EntityInterface $entity, $context) {
// Change the view mode to teaser on full page view for node ID 123.
if ($entity->getEntityTypeId() == 'node' && $entity->id() == '123' && $view_mode == 'full') {
$view_mode = 'teaser';
}
}
Comme vous pouvez l'imaginer, de $entity
vous pouvez obtenir n'importe quelle valeur de champ d'un nœud. Vous pouvez donc ajouter un champ de liste de sélection ou une référence de taxonomie à votre type de contenu, puis ajuster cette valeur par nœud. Enfin, vous pouvez utiliser l'extrait de code ci-dessus pour changer le mode d'affichage en fonction de ces valeurs. Mission accomplie.
Pour définir un mode d'affichage par type de contenu (types de nœuds) est simple, Drupal 8 peut déjà le faire.
Allez dans Structure -> Type de contenu -> Gérer l'affichage
Si vous voulez un seul mode d'affichage pour votre nœud (je veux dire, tous les nœuds d'un type particulier s'affichent de la même manière), utilisez simplement le mode d'affichage par défaut et déterminez comment il s'affichera. L'image ci-dessous montre un écran avec plus d'explications.
Ceci est similaire à Drupal 7. Vous voudrez utiliser template_preprocess_node () pour changer le mode d'affichage avant le rendu.
<?php
/**
* Implements template_preprocess_node()
**/
function THEME_preprocess_node(&$variables) {
$node = $variables['node'];
// Check if a field that lists view modes is asking for
// a different one than currently set. If it is, change it.
// There is a D7 module that might be ported to D8:
// https://www.drupal.org/project/view_mode_field
$variables['#element']['#view_mode'] = 'teaser';
$variables['view_mode'] = 'teaser';
// might need to rework other node variables
$variables['teaser'] = true;
}
?>
Edit : le message original vient d'être réalisé dit sans en utilisant Display Suite. Laissera la réponse ici de toute façon si elle est utile à d'autres, qui sont tombés sur cette question et souhaiteront peut-être savoir comment cela se fait avec Display Suite.
Une autre option disponible est d'utiliser le module Display Suite . Je serais tenté de l'utiliser sur le module View Mode Selector , qui n'a pas encore de version stable. En utilisant Display Suite, vous aurez non seulement affaire à un module stable, mais vous serez également couvert par la politique de sécurité de Drupal qui ne s'applique qu'aux versions de module stables (les modules alpha, bêta et dev ne sont pas couverts).
Pour changer de mode d'affichage sur des nœuds individuels, vous devez:
Display Suite
et Display Suite Switch View Mode
modules, tous deux inclus dans le package de modules Display Suite.Display settings
. Dans cet onglet, vous pouvez sélectionner le mode d'affichage à utiliser pour ce nœud.Pour une description plus complète de ce processus, voir: tilisation de Display Suite dans Drupal 8: Comment utiliser le sous-module Switch View Mode