Як додати додаткові режими перегляду для вузла?


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

Будь-які пропозиції?


2
Я знайшов це mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes, можливо, це корисно!
werqious

Ось презентація Тіма Косгроува про режими перегляду: timcosgrove.net/drupalcon-viewmodes/#1 Ви будете використовувати гак_entity_info_alter для додавання нових режимів перегляду ( приклад ).
aroo

Ця презентація була приголомшливою.
niksmac

1
Посилання, згадане werqious , перенесено на wunderkraut.com/NowOnWunderkraut/mearra/430
Андрій Руденко,

Сторінка пішла. Хоча слайди тут: slideshare.net/Phase2Technology/…
Kari Kääriäinen

Відповіді:


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

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

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

    );
}

Я використав ваше рішення. це добре, але цей гачок customuserblog_view ($ node, $ view_mode) не працював. тож я використовував гачку_preprocess_node з функцією anonymous_profile_preprocess_node (& $ vars) для того, щоб зробити спеціальний tpl для користувальницького режиму перегляду.
Mehrdad201

Я додав коментарі щодо гачків, які використовуються в цьому коді
werqious

10

Якщо все, що ви хочете, це власні режими перегляду, то режим перегляду сутності може допомогти. Дисплейний пакет також дозволяє легко створювати власні режими перегляду, створювати нові псевдополі, а також мати приємний інтерфейс перетягування та перетягування для розміщення різних елементів у різних режимах перегляду.

Якщо ви хочете зробити все це в коді, то у сукупності_приклад модуля "Приклади " є режим перегляду IIRC. Drupal Commerce також має ряд спеціальних організацій із режимами користувацького перегляду.


дякую, але встановлення додаткових модулів не цінується. подяки за цей модуль злому кодів модулів може принести щось корисне
werqious

@werqious оновлена ​​відповідь
Енді

1

Якщо ви використовуєте програму Display Suite, переконайтеся, що модуль ds_ui увімкнено, і перейдіть до адміністрування / структури / 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 у папці модулів та увімкніть. Очистіть кеш і тепер ви побачите нові режими перегляду у відповідних об'єктах.


чим це відрізняється від drupal.stackexchange.com/a/37488/13366 ?
Андре Баум'є
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.