Drupal 8つのビューモードがCoreでサポートされているため、 エンティティビューモード は廃止されました。使用せずにノードごとにビューモードを変更できるようにしたいと思います Display Suite 。
DrupalコアまたはDisplay Suiteよりも軽い投稿モジュールを使用するだけでこれを行うことができるかどうか誰かが知っていますか?
理想的には、ノードレベルでUIからビューモードを選択するための選択リストを用意します。
私はDrupal 7でビューモードセレクターモジュールをまさにその目的のために使用しました。私はD8でそれを試していませんが、8.0.0の日付の直後からの開発リリースがあります。
hook_entity_view_mode_alter
のタスクです。
表示されているエンティティの表示モードを変更します。
全ページとしてアクセスしたときにノード123
をteaser
表示モードで自動的にレンダリングできるようにする次の作業サンプルを参照してください。独自のロジック(タイプ、ユーザー、日時など)を追加することもできます。
/**
* Implements hook_entity_view_mode_alter().
*/
function MYMODULE_entity_view_mode_alter(&$view_mode, Drupal\Core\Entity\EntityInterface $entity, $context) {
// Change the view mode to teaser on full page view for node ID 123.
if ($entity->getEntityTypeId() == 'node' && $entity->id() == '123' && $view_mode == 'full') {
$view_mode = 'teaser';
}
}
ご想像のとおり、$entity
からノードのフィールド値を取得できます。したがって、選択リストフィールドまたは分類基準の参照をコンテンツタイプに追加し、その値をノードごとに調整できます。最後に、上記のコードスニペットを使用して、これらの値に応じて表示モードを切り替えることができます。任務完了。
これは、Drupal 7.に似ています。7. template_preprocess_node ()を使用して、レンダリング前にビューモードを変更します。
<?php
/**
* Implements template_preprocess_node()
**/
function THEME_preprocess_node(&$variables) {
$node = $variables['node'];
// Check if a field that lists view modes is asking for
// a different one than currently set. If it is, change it.
// There is a D7 module that might be ported to D8:
// https://www.drupal.org/project/view_mode_field
$variables['#element']['#view_mode'] = 'teaser';
$variables['view_mode'] = 'teaser';
// might need to rework other node variables
$variables['teaser'] = true;
}
?>
編集:Display Suiteを使用して、元の投稿がなしで実現したことを認識しました。この質問に遭遇し、Display Suiteでそれがどのように行われるのか知りたいと思うかもしれない他の人に役立つ場合は、とにかくここに答えを残します。
利用可能な別のオプションは、 Display Suite モジュールを使用することです。私はこれを View Mode Selector モジュールでまだ使用したくなりますが、まだ安定版リリースはありません。 Display Suiteを使用することで、安定したモジュールを扱うだけでなく、安定したモジュールのリリースにのみ適用されるDrupalのセキュリティポリシーも適用されます(アルファ、ベータ、開発モジュールは対象外です)。
個々のノードの表示モードを切り替えるには、次のことを行う必要があります。
Display Suite
およびDisplay Suite Switch View Mode
モジュールをインストールします。これらはどちらもDisplay Suiteモジュールパッケージに含まれています。Display settings
というタブがあります。このタブ内で、このノードに使用する表示モードを選択できます。このプロセスのより包括的な説明については、以下を参照してください。 Drupal 8:Display View Modeサブモジュールを使用する方法)でDisplay Suiteを使用する