Saat ini saya mencoba untuk mengimplementasikan bidang gambar yang direferensikan simpul pada situs Drupal 7 saya yang akan mengubah itu 'mode tampilan' tergantung pada logika pemrograman sebelum render. Bidang saat ini sedang diberikan pada sejumlah jenis konten melalui pengaturan mode tampilan mereka, yang masing-masing menggunakan formatter bidang 'Rendered node'.
percobaan pertama
Ide pertama saya adalah menerapkan yang berikut ini, mengingat hook adalah hook adalah hook:
function HOOK_field_formatter_view( $entity_type, $entity, $field ... ){
switch ($display['type']) {
case 'node_reference_node':
/* Programatical logic here to modfy field render settings */
break;
}
}
Jelas bertukar HOOK dengan nama modul saya.
Ini tidak benar-benar peduli jika di atas akan memecat sebelum atau setelah fungsi asli node_reference_field_formatter_view
di node_reference.module
karena saya baik akan menimpa keluaran itu seluruhnya atau, mudah-mudahan, memodifikasi nilai-nilai sebelum rendering. Satu-satunya masalah adalah, pengait di atas tampaknya berfungsi hanya pada basis per modul - yaitu tidak di seluruh situs, jadi pada dasarnya itu tidak menyala untuk modul saya.
Sekarang jelas saya bisa menulis formatter bidang saya sendiri untuk menampilkan node yang diberikan. Tapi sepertinya agak sia-sia mengingat sudah ada yang ada.
pendekatan lain
Pendekatan saya yang lain adalah dengan HOOK_preprocess_node
dan HOOK_preprocess_field
tetapi yang pertama tidak mengandung view_mode
informasi apa pun , dan yang terakhir mengandung setidaknya 5 struktur rumit yang berbeda yang semuanya memiliki referensi ke view_mode
properti di tingkat yang berbeda - dan rasanya agak tidak sopan harus memodifikasi masing-masing nilai-nilai. Bahkan ketika saya telah mengubah view_mode
properti tertentu , gambar yang dihasilkan tidak berubah.
pertanyaan
Adakah yang tahu cara bersih untuk masuk sebelum formatter bidang merender (modul kontrib) dan mengubah pengaturannya berdasarkan permintaan per halaman - yaitu dengan tidak harus mengubah pengaturan mode tampilan permanen jenis konten yang sebenarnya?
view_mode
pada hook_preprocess_node
, saya bodoh! Saya ingin tahu apakah hal seperti hook_field_formatter_view_alter()
ini ada di D8 ...
hook_field_formatter_view_alter()
atau serupa untuk mungkin lebih dari satu tahun sekarang, sayangnya tidak ada. FYIhook_preprocess_node()
pasti tidak memilikiview_mode
tersedia untuk itu, itu di$vars['view_mode']
, tidak$vars['node']->view_mode
mana Anda mungkin telah tergoda untuk mencoba.