Bagaimana cara menambahkan mode tampilan tambahan untuk sebuah simpul?

19

Saya membuat jenis konten khusus. Secara default, node hanya mendukung dua mode tampilan ( fulldan 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;
}

Saya ingin menambahkan beberapa mode tampilan lain untuk jenis simpul ini, seperti:

  • small_box
  • small_box_with_user_pic
  • big_box

dan ingin membuat simpul dengan kode seperti ini:

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

Ada saran?

werqious
sumber
2
saya menemukan ini mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes mungkin ini membantu!
werqious
Berikut ini adalah presentasi dari Tim Cosgrove tentang mode tampilan: timcosgrove.net/drupalcon-viewmodes/#1 Anda akan menggunakan hook_entity_info_alter untuk menambahkan mode tampilan baru ( contoh ).
aroo
Presentasi itu luar biasa.
niksmac
1
Tautan yang disebutkan oleh werqious dipindahkan ke wunderkraut.com/NowOnWunderkraut/mearra/430
Andrey Rudenko
Halaman itu hilang. Slides ada di sini: slideshare.net/Phase2Technology/…
Kari Kääriäinen

Jawaban:

23

pertama-tama kita harus menambahkan mode tampilan tambahan dengan 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,
      );
    }

// kami dapat melampirkan fungsi tema atau templat tambahan dan menambahkan variabel dengan 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';
  }
}

// dalam tema kait kami

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

    );
}
werqious
sumber
Saya menggunakan solusi Anda. itu bagus tetapi customuserblog_view hook ini ($ node, $ view_mode) tidak berfungsi. jadi saya menggunakan hook_preprocess_node dengan fungsi anonymous_profile_preprocess_node (& $ vars) untuk membuat custom tpl untuk mode tampilan kustom.
Mehrdad201
Saya telah menambahkan komentar tentang kait yang digunakan dalam kode ini
werqious
10

Jika semua yang Anda inginkan adalah tampilan kustom mode, maka Badan View Mode dapat membantu. Display Suite juga membuatnya mudah untuk membuat mode tampilan kustom, untuk membuat pseudo-bidang baru, dan memiliki antarmuka drag & drop yang bagus untuk meletakkan berbagai elemen dalam berbagai mode tampilan.

Jika Anda ingin melakukan ini semua dalam kode, maka entitas_example dari modul Contoh memiliki mode tampilan IIRC. Drupal Commerce juga memiliki sejumlah entitas khusus dengan mode tampilan kustom.

Andy
sumber
terima kasih tetapi memasang modul tambahan tidak dihargai terima kasih untuk modul ini meretas kode modul dapat memberikan sesuatu yang bermanfaat
werqious
@ jawaban terbaru yang diperbarui
Andy
1

Jika Anda menggunakan Display Suite, pastikan modul ds_ui diaktifkan dan buka admin / structure / ds / view_modes untuk mendapatkan daftar mode tampilan yang ada dan buat.

Alex Skrypnyk
sumber
1

Saya tahu ini adalah topik yang lebih lama, tetapi saya telah menemukan metode berikut ini berfungsi dengan baik untuk sebagian besar kasus penggunaan.

Langkah-langkah sederhana ini akan membawa Anda melalui pembuatan modul Anda sendiri dengan mode tampilan baru. Ini cukup sederhana. Saya ingin memberikan atribusi, tetapi saya tidak ingat di mana saya menemukan dasar untuk ini. Itu memang mengikuti logika yang sama dengan jawaban 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

Simpan dua file ini di folder my_module_view_mode Anda di folder modul Anda dan aktifkan. Bersihkan cache Anda dan sekarang Anda akan melihat mode tampilan baru di masing-masing entitas.

FranCarstens
sumber
apa bedanya dengan drupal.stackexchange.com/a/37488/13366 ?
Andre Baumeier