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_viewdi node_reference.modulekarena 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_nodedan HOOK_preprocess_fieldtetapi yang pertama tidak mengandung view_modeinformasi apa pun , dan yang terakhir mengandung setidaknya 5 struktur rumit yang berbeda yang semuanya memiliki referensi ke view_modeproperti di tingkat yang berbeda - dan rasanya agak tidak sopan harus memodifikasi masing-masing nilai-nilai. Bahkan ketika saya telah mengubah view_modeproperti 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_modepada 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_modetersedia untuk itu, itu di$vars['view_mode'], tidak$vars['node']->view_modemana Anda mungkin telah tergoda untuk mencoba.