Como implementar formatadores de campo para propriedades da entidade

16

Criei uma entidade personalizada usando a API de entidade que possui determinadas propriedades definidas hook_schema()e também declaradas em entityPropertyInfo()uma classe que se estende EntityDefaultMetadataController.

Por enquanto, tudo bem.

Agora eu gostaria que os usuários pudessem personalizar se e como essas propriedades são exibidas ao visualizar as entidades, então implementei hook_field_extra_fields () e as declarei.

Então, no meu Controller, que se estende EntityAPIController, adicionei as propriedades à matriz $ content em buildContent()as, descritas aqui .

Na verdade, ele funciona muito bem e as propriedades são renderizadas e respeitam as configurações de ordem e visibilidade em "Gerenciar exibição".

No entanto, não consigo descobrir como adicionar configurações no Manage Display para personalizar o posicionamento da etiqueta ( inline/above/hidden) e, mais importante, como especificar formatadores personalizados para essas propriedades.

Alguma pista?

Alex Weber
fonte
1
As propriedades oferecem suporte a formatadores? Como "Nó" não tem "Título" em "Gerenciar exibição", minha primeira hipótese seria não. +1 para uma boa pergunta.
Letharion
As propriedades da entidade não suportam formatadores, não. Você precisaria implementar todo esse mecanismo você mesmo
Clive
Eu estava com medo de que foi o caso
Alex Weber

Respostas:

7

Você pode criar um módulo fornecendo um " property" tipo de campo. Armazene a propriedade a ser formatada como uma configuração de instância e aplique um formatador a isso. Deve ser relativamente direto. O módulo Relation possui um módulo de campo fictício que pode ajudá-lo a descobrir como codificar isso.

DRUPWAY
fonte
1
O módulo Entity Property Field é outro ponto de partida para essa abordagem.
227156 Andrewmacpherson
1

como você pode ver na field_ui_display_overview_formna modules/field_ui/field_ui.admin.incpágina Display settingvai encher com $instancese $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');

nesta função, existem dois loops que criam a página:

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

e

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

e apenas no primeiro loop que itera nos campos, há opções para labeleformatter

portanto, se você deseja essa funcionalidade em suas propriedades (como disse o @Clive):

Você precisaria implementar todo esse mecanismo

Mohammad Ali Akbari
fonte