Làm cách nào để thêm các chế độ xem bổ sung cho một nút?


19

Tôi đang tạo một loại nội dung tùy chỉnh. Theo mặc định, các nút chỉ hỗ trợ hai chế độ xem ( fullteaser):

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

Tôi muốn thêm một số chế độ xem khác cho loại nút này, như:

  • small_box
  • small_box_with_user_pic
  • big_box

và muốn kết xuất nút với mã như thế này:

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

Bất kỳ đề xuất?


2
tôi tìm thấy mearra.com/bloss/juha-niemi/drupal-7-custom-node-view-modes này có lẽ nó hữu ích!
werqious

Dưới đây là phần trình bày từ Tim Cosgrove về các chế độ xem: timcosgrove.net/drupalcon-viewmodes/#1 Bạn sẽ sử dụng hook_entity_info_alter để thêm chế độ xem mới ( ví dụ ).
aroo

Bài thuyết trình đó thật tuyệt vời.
niksmac

1
Liên kết được đề cập bởi werqious được chuyển đến wunderkraut.com/NowOnWunderkraut/mearra/430
Andrey Rudenko

Trang đã biến mất. Slides đang ở đây mặc dù: slideshare.net/Phase2Technology/...
Kari Kääriäinen

Câu trả lời:


23

đầu tiên chúng ta phải thêm các chế độ xem bổ sung với 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,
      );
    }

// chúng tôi có thể đính kèm các hàm hoặc mẫu chủ đề bổ sung và thêm các biến với 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';
  }
}

// trong chủ đề hook của chúng tôi

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

    );
}

Tôi đã sử dụng giải pháp của bạn. nó là tốt nhưng hookuser customgblog_view (nút $, $ view_mode) này không hoạt động. vì vậy tôi đã sử dụng hook_pre process_node với hàm nặc danh_profile_pre process_node (& $ vars) để tạo tpl tùy chỉnh cho chế độ xem tùy chỉnh.
Mehrdad201

Tôi đã thêm nhận xét về các móc được sử dụng trong mã này
werqious

10

Nếu tất cả những gì bạn muốn là chế độ xem tùy chỉnh, thì Chế độ xem thực thể có thể giúp đỡ. Display Suite cũng giúp bạn dễ dàng tạo các chế độ xem tùy chỉnh, tạo các trường giả mới và có giao diện kéo và thả đẹp để bố trí các thành phần khác nhau trong các chế độ xem khác nhau.

Nếu bạn muốn thực hiện tất cả điều này bằng mã, thì entity_example từ mô-đun Ví dụ có chế độ xem IIRC. Drupal Commerce cũng có một số thực thể tùy chỉnh với chế độ xem tùy chỉnh.


cảm ơn, nhưng cài đặt các module bổ sung không được đánh giá cao nhờ cho module này hack mã mô-đun có thể đưa ra một cái gì đó hữu ích
werqious

@werqious cập nhật câu trả lời
Andy

1

Nếu bạn đang sử dụng Display Suite, hãy đảm bảo rằng mô-đun DS_ui được bật và đi tới admin / architecture / ds / view_modes để có danh sách các chế độ xem hiện có và tạo chế độ xem mới.


1

Tôi biết đây là một chủ đề cũ hơn, nhưng tôi đã tìm thấy phương pháp sau để hoạt động tốt cho hầu hết các trường hợp sử dụng.

Các bước đơn giản này sẽ đưa bạn qua việc tạo mô-đun của riêng bạn với chế độ xem mới. Nó khá đơn giản. Tôi rất muốn cung cấp thẩm quyền, nhưng tôi không thể nhớ nơi tôi đã tìm thấy cơ sở cho việc này. Mặc dù vậy, nó cũng tuân theo logic như câu trả lời của người sói.

Tệp 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,
  );
}

Tệp 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

Lưu hai tệp này trong thư mục my_module_view_mode của bạn trong thư mục mô-đun và bật. Xóa bộ nhớ cache của bạn và bây giờ bạn sẽ thấy các chế độ xem mới trong các thực thể tương ứng của chúng.


Điều này khác với drupal.stackexchange.com/a/37488/13366 như thế nào?
Andre Baumeier 30/03/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.