web-dev-qa-db-ja.com

エンティティタイプのビューモードを追加する方法

Drupal 8.の特定のエンティティタイプのビューモードをプログラムで追加したいDrupal 8のビューモードに関するドキュメントは、このように提供されていないと思いますDrupal 7のために提供されたため、これを実装する際に問題に直面しています。コアのモジュールからの参照は役に立ちます。ありがとう

多くのエンティティにビューモードを追加する場合、何をする必要がありますか?

7
user2750995

表示モードは構成エンティティです。

構成エンティティである他のものと同様に、「コード」に入れるのは非常に簡単です。デフォルトの構成にします。それをUIで作成し、構成のエクスポート(_admin/config/development/configuration/single/export_)を実行してから、_core.entity_view_mode.$entity_type.$view_mode.yml_ファイルをモジュール内の_config/install_に配置します。

モジュールがインストールされると、表示モードが自動的にインポートおよび作成されます。

その場合はハードコードされていないため、ユーザーが削除できることに注意してください。それを防止したい場合は、hook_entity_view_mode_access()を実装して、エンティティへの削除アクセスをすべてのユーザーに対して拒否できます。

デフォルトでは、モジュールを再インストールすると問題が発生します。これは、モジュールをアンインストールしてもその表示モードが削除されず、再度インストールしたときにエラーが表示されるためです。これを修正するには2つの方法があります。

  • Config/installではなく、config/optionalに構成を移動します。その後、まだ存在しない場合にのみ作成されます。
  • モジュールに強制された依存関係を追加します。これにより、モジュールがアンインストールされたときに確実に削除されます。これが機能するのは、モジュールを最初にインストールしたときにこれを配置していた場合のみです。

このような:

_  dependencies:
    enforced:
      module:
        - yourmodule
_
13
Berdir

Drupal 8(つまり、カスタムmanage display)でビューモードを作成するには、UIを使用してこれを実行できます。

admin/structure/display-modes/view

または、プログラムで表示モードをモジュールに提供する場合は、次の手順に従います。

  1. カスタムモジュールを作成する
  2. モジュール内にconfig/installディレクトリを作成します
  3. config/install内に、core.entity_view_mode.node.my_module.ymlというファイルを作成します

次にcore.entity_view_mode.node.my_module.ymlの中にこれを追加します:

langcode: en
status: true
dependencies:
  module:
    - node
    - my_module
id: node.my_module
label: 'My Module'
targetEntityType: node
cache: true

次に、モジュールをインストールします(モジュールが既にインストールされている場合は、モジュールをアンインストールしてから再インストールする必要があります)。これで、すべてのコンテンツタイプで有効にできるカスタムビューモードができました。

他のタイプのエンティティ(コメント、ユーザーなど)をサポートするには、新しい.ymlファイルを作成し、nodeを目的のエンティティタイプに置き換えます。

6
$entity_type="node"; //The entity for which you want to create the view mode
$view_mode="example"; //The name of the new view mode
$settings=Array();
$settings["id"]=$entity_type.".".$view_mode;
$settings["targetEntityType"]=$entity_type;
$evm=Drupal\Core\Entity\Entity\EntityViewMode::create($settings);
$evm->save();
0
rgpublic