Drupal 8で特定のエンティティタイプのビューモードをプログラムで追加したいのですが、Drupal 8のビューモードに関するドキュメントがDrupal 7で提供されていたように提供されていないため、これを実装する際に問題が発生しています。モジュールからの参照コアに役立ちます。ありがとう
多くのエンティティにビューモードを追加する場合、何をする必要がありますか?
Drupal 8で特定のエンティティタイプのビューモードをプログラムで追加したいのですが、Drupal 8のビューモードに関するドキュメントがDrupal 7で提供されていたように提供されていないため、これを実装する際に問題が発生しています。モジュールからの参照コアに役立ちます。ありがとう
多くのエンティティにビューモードを追加する場合、何をする必要がありますか?
回答:
表示モードは構成エンティティです。
構成エンティティである他のものと同様に、「コード」に入れるのは非常に簡単です。デフォルトの構成にします。UIで作成し、構成のエクスポート(admin/config/development/configuration/single/export
)をcore.entity_view_mode.$entity_type.$view_mode.yml
実行しconfig/install
てから、ファイルをモジュール内に配置します。
モジュールがインストールされると、表示モードが自動的にインポートおよび作成されます。
そのときはハードコードされていないので、ユーザーが削除できることに注意してください。それを防止したい場合は、実装hook_entity_view_mode_access()
して、すべてのユーザーに対してエンティティへの削除アクセスを拒否できます。
デフォルトでは、モジュールをアンインストールしてもそのビューモードが削除されず、モジュールを再インストールしてもエラーが表示されないため、モジュールの再インストールに問題があります。これを修正するには2つの方法があります。
このような:
dependencies:
enforced:
module:
- yourmodule
Drupal 8(つまりカスタム)で表示モードを作成するためにmanage display
、UIを使用してこれを実行できるようになりました。
admin/structure/display-modes/view
または、プログラムでモジュールに表示モードを提供する場合は、次の手順に従います。
config/install
モジュール内にディレクトリを作成します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
目的のエンティティタイプに置き換えます。
$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();