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


19

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

助言がありますか?


2
私はこのmearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modesを見つけました多分それは役に立つでしょう!
-werqious

ここでの表示モードについてのティム・コスグローブからプレゼンテーションがある:timcosgrove.net/drupalcon-viewmodes/#1は、あなたが使用されますhook_entity_info_alter新しい表示モード(追加する例を)。
-aroo

そのプレゼンテーションは最高でした。
-niksmac

1
werqiousが言及しているリンクは、wunderkraut.com / NowOnWunderkraut / mearra / 430に移動しました
アンドレイルデンコ

ページはなくなりました。スライドはかかわらず、ここにある: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は、カスタムビューモードの作成、新しい擬似フィールドの作成、およびさまざまなビューモードでさまざまな要素をレイアウトするための優れたドラッグアンドドロップインターフェイスを備えています。

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


感謝しますが、追加のモジュールをインストールすることは歓迎されませんこのモジュールのおかげで、モジュールコードをハッキングすると何か役立つことがあります
-werqious

@werqious更新された回答
アンディ

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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.