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


7

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

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

回答:


13

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

構成エンティティである他のものと同様に、「コード」に入れるのは非常に簡単です。デフォルトの構成にします。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

おかげで、node、comments、user、blockなどのさまざまなエンティティでビューモードを使用できるようにしたい場合は、これらすべての構成を個別にエクスポートする必要がありますか、または使用して新しいビューモードを作成する方法がありますエンティティAPIの一部の機能。
user2750995 2015年

はい、他のすべてのエンティティが作成されるのと同じ方法で、コードでそれを行うこともできます。問題は、ビューモードを作成するエンティティタイプを知っていることです。モジュールが有効にされたときに一部がすでに存在する可能性があるため、他のものは後で来る可能性があります。drupal.org/node/2430821を参照してください。ここでtoken.moduleの動的ロジックを削除することを提案しました(これは現在まさにこれを行っています)。代わりに、UIでビューモードに名前を付けてトークンで機能するようにする方法を文書化するだけです。 .module。
Berdir

ユーザーがモジュールをアンインストールするときにこのビューモードを自動的に削除する方法
user2750995 2015年

1
これは、config依存関係システムによって既に行われているはずです。そうでない場合、それはあなたが開くべきコアのバグです。ここにリンクしてください。そこでコメントします。
Berdir

1
モジュールをアンインストールしても問題はありませんが、モジュールを再インストールすると、ページに$ view_modeがアクティブな構成にあると表示されるため、インストールできません。これがエラーである場合、構成コンポーネントの問題として投稿する必要がありますか?またはこの問題を解決する方法はありますか?
user2750995

6

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目的のエンティティタイプに置き換えます。


0
$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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.