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

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

Любые предложения?

19 голосов | спросил werqious 19 J000000Thursday12 2012, 10:06:58

5 ответов


23

сначала нужно добавить дополнительные режимы просмотра

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

//мы можем прикреплять дополнительные функции темы или шаблоны и добавлять переменные

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

//в нашей теме hook

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

    );
}
ответил werqious 19 J000000Thursday12 2012, 17:05:37
9

Если all , который вы хотите, это настраиваемые режимы просмотра, то Режим представления объектов может помочь. Display Suite также упрощает создание пользовательских режимов просмотра, создания новых псевдополей и приятного drag & drop для разметки различных элементов в различных режимах просмотра.

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

ответил Andy 19 J000000Thursday12 2012, 12:37:09
5

Вот презентация Тима Косгроува о режимах просмотра: http://timcosgrove.net/drupalcon-viewmodes/#1

Вы будете использовать hook_entity_info_alter , чтобы добавить новые режимы просмотра ( пример ).

ответил aroo 19 J000000Thursday12 2012, 11:37:43
1

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

ответил Alex.Designworks 28 Mayam13 2013, 08:58:49
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 25 MarpmWed, 25 Mar 2015 21:00:35 +03002015-03-25T21:00:35+03:0009 2015, 21:00:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132