logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

表示モード: ビューモードとフォームモード

20/05/2020, by maria

表示モード

表示モードは(admin/Structure/Display-Mode で利用可能)、コンテンツエンティティを表示または編集するためのさまざまな表現を提供します。表示モードには「ビューモード」と「フォームモード」の2つのタイプがあります。表示モードのこれら2つのタイプ(ビューモードとフォームモード)はどちらも「設定オブジェクト」の例です。以下はエクスポートされたビューモードの例です。

uuid: 15dc7aa9-13fd-4412-9c06-06d09f915d08
langcode: en
status: false
dependencies:
  module:
    - node
id: node.full
label: 'Full content'
targetEntityType: node
cache: true

参照: core.entity_view_mode.node.full.yml

注目すべき主なプロパティは targetEntityType プロパティです。各表示モード(ビューモードまたはフォームモード)は、1つかつ唯一のコンテンツエンティティタイプに関連付けられています。慣例により、複数の表示モードで使用されるラベルがあります。たとえば、標準の Drupal Core インストールプロファイルでは、ノード、カスタムブロック、コメントのコンテンツエンティティタイプのビューモードラベルに「Full」という単語を使用します。

ビューモードと表示

  • まとめて管理される場所: /admin/structure/display-mode/view
  • 「カスタム表示設定」セクションでバンドルごとに有効化される場所(URL 例): /admin/structure/types/manage/page/display(ここで「page」はノードエンティティのバンドル)
  • バンドルごとにビューモード向けに設定される場所(URL 例): /admin/structure/types/manage/page/display/teaser(ここで「page」はノードエンティティのバンドル、「teaser」はビューモード)

ビューモードという概念は Drupal 8 以前からありました。それらは Drupal 7 にも存在しました。Drupal 6 には「ビルドモード」という概念がありました。ビューモードにより、Entity Reference フィールドなどの Drupal サイト構築ツールが、特定のエンティティを特定の方法で要求できるようになります。たとえば、「song」と「artist」がそれぞれノードタイプであり、song が artist への参照フィールドを含むとします。song ノードの「Full」表示では、artist ノードの「teaser」表示を表示する必要があるかもしれません。この例では、「teaser」は artist ノードが使用するビューモードであり、「full」は song が使用するビューモードです。

サイト開発者が artist ノードを teaser ビューモードで表示したい場合、通常はそのサイトビルダーが artist と teaser に固有の設定を構成します。これは、エンティティバンドルの設定ページの「表示管理」タブに移動することで実行できます。標準の Drupal Core インストールプロファイルでのこのページの例は、/admin/structure/types/manage/article/display です。

このページでは、サイト開発者は、各ビューモードに対してバンドルのカスタムフィールド表示設定(フィールドの順序とフィールドフォーマッターの使用)を有効にできます。すべてのビューモードで、すべてのバンドル用の特別な設定を行う必要はありません。この例では、「RSS」と「Teaser」のビューモードのみが独自の設定を持っています。他のすべてのビューモードは「デフォルト」設定にフォールバックします。エンティティタイプのバンドルとビューモードの関連付けは、ビュー表示と呼ばれます。@see EntityViewDisplayInterface

d8-view-modes

フォームモードと(フォーム)オペレーション

  • まとめて管理される場所: /admin/structure/display-mode/form
  • バンドルごとに有効化される場所(URL 例): /admin/structure/types/manage/page/form-display(ここで「page」はノードエンティティのバンドル)
  • バンドルのフォームモード向けに設定される場所(URL 例): /admin/structure/types/manage/page/form-display/simple(ここで「page」はノードエンティティのバンドル、「simple」はフォームモード)。

ビューモードと同様に、フォームモードは同じコンテンツエンティティバンドルで異なるフィールド設定を作成する方法です。フォームモードでは、ビューモードがさまざまなフィールドフォーマッターの順序と設定を許可するのと同様に、複数のフィールドウィジェットの順序と設定のセットが可能です。

 Drupal 7 では、任意のコンテンツタイプの「フィールド管理」タブにフィールドとフィールドウィジェットがあります。現在では、これは「フィールド管理」と「フォーム表示管理」の2つのタブに分割されています。これにより、誰かが任意のコンテンツタイプの追加/編集フォームを見たときの見た目について、より柔軟性が得られます。「表示管理」タブは Drupal 7 と同じままです。コンテンツタイプに加えて、ユーザー、タクソノミー、コメント、カスタムブロックなどの他のエンティティタイプのビューモードも管理できます。

フォームモードに加えて、フォームオペレーションにより、ノード削除フォームなどのフォームにどのクラスを使用するかを定義できます。ノードの削除に使用されるクラスは、ノードの編集に使用されるクラスとは異なります。オペレーションはエンティティのアノテーションで定義されます。

以下は、2つのカスタムフォームオペレーションと「デフォルト」フォームモードを同じ MyEntityForm フォームに表示する例です。このフォームが ContentEntityForm を拡張していることを確認してください。

/**
 * @ContentEntityType(
 *   id = "myentity",
 *   handlers = {
 *     "form" = {
 *       "default" = "Drupal\myentity\Form\MyEntityForm",
 *       "add" = "Drupal\myentity\Form\MyEntityForm",
 *       "edit" = "Drupal\myentity\Form\MyEntityForm",
 *       "delete" = "Drupal\myentity\Form\MyEntityDeleteForm",
 *     },
 *   },
 * )
 */

既存のエンティティで利用可能なフォームオペレーションを追加または変更する必要がある場合は、hook_entity_type_buildhook_entity_type_alter を使用できます。

現在、使用するフォームモードのオペレーションを明示的に設定する必要があります。ビューモード(特定のビューモードのビュー表示が存在しない場合、デフォルトのビュー表示にフォールバックします)とは異なり、フォームモードはデフォルトで「デフォルト」オペレーションを使用しません。これはバグと見なすことができます。#2511720: フォームオペレーションが明示的に設定されていない場合、フォームモードがデフォルトオペレーションを使用できるようにする。 を参照してください。

カスタムフォームモードでフォームを表示するには、ルートで _entity_form を使用します。たとえば、MyEntity のカスタム「編集」フォームを表示するには、このルートを使用します:

entity.myentity.edit_form:
 path: '/myentity/{myentity}/edit'
 defaults:
   _entity_form: myentity.edit
   _title: 'Edit MyEntity'
 requirements:
   _permission: 'edit myentity entities' 

別の例:

よくある必要事項は、ユーザー登録フォームにすべてのユーザーフィールドを表示しないことです。ユーザーが登録されると、追加のフィールドがあるプロフィール編集フォームにアクセスできます。以下はそのような設定の例です:

  • /admin/config/people/account/fields から「フィールドを追加」をクリックします
  • 次の画面で、フィールドタイプの「リスト(テキスト)」を選択します
  • ラベルを付けます: 「購読リスト」
  • 「保存して続行」をクリックします
  • 許可される値のリストを入力します。たとえば:

                     1 | ニュース
                     2 | 重要なお知らせ
                     3 | オファー、割引、セール
                     4 | パートナーメッセージ

  • 「保存」をクリックします
  • このフィールドを必須にします
  • 4つの項目すべてをデフォルトで選択し、「保存」をクリックします。
  • 次に「フォーム表示管理」タブをクリックします
  • フィールドリストの下部に「カスタム表示設定」というセクションがあるので、それを展開します。
  • 「次のフォームモードにカスタム表示設定を使用する」フィールドで、「登録」を有効にして「保存」をクリックします。
  • これで、「登録」という名前の2つ目のタブが表示されます。
  • 「購読リスト」フィールドを「無効」セクションにドラッグして無効にします。「保存」をクリックします。
  • 「購読リスト」フィールドが有効であることを確認するには、「表示管理」タブに移動します。

サイトからログアウトし、登録フォームにアクセスします。購読リストフィールドは表示されません。
ログイン後、購読リストフィールドはプロフィール更新フォームで利用可能になります。