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?


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.