노드에 대한 추가보기 모드를 추가하려면 어떻게합니까?


19

사용자 정의 컨텐츠 유형을 작성 중입니다. 기본적으로 노드는 두 가지보기 모드 ( 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;
}

이 노드 유형에 다른보기 모드를 추가하고 싶습니다.

  • 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

다음은 Tim Cosgrove의보기 모드에 대한 프레젠테이션입니다. timcosgrove.net/drupalcon-viewmodes/#1 hook_entity_info_alter 를 사용 하여 새보기 모드를 추가합니다 ( ).
aroo

그 발표는 굉장했습니다.
niksmac


페이지가 사라졌습니다. 슬라이드하지만 현재 위치 : slideshare.net/Phase2Technology/...
카리 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',
       ),

    );
}

나는 당신의 해결책을 사용했습니다. 그것은 좋지만이 후크 customuserblog_view ($ node, $ view_mode)는 작동하지 않았습니다. 그래서 사용자 정의보기 모드에 대한 사용자 정의 tpl을 만들기 위해 anonymous_profile_preprocess_node (& $ vars) 함수와 함께 hook_preprocess_node를 사용했습니다.
Mehrdad201

이 코드에 사용되는 후크에 대한 의견 추가 한
werqious

10

경우 모두 원하는 사용자 정의보기 모드입니다, 다음 엔터티보기 모드가 도움이 될 수 있습니다. 또한 Display Suite 를 사용하면 사용자 지정보기 모드를 쉽게 만들고 새로운 의사 필드를 만들 수 있으며 다양한보기 모드에서 다른 요소를 배치 할 수있는 멋진 끌어서 놓기 인터페이스가 있습니다.

코드에서이 작업을 모두 수행 하려면 예제 모듈의 entity_example 에보기 모드 IIRC가 있습니다. Drupal Commerce에는 사용자 정의보기 모드가있는 여러 사용자 정의 엔티티도 있습니다.


감사하지만 추가 모듈을 설치하는 것은 감사하지 않습니다.이 모듈 덕분에 모듈 코드를 해킹하면 도움이 될 것입니다.
werqious

@werqious 업데이트 답변
Andy

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 폴더에 저장하고 활성화하십시오. 캐시를 지우면 해당 엔터티에 새로운보기 모드가 표시됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.