Bagaimana cara menetapkan pandangan saya untuk mengembalikan 404 menggunakan Global: Null di bawah filter kontekstual?


14

Perilaku Drupal standar adalah untuk melewati semua argumen, baik yang diminta maupun tidak. Terkadang perilaku ini diinginkan. Namun, saya perlu mengembalikan 404 untuk apa pun selain string kueri.

Contoh masalah http://drupal.org/project/modules http://drupal.org/project/modules/google.com <- Ini akan menghasilkan 404; 200 diberikan. Penalti konten duplikat!

The dilihat 404 modul mengasumsikan bahwa secara default Anda tidak ingin argumen melewati. Namun tidak ada versi D7 modul.

Tetapi halaman proyek mengatakan bahwa 404 untuk pandangan juga dapat dicapai dengan menetapkan Global: Null di bawah Argumen.

Jelas di D7 "argumen" sekarang "filter kontekstual", tetapi saya tidak yakin dengan pengaturan apa yang akan ditambahkan ke Global: filter kontekstual nol untuk mendapatkan hasil yang saya inginkan.

Bantuan apa pun akan dihargai.

Jawaban:


22

Dalam filter kontekstual, pilih Tambah ; di kotak dialog yang muncul, pilih Global: Null .

tangkapan layar

Klik Tambah dan konfigurasikan filter kontekstual .

Di kotak dialog yang muncul berikutnya, dalam bidang ketika nilai filter tersedia atau default disediakan , centang Tentukan kriteria validasi , pilih - Validasi dasar - untuk Validator , dan pilih Tampilkan "Halaman tidak ditemukan" untuk mengambil Tindakan jika nilai filter tidak divalidasi . Di fieldset More , centang Gagal validasi dasar jika ada argumen yang diberikan .

tangkapan layar

Saya mengujinya dengan tampilan "Artikel" yang saya buat, dan itu berhasil.

tangkapan layar

tangkapan layar

Argumen "Global: Null" harus menjadi yang terakhir. Jika Anda memerlukan ID pengguna, misalnya, pertama Anda menambahkannya sebagai argumen, dan kemudian menambahkan argumen "Global: Null".

Saya mengubah tampilan "Artikel" untuk menerima ID pengguna sebagai argumen, yang digunakan untuk memfilter daftar node artikel. Tampilan masih berfungsi, karena tidak menerima argumen tambahan.

tangkapan layar

tangkapan layar


1
Ini akan mengembalikan 403 bukan 404 kode kesalahan. Pilih opsi "Tampilkan" Halaman tidak ditemukan "
Eugene Fidelin

Pada utas tentang DO, saya melihat seseorang menyarankan untuk menggunakan arg (1) == NULL; dalam kode validasi php. Apakah ini lebih baik atau hampir sama?
Nigel Waters

1
@EugeneFidelin Saya mengedit tampilan "master", dan saya tidak melihat opsi Show "Page not found" sebagai. Saya mengoreksi jawaban saya.
kiamlaluno

@NigelWaters Lupa jawaban saya sebelumnya. :)Saya mengedit tampilan yang salah, dan tampilan tidak berfungsi sebagaimana mestinya. Tidak perlu menggunakan kode PHP untuk memvalidasi argumen; lihat jawaban yang diperbarui.
kiamlaluno

Saya tidak punya cukup poin untuk berkomentar - jadi posting di sini untuk mengucapkan terima kasih kepada @kiamlaluno Bekerja sangat baik dan sesuatu yang saya membenturkan kepala saya untuk sementara waktu.
Blue Waters

1

Anda dapat melakukan ini dengan menggunakan tampilan di luar fungsi kotak. Di setiap pengaturan filter kontekstual Anda dapat melihat kotak centang "Tentukan kriteria validasi" centang untuk melihat lebih banyak pengaturan.

Kemudian, Anda dapat memilih "validator" berdasarkan kondisi tampilan Anda. Jika Anda ingin memvalidasi kustom, lalu pilih kode php. Kembalikan Benar atau Salah dalam kode php berdasarkan pada kondisi validasi Anda.

Akhirnya pilih "Tindakan yang harus diambil" karena Akses Layar ditolak! Lihat tangkapan layar di bawah ini untuk filter kontekstual nid.

masukkan deskripsi gambar di sini


Apa kode php yang saya tambahkan?
Nigel Waters

Saya hanya menggunakan filter kontekstual Global: null
Nigel Waters

3
JANGAN PERNAH GUNAKAN KODE PHP DALAM PANDANGAN ATAU ALAT UI LAINNYA !!!
hugronaphor
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.