Pada beberapa titik saya menemukan kebutuhan untuk memodifikasi permintaan SQL yang dihasilkan oleh Views, pada akhirnya saya mengesampingkan views_pre_execute
dan mengubah permintaan untuk tampilan tertentu.
Ini terasa seperti peretasan yang buruk bagi saya dan saya ingin tahu apakah ada cara yang lebih elegan dan dapat dipelihara untuk melakukan itu. Ideal akan menjadi cara yang memungkinkan saya untuk secara langsung memodifikasi kueri dari UI Tampilan.
Jawaban:
Anda juga dapat menggunakan
hook_views_query_alter()
untuk mengubah kueri sebelum dijalankan. Saya pikir ini mirip denganhook_views_pre_execute
, tetapi membuatnya lebih mudah untuk memodifikasi kueri. Pada dasarnya Anda mendapatkan akses ke setiap bagian dari kueri melalui array yang diketik. Saya belum menemukan banyak dokumentasi resmi, tetapi ada contoh yang cukup bagus di https://www.appnovation.com/blog/using-hook-views-query-alter . Ini juga pendekatan yang harus saya gunakan untuk memperbaiki bug tanggal di modul Kalender.sumber
hook_views_pre_execute()
dalam modul kustom sederhana.Secara umum ini tergantung pada kasus penggunaan Anda.
Jika Anda ingin memiliki bidang / filter / argumen yang harus berperilaku dengan cara tertentu, disarankan untuk menulis handler untuk itu. Lihat bantuan tampilan lanjutan untuk informasi lebih lanjut.
Jika Anda ingin mengubah beberapa bagian dari kueri, Anda juga dapat menggunakan hook_views_query_alter () . Hal buruknya
hook_views_query_alter()
adalah Anda tidak bisa menggunakan kembali kode di sana.Ini adalah contoh kode yang ditunjukkan dari dokumentasi. Ini memberikan contoh tentang apa yang dapat dilakukan oleh pengait.
sumber
Saya telah menggunakan
hook_views_query_alter()
untuk mengubah permintaan tampilan mysql. Contoh berikut ini diuji di bawah Drupal 7 dengan7.x-3.0
, itu menambahkanORDER BY
klausa kustom ke kueri:sumber
Saya tidak tahu apakah Anda bisa langsung mengubah sql, tetapi Anda bisa menulis field handler Anda sendiri dan membuat kueri Anda sendiri.
sumber