Saya punya beberapa tipe simpul yang masing-masing direferensikan ke perbendaharaan istilah taksonomi yang berbeda. Untuk kategori yang ditampilkan, saya menggunakan modul taxonomy_display.
Sebagai contoh, kami memiliki dua kategori: isyarat dan bola bilyar.
Isyarat memiliki harga dari, harga hingga dan jenis filter kayu. Tetapi bola tidak memiliki filter jenis kayu.
Jadi saya perlu menghapus jenis kayu filter jika taxonomy_term tid direferensikan ke kosa kata bola bilyar.
Jadi, saya perlu menghapus salah satu dari banyak filter yang terpapar secara terprogram.
function modulename_views_pre_view(&$view, &$display_id, &$args) {
// Some custom logic wich field_info_instances checking ...
$filter_field = 'filter_id';
// Removes from everywhere where i can find filter or filters properties
unset($view->display[$view->current_display]->display_options['filters'][$filter_field]);
unset($view->display[$view->current_display]->handler->options['filters'][$filter_field]);
unset($view->display_handler->display->display_options['filters'][$filter_field]);
unset($view->display_handler->options['filters'][$filter_field]);
}
Bidang filter berhasil dihapus, tetapi saya mendapat pemberitahuan php:
Notice: Undefined index: field_wood_reference_tid in function views_handler_filter_term_node_tid->exposed_validate()
Saya juga mencoba untuk menghapus bidang di hook_pre_execute (), tetapi dengan hasil yang sama:
function modulename_views_pre_execute(&$view) {
$filter_field = 'filter_id';
unset($view->display_handler->handlers['filter'][$filter_field]);
unset($view->filter[$filter_field]);
}
Coba juga dengan metode override_option () seperti di sini - http://groups.drupal.org/node/82219 , tetapi tidak ada hasil sama sekali.
Ada saran? Tolong bantu =)
Terima kasih untuk semua orang atas balasannya tetapi saya masih belum memiliki jawaban. Mungkin ada sesuatu yang tidak jelas? = (
?filter_id=val
, tampilan mengembalikan tampilan kosong atau kesalahan pilihan ilegal ...Jawaban:
Saya akan menggunakan hook_form_alter menggunakan unset pada objek form karena Anda berada dalam contoh Anda untuk elemen yang ingin Anda hapus.
sumber
Berikut ini cuplikan yang diuji yang akan memungkinkan Anda untuk menghapus filter dari tampilan yang dilihat menggunakan form alter seperti yang disebutkan oleh Scott Thomas,
Selain menghapus bidang formulir Anda juga perlu menghapus informasi untuk filter tertentu yang tersedia dalam $ form ['# info'], sehingga itu akan menghapus label juga. Jika Anda menghapus elemen formulir saja maka label filter akan ditampilkan meskipun bidang dihapus, Jadi selalu pastikan bahwa Anda juga menghapus informasi ini.
Ubah ini sesuai dengan kebutuhan Anda. Jika Anda ingin melakukan ini untuk tampilan tertentu maka tambahkan kondisi untuk itu juga seperti,
Di sini $ form_state ['view'] akan memberi Anda objek tampilan saat ini yang sedang diproses.
Semoga ini membantu.
sumber
Ikuti langkah-langkah di bawah ini
Selanjutnya coba bagian kode berikut
tidak disetel ($ form ['# info'] ['your_field_name']); $ form ['your_field_name'] ['# access'] = 'FALSE';
Semoga itu bisa membantu.
sumber
Anda dapat menghapus filter terbuka menggunakan file template juga.
Gunakan perintah ini:
Dalam file template temukan kode ini:
Dan hapus. Filter Anda yang terbuka akan dihapus dari tampilan, tetapi akan tetap berfungsi jika Anda meneruskan argumen yang tepat di URL.
sumber
Perbaiki saya jika saya salah karena saya tidak yakin untuk sepenuhnya memahami masalah Anda. Jadi, Anda ingin menyembunyikan filter terbuka di tampilan tergantung pada nilai filter terbuka lainnya? Jika demikian, Anda dapat mencoba modul Filter Tampilan Dependen . Saya menggunakannya beberapa kali dan berhasil.
Anda dapat memeriksa kami iblis Lullabot ini ulasan tentang modul ini.
Jika Anda benar-benar perlu melakukannya dalam kode, opsi yang terbuka harus bekerja: filter [$ filter_id] -> options ['exposed'] = FALSE;
sumber
$view->display_handler->handlers['filter'][$filter_field]->options['exposed'] = FALSE;
saya memiliki kesalahan fatal -PHP Fatal error: Call to undefined method stdClass::access() in .../view.inc on line 766
. Saya pikir perilakunya benar karena jika filter tidak diekspos, itu juga memerlukan nilai default. Ada ide?Yang berikut ini melakukannya untuk saya di dalam hook_form_alter:
sumber
Metode 1
Dengan menggunakan hook_views_query_alter (). Lihat contoh berikut:
Metode 2
Lihat contoh dengan menggunakan hook_views_pre_execute dan fungsi kustom yang mencoba menemukan kondisi bidang yang tepat dan mengembalikan referensi ke sana:
sumber
Saya menghapusnya dari file template. Timpa views-view.tpl.php dan hapus kode berikut dari dalamnya:
sumber
Saya pikir opnya ada di jalur yang benar. Saya memiliki situasi yang sama tanpa filter terbuka sehingga saya tidak bisa menggunakan metode hook_form_alter. Berikut adalah beberapa contoh kode untuk orang lain yang menemukan ini:
Objek tampilan tidak memiliki
remove_item
fungsi tetapi hanya menyatakan dalam kode yang Anda dapat mengaturnya menjadi nol untuk menghapus item termasuk filter:views/includes/view.inc
on line2526
.Ini adalah contoh lengkap untuk siapa saja yang menargetkan tampilan dan tampilan tertentu:
sumber