Cara menerapkan formatters bidang untuk properti entitas

16

Saya membuat entitas kustom menggunakan API Entitas yang memiliki properti tertentu yang didefinisikan hook_schema()dan juga dinyatakan dalam entityPropertyInfo(), kelas yang diperluas EntityDefaultMetadataController.

Sejauh ini baik.

Sekarang saya ingin agar pengguna dapat menyesuaikan jika dan bagaimana properti ini ditampilkan ketika melihat entitas jadi saya menerapkan hook_field_extra_fields () dan mendeklarasikannya.

Kemudian, di Kontroler saya yang meluas EntityAPIControllersaya menambahkan properti ke array $ content buildContent()sebagai, diuraikan di sini .

Ini benar-benar berfungsi dengan baik dan properti diberikan dan menghormati pengaturan urutan dan visibilitas di "Kelola Tampilan".

Namun, sepertinya saya tidak tahu cara menambahkan pengaturan di Kelola Tampilan untuk menyesuaikan posisi label ( inline/above/hidden) dan, yang lebih penting, bagaimana menentukan pemformat khusus untuk properti ini.

Ada petunjuk?

Alex Weber
sumber
1
Apakah properti bahkan mendukung pemformat? Karena "Node" tidak memiliki "Judul" di bawah "Kelola tampilan", tebakan pertama saya adalah tidak. +1 untuk pertanyaan yang bagus.
Letharion
Properti entitas tidak mendukung pemformat, tidak. Anda perlu menerapkan seluruh mekanisme itu sendiri
Clive
Saya khawatir itulah masalahnya
Alex Weber

Jawaban:

7

Anda bisa membuat modul yang menyediakan propertytipe bidang " ". Simpan properti yang akan diformat sebagai pengaturan instance dan kemudian terapkan formatter untuk itu. Seharusnya relatif mudah. Modul relation memiliki modul bidang dummy yang dapat membantu Anda dalam mencari tahu cara kode ini.

DRUPWAY
sumber
1
The Entity Lapangan Properti modul titik awal lain untuk pendekatan ini.
andrewmacpherson
1

seperti yang Anda lihat di field_ui_display_overview_formdalam modules/field_ui/field_ui.admin.inchalaman Display settingakan mengisi dengan $instancesdan $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');

dalam fungsi ini ada dua loop yang membuat halaman:

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

dan

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

dan hanya di loop pertama yang beralih di bidang ada opsi untuk labeldanformatter

jadi jika Anda ingin fungsi ini di properti Anda (seperti yang dikatakan @Clive):

Anda perlu menerapkan seluruh mekanisme itu sendiri

Mohammad Ali Akbari
sumber