Wie füge ich zusätzliche Ansichtsmodi für einen Knoten hinzu?

19

Ich erstelle einen benutzerdefinierten Inhaltstyp. Standardmäßig unterstützen Knoten nur zwei Ansichtsmodi ( fullund 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;
}

Ich möchte einige andere Anzeigemodi für diesen Knotentyp hinzufügen, z.

  • small_box
  • small_box_with_user_pic
  • big_box

und wollen den Knoten mit folgendem Code rendern:

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

Irgendwelche Vorschläge?

wütend
quelle
2
Ich fand diese mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes vielleicht ist es hilfreich!
Werqious
Hier ist die Präsentation von Tim Cosgrove über Ansichtsmodi: timcosgrove.net/drupalcon-viewmodes/#1 werden Sie verwenden hook_entity_info_alter , um einen neuen Ansichts - Modi (add Beispiel ).
Aroo
Diese Präsentation war fantastisch.
Niksmac
1
Der von werqious erwähnte Link wird auf wunderkraut.com/NowOnWunderkraut/mearra/430
Andrey Rudenko am
Die Seite ist weg. Die Folien sind hier: slideshare.net/Phase2Technology/…
Kari Kääriäinen

Antworten:

23

Zuerst müssen wir mit hook_entity_info_alter zusätzliche Anzeigemodi hinzufügen

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

// Wir können zusätzliche Theme-Funktionen oder Templates anhängen und Variablen mit hook_view hinzufügen

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';
  }
}

// in unserem Hakenthema

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

    );
}
wütend
quelle
Ich habe deine Lösung benutzt. es ist gut, aber dieser Hook customuserblog_view ($ node, $ view_mode) hat nicht funktioniert. Daher habe ich hook_preprocess_node mit der Funktion anonymous_profile_preprocess_node (& $ vars) verwendet, um eine benutzerdefinierte tpl für den benutzerdefinierten Ansichtsmodus zu erstellen.
Mehrdad201
Ich habe Kommentare zu den in diesem Code verwendeten Hooks hinzugefügt
werqious
10

Wenn alle Sie benutzerdefinierte Ansicht wollen Modi ist, dann Entity Ansichtsmodus kann helfen. Mit der Display Suite ist es auch einfach, benutzerdefinierte Ansichtsmodi zu erstellen, neue Pseudofelder zu erstellen und eine schöne Drag & Drop-Oberfläche zum Anordnen verschiedener Elemente in den verschiedenen Ansichtsmodi zu haben.

Wenn Sie dies alles im Code tun möchten, hat entity_example aus dem Beispielmodul einen Ansichtsmodus IIRC. Drupal Commerce verfügt auch über eine Reihe von benutzerdefinierten Entitäten mit benutzerdefinierten Ansichtsmodi.

Andy
quelle
Dank aber die Installation zusätzlicher Module ist nicht Vielen Dank für diese Module Hacking - Modul Codes geschätzt hilfreich etwas geben kann
werqious
@werqious aktualisierte Antwort
Andy
1

Wenn Sie Display Suite verwenden, stellen Sie sicher, dass das Modul ds_ui aktiviert ist, und rufen Sie unter admin / structure / ds / view_modes eine Liste der vorhandenen und neuen Ansichtsmodi auf.

Alex Skrypnyk
quelle
1

Ich weiß, dass dies ein älteres Thema ist, aber ich habe festgestellt, dass die folgende Methode für die meisten Anwendungsfälle gut funktioniert.

Diese einfachen Schritte führen Sie durch die Erstellung Ihres eigenen Moduls mit dem neuen Ansichtsmodus. Es ist ziemlich einfach. Ich würde gerne eine Zuschreibung machen, aber ich kann mich nicht erinnern, wo ich die Grundlage dafür gefunden habe. Es folgt jedoch der gleichen Logik wie die Antwort von werqious.

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

Datei 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

Speichern Sie diese beiden Dateien in Ihrem Ordner my_module_view_mode in Ihrem Modulordner und aktivieren Sie. Leeren Sie Ihren Cache und sehen Sie nun die neuen Ansichtsmodi in ihren jeweiligen Entitäten.

FranCarstens
quelle
Wie unterscheidet sich das von drupal.stackexchange.com/a/37488/13366 ?
Andre Baumeier