エンティティプロパティのフィールドフォーマッタを実装する方法


16

エンティティAPI使用して、特定のプロパティが定義され、クラス拡張で宣言されたカスタムエンティティを作成しました。hook_schema()entityPropertyInfo()EntityDefaultMetadataController

ここまでは順調ですね。

ここで、エンティティを表示するときにこれらのプロパティを表示するかどうか、および表示する方法をユーザーがカスタマイズできるようにしたいので、hook_field_extra_fields()を実装して宣言しました。

次に、ここで説明するように、拡張するコントローラーでEntityAPIController、$ content配列にプロパティを追加しました。buildContent()

実際にはかなりうまく機能し、プロパティがレンダリングされ、「ディスプレイの管理」の順序と可視性の設定が尊重されます。

ただし、表示の管理に設定を追加してラベルの配置(inline/above/hidden)をカスタマイズする方法、さらに重要なことには、これらのプロパティのカスタムフォーマッタを指定する方法がわかりません。

手がかりはありますか?


1
プロパティはフォーマッタもサポートしていますか?「Node」には「Manage display」の下に「Title」がないため、最初の推測は「no」になります。良い質問には+1。
レサリオン

エンティティプロパティはフォーマッタをサポートしていません。そのメカニズム全体を自分で実装する必要があります
クライブ

私はそのようなことを恐れていた
アレックスウェーバー

回答:


7

" property"フィールドタイプを提供するモジュールを作成できます。インスタンス設定としてフォーマットするプロパティを保存してから、それにフォーマッターを適用します。比較的簡単なはずです。リレーションモジュールにはダミーフィールドモジュールがあり、これをコーディングする方法を理解するのに役立ちます。


1
エンティティプロパティフィールドのモジュールは、このアプローチのために別の開始点です。
アンドリューマクファーソン

1

あなたがページで見ることができるように、field_ui_display_overview_formでいっぱいになります:modules/field_ui/field_ui.admin.incDisplay setting$instances$extra_fields

$instances = field_info_instances($entity_type, $bundle);
$field_types = field_info_field_types();
$extra_fields = field_info_extra_fields($entity_type, $bundle, 'display');

この関数には、ページを作成する2つのループがあります。

foreach ($instances as $name => $instance) {
   ...
}

そして

foreach ($extra_fields as $name => $extra_field) {
   ...
}

そしてフィールドのみで繰り返す最初のループでありのためのオプションlabelformatter

プロパティでこの機能が必要な場合(@Cliveが言ったように):

そのメカニズム全体を自分で実装する必要があります

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