web-dev-qa-db-ja.com

ノードごとの表示モード(ビューモード)を変更するにはどうすればよいですか?

Drupal 8つのビューモードがCoreでサポートされているため、 エンティティビューモード は廃止されました。使用せずにノードごとにビューモードを変更できるようにしたいと思います Display Suite

DrupalコアまたはDisplay Suiteよりも軽い投稿モジュールを使用するだけでこれを行うことができるかどうか誰かが知っていますか?

理想的には、ノードレベルでUIからビューモードを選択するための選択リストを用意します。

5
itsdarrylnorris

私はDrupal 7でビューモードセレクターモジュールをまさにその目的のために使用しました。私はD8でそれを試していませんが、8.0.0の日付の直後からの開発リリースがあります。

https://www.drupal.org/project/view_mode_selector

5
Les Lim

hook_entity_view_mode_alter のタスクです。

表示されているエンティティの表示モードを変更します。

全ページとしてアクセスしたときにノード123teaser表示モードで自動的にレンダリングできるようにする次の作業サンプルを参照してください。独自のロジック(タイプ、ユーザー、日時など)を追加することもできます。

/**
 * 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からノードのフィールド値を取得できます。したがって、選択リストフィールドまたは分類基準の参照をコンテンツタイプに追加し、その値をノードごとに調整できます。最後に、上記のコードスニペットを使用して、これらの値に応じて表示モードを切り替えることができます。任務完了。

5
leymannx

コンテンツタイプ(ノードタイプ)ごとに表示モードを定義するのは簡単です。Drupal 8はすでにそれを行うことができます。

構造->コンテンツタイプ->ディスプレイの管理に移動します。

Manage Display

ノードに1つの表示モードのみが必要な場合(つまり、特定のタイプのすべてのノードが同じようにレンダリングされる)、デフォルトの表示モードのみを使用して、表示方法を管理します。以下の画像は、より詳細な説明のある画面を示しています。

Explanation

2
Vagner

これは、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;
}
?>
0
joshmiller

編集:Display Suiteを使用して、元の投稿がなしで実現したことを認識しました。この質問に遭遇し、Display Suiteでそれがどのように行われるのか知りたいと思うかもしれない他の人に役立つ場合は、とにかくここに答えを残します。

利用可能な別のオプションは、 Display Suite モジュールを使用することです。私はこれを View Mode Selector モジュールでまだ使用したくなりますが、まだ安定版リリースはありません。 Display Suiteを使用することで、安定したモジュールを扱うだけでなく、安定したモジュールのリリースにのみ適用されるDrupalのセキュリティポリシーも適用されます(アルファ、ベータ、開発モジュールは対象外です)。

個々のノードの表示モードを切り替えるには、次のことを行う必要があります。

  1. Display SuiteおよびDisplay Suite Switch View Modeモジュールをインストールします。これらはどちらもDisplay Suiteモジュールパッケージに含まれています。

enter image description here

  1. 変更するコンテンツ/ノードの編集ページに移動します。編集フォームにはDisplay settingsというタブがあります。このタブ内で、このノードに使用する表示モードを選択できます。

enter image description here

このプロセスのより包括的な説明については、以下を参照してください。 Drupal 8:Display View Modeサブモジュールを使用する方法)でDisplay Suiteを使用する

0
Benjen