Bagaimana mungkin modul dapat mendeteksi ketika Drupal mengeluarkan halaman "akses ditolak"?
Saya tahu bagaimana melakukannya dengan Drupal 6; Saya perlu tahu bagaimana cara melakukannya dengan Drupal 7.
16
Anda dapat mengatur halaman mana yang ditampilkan ketika 403 & 404 kesalahan terjadi (admin / pengaturan / pelaporan kesalahan).
Saya kira Anda dapat menambahkan halaman baru di Anda hook_menu()
, lalu atur halaman ini sebagai callback kesalahan 403. Saat panggilan balik menu khusus Anda diklik, Anda tahu Anda mengeluarkan halaman "akses ditolak"!
Saya melakukan ini di Boost 7.x. Itu tidak cantik, tapi itu menyelesaikan pekerjaan.
sumber
Di Drupal 7, fungsi yang mengembalikan header HTTP yang sudah ditetapkan adalah drupal_get_http_header () , yang membutuhkan nama header HTTP sebagai parameter. Melihat kode authorize_access_denied_page () , dan drupal_fast_404 () memperjelas nilai mana yang dilewatkan ke fungsi itu.
Ketika tajuk "Status" dimulai dengan 403 , maka Drupal menampilkan halaman yang ditolak aksesnya.
Pastikan panggilan
drupal_get_http_header('Status')
terjadi terlambat. Memanggil selamahook_init()
terlalu cepat, tetapi memanggilnya saat ituhook_page_alter()
(atau kait preprocess tema apa pun) akan memiliki informasi header yang diperbarui.sumber
drupal_get_http_header('Status')
hasilnya kembaliNULL
.Modul Anda dapat memotong nilai "
Default 403 (access denied) page
" yang dimodifikasi oleh halaman "Administer > Site configuration > Error reporting
":Di
hook_enable
, menggunakanvariable_get
/variable_set
, salin nilai yang ada ke variabel sekunder dan ganti variabel dengan jalur Anda sendiri (yang Anda daftarkan menggunakanhook_menu
).ubah formulir "Pelaporan kesalahan" menggunakan
hook_form_FORM_ID_alter
untuk membaca dari / menulis ke variabel sekunderJika Anda ingin benar-benar tidak terlihat oleh pengguna, panggilan balik halaman Anda ke bisa menelepon
drupal_goto( the_value_of_the_secondary_variable )
.Di
hook_disable
, kembalikan nilai dari variabel sekunder.Dan itu saja, modul Anda akan diberitahukan dengan cara yang bersih (dan tidak terlihat oleh pengguna) ketika "Akses ditolak" dipicu.
sumber
Tentunya Anda bisa menggunakan
get_headers()
fungsi PHP ?Elemen pertama dalam array yang dikembalikan adalah kode respons. Jika mengandung '403' maka Drupal mengembalikan halaman "akses ditolak".
Saya tidak yakin di mana tempat terbaik untuk meneleponnya. Mungkin
hook_exit()
, tergantung kebutuhan Anda:sumber
Ini adalah cara paling sederhana untuk mendeteksi Access Denied (403) dan Page Not Found (404) di Drupal 7.
sumber
Anda dapat menggunakan modul Panel untuk ini.
sumber