Come posso aggiungere ulteriori modalità di visualizzazione per un nodo?


19

Sto creando un tipo di contenuto personalizzato. Per impostazione predefinita, i nodi supportano solo due modalità di visualizzazione ( fulle 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;
}

Voglio aggiungere alcune altre modalità di visualizzazione per questo tipo di nodo, come:

  • small_box
  • small_box_with_user_pic
  • big_box

e vuoi renderizzare il nodo con codice come questo:

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

Eventuali suggerimenti?



Ecco la presentazione di Tim Cosgrove sulle modalità di visualizzazione: timcosgrove.net/drupalcon-viewmodes/#1 Utilizzerai hook_entity_info_alter per aggiungere una nuova modalità di visualizzazione ( esempio ).
aroo

Quella presentazione è stata fantastica.
Niksmac,

1
Il link menzionato da werqious viene spostato su wunderkraut.com/NowOnWunderkraut/mearra/430
Andrey Rudenko

La pagina è sparita. Le diapositive sono qui: slideshare.net/Phase2Technology/…
Kari Kääriäinen,

Risposte:


23

per prima cosa dobbiamo aggiungere ulteriori modalità di visualizzazione con 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,
      );
    }

// possiamo allegare funzioni o modelli di temi aggiuntivi e aggiungere variabili con 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';
  }
}

// nel nostro tema hook

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

    );
}

Ho usato la tua soluzione. è buono ma questo hook customuserblog_view ($ node, $ view_mode) non ha funzionato. così ho usato hook_preprocess_node con la funzione anonymous_profile_preprocess_node (& $ vars) al fine di creare tpl personalizzati per la modalità di visualizzazione personalizzata.
Mehrdad201

Ho aggiunto commenti sugli hook utilizzati in questo codice
werqious

10

Se tutto ciò che desideri sono le modalità di visualizzazione personalizzate, la modalità di visualizzazione entità può aiutarti. Display Suite semplifica anche la creazione di modalità di visualizzazione personalizzate, la creazione di nuovi pseudo-campi e una bella interfaccia drag & drop per la disposizione di diversi elementi nelle varie modalità di visualizzazione.

Se vuoi fare tutto questo nel codice, allora entity_example dal modulo Esempi ha una modalità di visualizzazione IIRC. Drupal Commerce ha anche un numero di entità personalizzate con modalità di visualizzazione personalizzate.


grazie ma l'installazione di moduli aggiuntivi non è apprezzata grazie a questi moduli hacking codici di moduli può dare qualcosa di utile
werqious

@werqious risposta aggiornata
Andy

1

Se stai usando Display Suite, assicurati che il modulo ds_ui sia abilitato e vai su admin / structure / ds / view_modes per ottenere un elenco di esistenti e creare nuove modalità di visualizzazione.


1

So che questo è un argomento più vecchio, ma ho trovato il seguente metodo per funzionare bene per la maggior parte dei casi d'uso.

Questi semplici passaggi ti guideranno attraverso la creazione del tuo modulo con la nuova modalità di visualizzazione. È abbastanza semplice. Mi piacerebbe fornire l'attribuzione, ma non ricordo dove ho trovato le basi per questo. Tuttavia segue la stessa logica della risposta di werqious.

File 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,
  );
}

File 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

Salvare questi due file nella cartella my_module_view_mode nella cartella dei moduli e abilitare. Svuota la cache e ora vedrai le nuove modalità di visualizzazione nelle rispettive entità.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.