web-dev-qa-db-ja.com

ノードにビューモードを追加するにはどうすればよいですか?

カスタムコンテンツタイプを作成しています。デフォルトでは、ノードは2つの表示モード(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'));

助言がありますか?

20
werqious

まず、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',
       ),

    );
}
23
werqious

必要なallがカスタムビューモードである場合、 エンティティビューモード が役立ちます。 Display Suite を使用すると、カスタムビューモードの作成、新しい疑似フィールドの作成、さまざまなビューモードでのさまざまな要素のレイアウト用の素敵なドラッグアンドドロップインターフェイスの作成も簡単になります。

これをすべてコードで実行する場合は、 サンプルモジュール のentity_exampleにビューモードIIRCがあります。 Drupal Commerceには、カスタムビューモードを持つ多数のカスタムエンティティもあります。

10
Andy

これは古いトピックであることはわかっていますが、次の方法はほとんどのユースケースで問題なく機能することがわかりました。

これらの簡単な手順で、新しい表示モードで独自のモジュールを作成できます。かなりシンプルです。アトリビューションを提供したいのですが、その根拠をどこで見つけたのか思い出せません。ただし、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

これら2つのファイルを、モジュールフォルダーのmy_module_view_modeフォルダーに保存して有効にします。キャッシュをクリアすると、それぞれのエンティティに新しいビューモードが表示されます。

1
FranCarstens

Display Suiteを使用している場合は、ds_uiモジュールが有効になっていることを確認し、admin/structure/ds/view_modesに移動して、既存のリストのリストを取得し、新しいビューモードを作成します。

1
Alex Skrypnyk