Drupal 8 & Drupal 9 - Views - Utiliser un view_mode spécifique pour un seul élément

Posté le Jeudi 8 octobre 2020 - 11:00

Dans la continuité de Drupal 8 & Drupal 9 - Views - créer un Pager personnalisé.

Sur un de mes projets j'ai une vue qui liste des nœuds de type « Article » avec le mode d'affichage (view_mode) « Teaser », mais j'avais besoin d'afficher le premier élément de la première avec un autre mode d'affichage, le contenu prendra toute la largeur, au lieu d'un tiers pour les suivants.

J'ai pour cela utilisé le hook HOOK_views_post_render :

  1. function MON_MODULE_views_post_render(ViewExecutable $view, &$output, \Drupal\views\Plugin\views\cache\CachePluginBase $cache) {
  2. if ($view->id() === 'front_actualites' && $view->current_display === "page" && \Drupal::request()->query->get('page', 0) === 0) {
  3. $output['#rows'][0]['#rows'][0]['#view_mode'] = 'teaser_pinned';
  4. }
  5. }

avec

$view->id() === 'front_actualites' && $view->current_display === "page"

Je teste si je suis bien sur la bonne vue avec le bon mode d'affichage

\Drupal::request()->query->get('page', 0) === 0

Me permet de tester le paramètre GET ?page= (qui gère la pagination) en fournissant la valeur par défaut 0, afin de tester que je sois bien sur la première page.

Enfin je change le view_mode de la première ligne de mes résultats :

$output['#rows'][0]['#rows'][0]['#view_mode'] = 'teaser_pinned';

 

Aller plus loin ?

 

Commentaires

Simon Georges

Posté le Jeudi 8 octobre 2020 - 15:36

Pourquoi ne pas utiliser un attachment ? ;-)

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...