Como adiciono modos de exibição adicionais para um nó?

19

Estou criando um tipo de conteúdo personalizado. Por padrão, os nós suportam apenas dois modos de exibição ( fulle 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;
}

Quero adicionar outros modos de exibição para este tipo de nó, como:

  • small_box
  • small_box_with_user_pic
  • big_box

e deseja renderizar o nó com código como este:

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

Alguma sugestão?

werqious
fonte
2
Encontrei este mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes talvez seja útil!
23412 werqious #
Aqui está a apresentação de Tim Cosgrove sobre os modos de exibição: timcosgrove.net/drupalcon-viewmodes/#1 Você usará hook_entity_info_alter para adicionar um novo modo de exibição ( exemplo ).
Aroo
Essa apresentação foi incrível.
Niksmac 26/11/12
1
O link mencionado por werqious é movido para wunderkraut.com/NowOnWunderkraut/mearra/430
Andrey Rudenko
A página se foi. No entanto, os slides estão aqui: slideshare.net/Phase2Technology/…
Kari Kääriäinen

Respostas:

23

primeiro precisamos adicionar modos de exibição adicionais com 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,
      );
    }

// podemos anexar funções ou modelos de tema adicionais e adicionar variáveis ​​com 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';
  }
}

// no nosso tema de gancho

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

    );
}
werqious
fonte
Eu usei sua solução. é bom, mas esse gancho customuserblog_view ($ node, $ view_mode) não funcionou. então usei hook_preprocess_node com a função anonymous_profile_preprocess_node (& $ vars) para criar tpl personalizado para o modo de visualização personalizado.
Mehrdad201
Eu adicionei comentários sobre ganchos usados ​​neste código
werqious 19/07
10

Se tudo o que você deseja são modos de exibição personalizados, o Modo de Exibição de Entidade pode ajudar. O Display Suite também facilita a criação de modos de exibição personalizados, a criação de novos pseudo-campos e a boa interface de arrastar e soltar para exibir diferentes elementos nos vários modos de exibição.

Se você quiser fazer isso tudo em código, o entity_example do módulo Examples tem um modo de visualização IIRC. O Drupal Commerce também possui várias entidades personalizadas com modos de visualização personalizados.

Andy
fonte
obrigado, mas a instalação de módulos adicionais não é apreciada Obrigado por este módulos de hacking códigos de módulos podem dar algo útil
werqious
@werqious resposta atualizada
Andy
1

Se você estiver usando o Display Suite, verifique se o módulo ds_ui está ativado e vá para admin / structure / ds / view_modes para obter uma lista dos modos de exibição existentes e criar novos.

Alex Skrypnyk
fonte
1

Sei que esse é um tópico mais antigo, mas achei o seguinte método para funcionar perfeitamente na maioria dos casos de uso.

Essas etapas simples o ajudarão a criar seu próprio módulo com o novo modo de visualização. É bem simples. Eu adoraria fornecer atribuição, mas não me lembro onde encontrei a base para isso. Ele segue a mesma lógica da resposta de werqious.

Arquivo 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,
  );
}

Arquivo 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

Salve esses dois arquivos na pasta my_module_view_mode na pasta modules e ative. Limpe seu cache e agora você verá os novos modos de exibição em suas respectivas entidades.

FranCarstens
fonte
como isso é diferente de drupal.stackexchange.com/a/37488/13366 ?
Andre Baumeier