Как реализовать средства форматирования полей для свойств объектов

16

Я создал пользовательскую сущность, используя Entity API , у которого есть определенные свойства, определенные hook_schema()и объявленные в entityPropertyInfo()расширении класса EntityDefaultMetadataController.

Все идет нормально.

Теперь я хотел бы, чтобы пользователи могли настраивать отображение и отображение этих свойств при просмотре сущностей, поэтому я реализовал hook_field_extra_fields () и объявил их.

Затем в моем контроллере, который расширяет, EntityAPIControllerя добавил свойства в массив $ content в buildContent()виде, как показано здесь .

На самом деле он работает довольно хорошо, свойства отображаются и учитывают параметры порядка и видимости в «Управлении отображением».

Тем не менее, я не могу понять, как добавить настройки в Manage Display для настройки позиционирования метки ( inline/above/hidden) и, что более важно, как указать пользовательские средства форматирования для этих свойств.

Есть какие-нибудь подсказки?

Алекс Вебер
источник
1
Свойства даже поддерживают форматтеры? Поскольку «Узел» не имеет «Заголовок» в разделе «Управление отображением», мое первое предположение будет «нет». +1 за хороший вопрос.
Летарион
Свойства сущности не поддерживают форматеры, нет. Вам нужно было бы реализовать весь этот механизм самостоятельно
Клайв
Я боялся, что это так
Алекс Вебер

Ответы:

7

Вы можете создать модуль, предоставляющий propertyтип поля " ". Сохраните свойство, которое нужно отформатировать, в качестве параметра экземпляра, а затем примените к нему средство форматирования. Это должно быть относительно просто. Модуль Relation имеет фиктивный модуль поля, который может помочь вам понять, как это кодировать.

DRUPWAY
источник
1
Модуль Entity Property Field является еще одной отправной точкой для этого подхода.
Эндрюмаферсон
1

как вы можете видеть field_ui_display_overview_formна modules/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');

в этой функции есть две петли, которые создают страницу:

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

и

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

и только в первом цикле, который повторяется в полях есть варианты для label иformatter

так что если вы хотите эту функциональность для ваших свойств (как сказал @Clive):

Вам нужно было бы реализовать весь этот механизм самостоятельно

Мохаммед Али Акбари
источник