it-swarm-ja.com

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

カスタムentityEntity APIhook_schema()で定義され、EntityDefaultMetadataControllerを拡張するクラスentityPropertyInfo()でも宣言される特定のプロパティがあります。

ここまでは順調ですね。

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

次に、EntityAPIControllerを拡張するコントローラーで、buildContent()の$ content配列にプロパティを追加しました。概要は here です。

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

ただし、[ディスプレイの管理]に設定を追加してラベルの位置をカスタマイズする方法を理解できないようです(inline/above/hidden)、そしてさらに重要なことに、これらのプロパティのカスタムフォーマッタを指定する方法。

手がかりはありますか?

16
Alex Weber

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

7
user49

field_ui_display_overview_formmodules/field_ui/field_ui.admin.incにあるように、ページDisplay 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) {
   ...
}

フィールドで反復する最初のループにのみ、labelおよびformatterのオプションがあります

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

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

1