Saya memiliki modul khusus yang memformat tampilan bidang gambar, yang dapat menerima banyak nilai. Saya ingin tahu hook apa yang harus saya gunakan untuk menduplikasi nilai pertama dari bidang (misalnya "[image1]"), dan menambahkannya kembali ke awal array (dengan array_unshift()
saya kira) sebelum sisa fungsi saya memformat tampilan / tema bidang.
Jadi apa itu
- [image1]
- [image2]
- [image3]
menjadi
- [image1]
- [image1]
- [image2]
- [image3]
Saya kemudian akan tema mereka secara terpisah, tapi saya pikir saya sudah tahu bagian itu.
Saat ini saya menggunakan hook_field_formatter_view()
, dan telah mencoba untuk menambahkannya ke awal $items
array di bagian atas fungsi, tetapi sepertinya tidak berhasil. Jika saya segera dprint_r()
dengan $items
array yang setelah ini itu menunjukkan, tapi hanya 3 item mendapatkan output; Saya mengasumsikan bahwa jumlah bidang ditentukan di tempat lain.
hook_field_formatter_view
tetapi hanya berjalan sekali per gambar.Jawaban:
Anda ingin hook_field_formatter_prepare_view () sebagai gantinya. Perhatikan kait ini beroperasi pada sekelompok entitas, bukan pada satu entitas.
Berikut cuplikan yang berfungsi. Diperlukan beberapa array-fu untuk tidak menulis loop jelek dari sepuluh baris, karena delta harus dilestarikan secara linier.
sumber
hook_field_formatter_view()
adalah tempat kode Anda membuat output yang ditampilkan kepada pengguna, dan ia menginginkan array yang dapat di render sebagai nilai balik. Jadi hanya proses gambar pertama dua kali dan berikan kelas css yang berbeda atau sesuatu.Sesuatu seperti:
Karena
hook_field_formatter_view()
mengharapkan array yang dapat di-render, dan karena array yang dapat di render ditandai sebagai yang di-render ketika di-render, hanya dengan membuat dua referensi ke objek yang sama akan menyebabkan yang di-render, ditandai sebagai yang di-render, dan kemudian diabaikan di waktu berikutnya.sumber