Как добавить дополнительные режимы просмотра для узла?

19

Я создаю пользовательский тип контента. По умолчанию узлы поддерживают только два режима просмотра ( fullи 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;
}

Я хочу добавить несколько других режимов просмотра для этого типа узла, например:

  • small_box
  • small_box_with_user_pic
  • big_box

и хотите визуализировать узел с кодом следующим образом:

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

Какие-либо предложения?

werqious
источник
2
я нашел это mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes, может быть, это полезно!
Жестокий
Вот презентация Тима Косгроува о режимах просмотра: timcosgrove.net/drupalcon-viewmodes/#1 Вы будете использовать hook_entity_info_alter для добавления новых режимов просмотра ( пример ).
aroo
Эта презентация была потрясающей.
Никсмак
1
Ссылка, упомянутая werqious , перемещена на wunderkraut.com/NowOnWunderkraut/mearra/430
Андрей Руденко,
Страница исчезла. Тем не менее, слайды здесь: slideshare.net/Phase2Technology/…
Kari Kääriäinen

Ответы:

23

сначала мы должны добавить дополнительные режимы просмотра с помощью 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,
      );
    }

// мы можем прикрепить дополнительные функции темы или шаблоны и добавить переменные с помощью 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';
  }
}

// в нашей теме хуков

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

    );
}
werqious
источник
Я использовал ваше решение. это хорошо, но этот хук customuserblog_view ($ node, $ view_mode) не работал. поэтому я использовал hook_preprocess_node с функцией anonymous_profile_preprocess_node (& $ vars), чтобы сделать пользовательский tpl для пользовательского режима просмотра.
Mehrdad201
Я добавил комментарии о
хуках,
10

Если все, что вам нужно, это пользовательские режимы просмотра, то режим Entity View Mode может помочь. Display Suite также упрощает создание пользовательских режимов просмотра, создание новых псевдополей и имеет приятный интерфейс перетаскивания для размещения различных элементов в различных режимах просмотра.

Если вы хотите сделать все это в коде, то entity_example из модуля примеров имеет режим просмотра IIRC. Drupal Commerce также имеет ряд пользовательских сущностей с настраиваемыми режимами просмотра.

Энди
источник
спасибо, но установка дополнительных модулей не приветствуется, спасибо за эти модули, хакерские коды модулей могут дать что-то полезное
werqious
@werqious обновленный ответ
Энди
1

Если вы используете Display Suite, убедитесь, что модуль ds_ui включен, и перейдите к admin / structure / ds / view_modes, чтобы получить список существующих и создать новые режимы просмотра.

Алекс Скрипник
источник
1

Я знаю, что это старая тема, но я нашел следующий метод, который отлично работает в большинстве случаев.

Эти простые шаги помогут вам создать собственный модуль в новом режиме просмотра. Это довольно просто. Я хотел бы предоставить атрибуцию, но я не могу вспомнить, где я нашел основание для этого. Тем не менее, он следует той же логике, что и ответ werqious.

Файл 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,
  );
}

Файл 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

Сохраните эти два файла в папке my_module_view_mode в папке модулей и включите. Очистите кеш, и теперь вы увидите новые режимы просмотра в соответствующих им сущностях.

FranCarstens
источник
чем это отличается от drupal.stackexchange.com/a/37488/13366 ?
Андре Баумайер