カスタムコンテンツタイプを作成しています。デフォルトでは、ノードは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'));
助言がありますか?
まず、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',
),
);
}
必要なallがカスタムビューモードである場合、 エンティティビューモード が役立ちます。 Display Suite を使用すると、カスタムビューモードの作成、新しい疑似フィールドの作成、さまざまなビューモードでのさまざまな要素のレイアウト用の素敵なドラッグアンドドロップインターフェイスの作成も簡単になります。
これをすべてコードで実行する場合は、 サンプルモジュール のentity_exampleにビューモードIIRCがあります。 Drupal Commerceには、カスタムビューモードを持つ多数のカスタムエンティティもあります。
これは古いトピックであることはわかっていますが、次の方法はほとんどのユースケースで問題なく機能することがわかりました。
これらの簡単な手順で、新しい表示モードで独自のモジュールを作成できます。かなりシンプルです。アトリビューションを提供したいのですが、その根拠をどこで見つけたのか思い出せません。ただし、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フォルダーに保存して有効にします。キャッシュをクリアすると、それぞれのエンティティに新しいビューモードが表示されます。
Display Suiteを使用している場合は、ds_uiモジュールが有効になっていることを確認し、admin/structure/ds/view_modesに移動して、既存のリストのリストを取得し、新しいビューモードを作成します。