Di bawah 'Pesan kesalahan untuk ditampilkan' Saya dapat menyembunyikan kesalahan (seperti yang disarankan untuk situs produksi). Namun apakah mungkin untuk menyembunyikan kesalahan bagi semua orang kecuali peran tertentu?
Di bawah 'Pesan kesalahan untuk ditampilkan' Saya dapat menyembunyikan kesalahan (seperti yang disarankan untuk situs produksi). Namun apakah mungkin untuk menyembunyikan kesalahan bagi semua orang kecuali peran tertentu?
Jawaban:
Kata Pengantar: Jawaban ini pertama kali diposting sebagai jawaban untuk " Bagaimana cara saya menekan pesan peringatan atau kesalahan untuk pengguna situs? ".
Anda dapat menggunakan modul Nonaktifkan Pesan untuk ini. Berikut ini kutipan dari halaman proyeknya:
Memberikan opsi kepada pemilik situs untuk menonaktifkan pesan tertentu yang ditampilkan kepada pengguna akhir. Sistem pesan inti drupal seperti yang ditawarkan oleh drupal_set_message adalah cara terbaik untuk modul untuk mengirim pesan kepada pengguna akhir. Namun tidak semua pemilik situs drupal ingin menunjukkan semua pesan yang dikirim oleh drupal core dan semua modul kepada pengguna mereka. Modul ini memberikan administrator situs cara yang cukup kuat untuk menyaring pesan yang ditampilkan kepada pengguna akhir.
Beberapa fitur-fiturnya adalah:
- Saring pesan yang cocok dengan string teks lengkap dengan tepat.
- Saring pesan yang cocok dengan ekspresi reguler.
- Izin untuk secara khusus menyembunyikan semua pesan dari jenis tertentu dari peran apa pun.
- Nonaktifkan semua pemfilteran untuk pengguna tertentu.
- Nonaktifkan semua pemfilteran untuk jalur tertentu.
- Terapkan penyaringan hanya untuk jalur tertentu.
- Sistem debug untuk mendapatkan pesan dalam HTML tanpa menunjukkannya kepada pengguna akhir.
Tersedia untuk Drupal 6, Drupal 7 atau Drupal 8.
Jika Anda menggunakan fitur ' ekspresi reguler ', Anda harus memastikan bahwa Anda menggunakan ekspresi reguler yang "menangkap" pesan kesalahan yang ingin Anda sadap, seperti dijelaskan juga dalam dokumentasi Komunitas .
Di bawah " Tip: Tetap sederhana. " Pada halaman itu, ada contoh yang bagus, yang terlihat seperti ini:
Sadarilah bahwa sesuatu yang tampak sangat mudah seperti:
Notice: Undefined index: field_txt_student_id in ctools_entity_form_field_content_type_render() (line 96 of [...]entity_form_field.inc).
Memiliki lebih banyak karakter yang tak terlihat di dalamnya daripada yang diperkirakan:
<em class="placeholder">Notice</em>: Undefined index: field_txt_student_id in <em class="placeholder">ctools_entity_form_field_content_type_render()</em> (line <em class="placeholder">96</em> of <em class="placeholder">[...]entity_form_field.inc</em>).
Jadi bungkus saja daging grep dengan regex sederhana "sembarang karakter": ". +" Seperti pada:
.+Notice.+Undefined index:.+ctools_entity_form_field_content_type_render.+entity_form_field.inc.+
Jadi "petunjuk" untuk menghasilkan pesan yang benar, adalah mengecilkan pesan kesalahan yang ingin Anda tangkap, dan menempatkan " . + " Karakter yang sesuai.
Berbicara tentang menyusut, perhatikan bahwa field_txt_student_idtelah dihilangkan dalam ekspresi reguler juga (untuk membuatnya TIDAK bergantung pada nama bidang).
Sebagai contoh lain, anggap Anda ingin menangkap pesan kesalahan ini:
PDOException: di dblog_watchdog () (baris 160 dari /home/dbuser/public_html/yoursitesname.com/modules/dblog/dblog.module).
Dalam hal ini, kemungkinan ekspresi reguler akan terlihat seperti:
.+PDOException.+in dblog_watchdog().+(line 160 of.+/modules/dblog/dblog.module).+
Perhatikan bagaimana saya sengaja tidak memasukkan bagian dari jalur sebelumnya /modules/dblog/dblog.module(sehingga dapat digunakan kembali di situs lain di mana kesalahan yang sama terjadi ...).
Perhatikan juga bahwa Anda harus memikirkan ya atau tidak termasuk 160bagian dari itu: jika modul sedikit berubah sehingga dalam pesan kesalahan itu (misalnya) menjadi garis 161, kesalahan Anda tidak akan dicegat lagi. Untuk menghindarinya, abaikan bagian 160 dari itu, jika itu yang Anda inginkan (secara pribadi saya lebih suka melihat kesalahan yang muncul kemudian, dan kemudian menyesuaikan kembali ekspresi reguler saya).
Jika ekspresi reguler Anda tidak bekerja pada awalnya (= pesan masih muncul), maka itu mungkin karena ada beberapa kesalahan ketik pada ekspresi reguler. Untuk menentukan kesalahan ketik seperti itu, pertama coba dengan ekspresi reguler yang tidak terlalu ketat, meskipun itu hanya untuk mencoba sesuatu seperti itu (untuk menangkap SEMUA pesan yang berisi PDOExceptiondan dblog_watchdog):
.+PDOException.+dblog_watchdog.+
Atau bahkan seperti itu (untuk menangkap SEMUA pesan yang berisi PDOException):
.+PDOException.+
2 ungkapan terakhir ini mungkin akan menekan terlalu banyak pesan, jadi Anda ingin mempersempitnya menjadi satu yang Anda cari.
Ada juga modul Pesan Lebih Baik sebagai alternatif. Namun, untuk D7 (yang merupakan pertanyaan ini), ia hanya memiliki versi Alfa.
Anda dapat memeriksa peran pengguna dengan menggunakan fungsi in_array (). Dalam templat Anda:
<?php global $user; ?>
<?php if (!in_array('YOUR_ROLE', $user->roles)): ?>
<?php if ($messages): ?>
<div id="messages">
<?php print $messages; ?>
</div> </div>
<?php endif; ?>
<?php endif; ?>
Atau Anda dapat melakukannya di fungsi preprocess Anda (tidak yakin apakah variabel pesan dipanggil dengan benar tetapi dapat memberi Anda ide)
function MYTHEME_preprocess_page(&$variables, $hook) {
global $user;
if (!in_array('YOUR_ROLE', $user->roles)){
// This has to be checked, could be something similar.
unset($variables['page']['content']['messages']);
}
}
Sebenarnya ini tidak bisa dilakukan.
Anda dapat menyembunyikan semua pesan untuk pengguna atau peran tetapi masalah utama terletak pada cara drupal mengkategorikan kesalahan.
Kesalahan formulir sama dengan pengecualian database untuk fungsi pesan, jadi jika Anda menyembunyikan kesalahan, Anda juga menyembunyikan pesan kesalahan dari formulir komentar.
Saya ingin seseorang membuktikan kesalahan saya karena saya belum berhasil mencapai pemberitahuan php yang disembunyikan tetapi menunjukkan pemberitahuan formulir pada saat yang sama.
Untuk menghapus pemberitahuan dari situs web Drupal, ikuti langkah-langkah di bawah ini:
None akan menonaktifkan semua pelaporan kesalahan.Errors and warnings akan ditampilkan pada masalah yang paling serius.All messages akan menampilkan semua masalah dan mungkin hanya berguna untuk pengembang.Cara lain untuk menonaktifkan pemberitahuan dan pesan kesalahan melalui kode. Tambahkan kode berikut ke settings.phpfile:
$conf['error_level']=0;
Anda juga dapat mengonfigurasi Drupal untuk hanya mencatat kesalahan yang mengikuti instruksi ini: buka Administration > Configuration > Development > Logging and errorsatau langsung ke lintasan /admin/config/development/loggingdan atur "Pesan kesalahan untuk ditampilkan" menjadi tidak ada . Drupal kemudian masih mencatat kesalahan tetapi tidak menampilkannya kepada pengguna.
Jika Anda memerlukan lebih banyak kontrol, gunakan Disable Messagesmodul ini.
Anda dapat menggunakan modul pesan yang lebih baik . Ini menawarkan konfigurasi berbasis peran dan / atau pencocokan ekspresi reguler untuk menyaring beberapa pemberitahuan.
Anda dapat mengomentari kode ini dalam tema Anda
<?php if ($messages): ?>
<div id="messages"><div class="section clearfix">
<?php print $messages; ?>
</div></div> <!-- /.section, /#messages -->
<?php endif; ?>
atau status_messages elemen tema melayani ini Anda dapat menulis fungsi tema sendiri di template.php
MYTHEME_status_messages(&$variables){}
Ini hanya dapat berpengaruh pada kesalahan pemberitahuan dan peringatan
$messagesbagian berkomentar itu tidak akan ditampilkan untuk admin juga.