Come implementare i formattatori di campo per le proprietà dell'entità


16

Ho creato un'entità personalizzata utilizzando l' API Entity che ha determinate proprietà definite hook_schema()e anche dichiarate in entityPropertyInfo()una classe che si estende EntityDefaultMetadataController.

Fin qui tutto bene.

Ora vorrei che gli utenti potessero personalizzare se e come queste proprietà vengono visualizzate quando visualizzano le entità, quindi ho implementato hook_field_extra_fields () e le ho dichiarate.

Quindi, nel mio controller che si estende EntityAPIControllerho aggiunto le proprietà alla matrice $ content in buildContent()as, delineato qui .

In realtà funziona abbastanza bene e le proprietà sono rese e rispettano l'ordine e le impostazioni di visibilità in "Gestisci display".

Tuttavia, non riesco a capire come aggiungere impostazioni in Gestisci display per personalizzare il posizionamento dell'etichetta ( inline/above/hidden) e, soprattutto, come specificare i formattatori personalizzati per queste proprietà.

Qualche indizio?


1
Le proprietà supportano persino i formattatori? Dato che "Nodo" non ha "Titolo" in "Gestisci display", la mia prima ipotesi sarebbe no. +1 per una buona domanda però.
Letharion,

Le proprietà dell'entità non supportano i formattatori, no. Dovresti implementare l'intero meccanismo da solo
Clive

Temevo che fosse così
Alex Weber,

Risposte:


7

È possibile creare un modulo fornendo un " property" tipo di campo. Memorizza la proprietà da formattare come impostazione di istanza e quindi applica un formattatore a tale. Dovrebbe essere relativamente semplice. Il modulo di relazione ha un modulo di campo fittizio che potrebbe aiutarti a capire come codificare questo.


1
Il modulo Campo proprietà entità è un altro punto di partenza per questo approccio.
andrewmacpherson,

1

come si può vedere nella field_ui_display_overview_formnella modules/field_ui/field_ui.admin.incpagina Display settingriempirà con $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');

in questa funzione sono presenti due loop che creano la pagina:

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

e

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

e solo nel primo ciclo che scorre nei campi ci sono opzioni per labeleformatter

quindi se vuoi questa funzionalità sulle tue proprietà (come diceva @Clive):

Dovresti implementare l'intero meccanismo da solo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.