web-dev-qa-db-fra.com

Comment ajouter des modes d'affichage supplémentaires pour un nœud?

Je crée un type de contenu personnalisé. Par défaut, les nœuds ne prennent en charge que deux modes d'affichage (full et teaser):

function mymodule_view($node, $view_mode)
{
    if ($view_mode == 'full') {
         $node->content['#theme']= 'my_full_node_view_theme';
    }

    if ($view_mode == 'teaser') {
          $node->content['#theme']= 'my_teaser_node_view_theme'; 
    }
    return $node;
}

Je veux ajouter d'autres modes d'affichage pour ce type de nœud, comme:

  • small_box
  • small_box_with_user_pic
  • big_box

et souhaitez rendre le nœud avec du code comme celui-ci:

$node = node_load($my_nid);
$output = drupal_render(node_view($node, 'big_box'));

Aucune suggestion?

20
werqious

nous devons d'abord ajouter des modes d'affichage supplémentaires avec hook_entity_info_alter

function customuserblog_entity_info_alter(&$entity_info) {
     $entity_info['node']['view modes']['blog_post_big'] = array(
        'label' => t('simple big  teaser'),
        'custom settings' => TRUE,
      );
    }

// nous pouvons attacher des fonctions de thème ou des modèles supplémentaires et ajouter des variables avec hook_view

function customuserblog_view($node, $view_mode) {
  if ($view_mode == 'blog_post_big') {
   // add some additional variables for template
    $node->content['#theme'] = 'custom_blog_big_teaser_view';
  }
}

// dans notre thème crochet

customuserblog_theme(){
    return array(
      'custom_blog_big_teaser_view'= array(
          'render element' => 'form',
          'template' => 'custom-blog-big-teaser-view',
       ),

    );
}
23
werqious

Si tout que vous voulez est un mode d'affichage personnalisé, alors Entity View Mode peut vous aider. Display Suite permet également de créer facilement des modes d'affichage personnalisés, de créer de nouveaux pseudo-champs et d'avoir une belle interface glisser-déposer pour disposer différents éléments dans les différents modes d'affichage.

Si vous voulez tout faire en code, alors entity_example de le module Exemples a un mode d'affichage IIRC. Drupal Commerce possède également un certain nombre d'entités personnalisées avec des modes d'affichage personnalisés.

10
Andy

Je sais que c'est un sujet plus ancien, mais j'ai trouvé que la méthode suivante fonctionnait très bien pour la plupart des cas d'utilisation.

Ces étapes simples vous permettront de créer votre propre module avec le nouveau mode d'affichage. C'est assez simple. Je serais ravi de fournir une attribution, mais je ne me souviens pas où j'ai trouvé la base de cela. Cela suit la même logique que la réponse de werqious.

Fichier 1: my_module_view_modes.module

<?php
//Add more view modes for content type displays, in addition to default and teaser.
function almagest_view_modes_entity_info_alter(&$entity_info) {

//NB: media_ prefix required.
//You can repeat the following section for any view modes you'd like to create.

// First View Mode
// tag 1 references the entity type, ex. node or file
// tag 3 provides a machine name for your mode
  $entity_info['node']['view modes']['my_view_mode'] = array(
    'label' => t('My View Mode'), // This is what you'll see in your "Manage Display" tab.
    'custom settings' => TRUE,
  );

// Another View Mode    
  $entity_info['file']['view modes']['my_other_view_mode'] = array(
    'label' => t('Another View Mode'),
    'custom settings' => TRUE,
  );
}

Fichier 2: my_module_view_modes.info

name = My Module View Modes
description = Add additional "View Modes" for entities in this module. Helpful for additional displays in views or node rendering.
package = My Modules
version = 7.x - 0.1
core = 7.x

Enregistrez ces deux fichiers dans votre dossier my_module_view_mode dans votre dossier modules et activez. Videz votre cache et vous verrez maintenant les nouveaux modes d'affichage dans leurs entités respectives.

1
FranCarstens

Si vous utilisez Display Suite, assurez-vous que le module ds_ui est activé et accédez à admin/structure/ds/view_modes pour obtenir une liste des modes d'affichage existants et créer de nouveaux.

1
Alex Skrypnyk