'Görüntülenecek hata mesajları' altında, hataları gizleyebilirim (üretim siteleri için önerildiği gibi). Ancak, belirli bir rol dışındaki herkes için hataları gizlemek mümkün mü?
'Görüntülenecek hata mesajları' altında, hataları gizleyebilirim (üretim siteleri için önerildiği gibi). Ancak, belirli bir rol dışındaki herkes için hataları gizlemek mümkün mü?
Yanıtlar:
Önsöz: Bu yanıt ilk olarak " Site kullanıcıları için bir uyarı veya hata mesajını nasıl bastırırım? " Sorusuna yanıt olarak gönderildi .
Bunun için Mesajları Devre Dışı Bırak modülünü kullanabilirsiniz . Proje sayfasından bir alıntı:
Son kullanıcılara gösterilen belirli mesajları devre dışı bırakmak için site sahibi seçenekleri sunar. Drupal_set_message tarafından sunulan çekirdek drupal mesaj sistemi, modüllerin son kullanıcılara mesaj göndermesi için mükemmel bir yoldur. Bununla birlikte, tüm drupal site sahipleri, drupal core ve tüm modüller tarafından kullanıcılarına gönderilen tüm mesajları göstermeye hevesli değildir. Bu modül site yöneticilerine son kullanıcılara gösterilen iletileri filtrelemek için oldukça güçlü bir yol sağlar.
Bazı özellikleri:
- Tam metin dizesiyle tam olarak eşleşen iletilere filtre uygulayın.
- Normal bir ifadeyle eşleşen iletileri filtreleyin.
- Belirli bir türdeki tüm iletileri herhangi bir rolden özel olarak gizleme izinleri.
- Belirli kullanıcılar için tüm filtrelemeyi devre dışı bırakın.
- Belirli yollar için tüm filtrelemeyi devre dışı bırakın.
- Filtrelemeyi yalnızca belirli yollar için uygulayın.
- HTML'de mesajları son kullanıcılara göstermeden almak için sistemdeki hataları ayıklayın.
Drupal 6, Drupal 7 veya Drupal 8 için kullanılabilir.
' Normal ifade ' özelliğini kullanıyorsanız, Topluluk belgelerinde de açıklandığı gibi, kesmek istediğiniz hata mesajını "yakalayan" normal bir ifade kullandığınızdan emin olmalısınız .
Bu sayfada " İpucu: Basit tut " un altında, şuna benzeyen harika bir örnek var:
Çok basit görünen bir şeyin şu şekilde olduğunu unutmayın:
Notice: Undefined index: field_txt_student_id in ctools_entity_form_field_content_type_render() (line 96 of [...]entity_form_field.inc).
İçinde beklenenden çok daha fazla görünmeyen karakter var:
<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>).
Bu yüzden grep'in etini basit bir "herhangi bir karakter" regex: ". +" İle olduğu gibi sarın:
.+Notice.+Undefined index:.+ctools_entity_form_field_content_type_render.+entity_form_field.inc.+
Doğru bir mesaj bulmak için "ipucu", yakalamak istediğiniz hata mesajını küçültmek ve uygun durumlarda " . + " Karakterleri koymaktır.
Küçülme hakkında konuşurken field_txt_student_id
, normal ifadede de atlandığını unutmayın (alan adına bağlı OLMAMASI için).
Başka bir örnek olarak, bu hata iletisini yakalamak istediğinizi varsayalım:
PDOException: dblog_watchdog () içinde (/home/dbuser/public_html/yoursitesname.com/modules/dblog/dblog.module satır 160).
Bu durumda, olası bir düzenli ifade şöyle görünmelidir:
.+PDOException.+in dblog_watchdog().+(line 160 of.+/modules/dblog/dblog.module).+
Daha önce kasıtlı olarak yolun bir kısmını dahil etmediğini unutmayın /modules/dblog/dblog.module
(böylece aynı hatanın meydana geldiği başka bir sitede yeniden kullanılabilir ...).
Ayrıca, evet ya da hayır diye düşündüğünüz bir kısmını da vermeniz gerektiğini unutmayın 160
: modül biraz değiştiğinde, hata mesajında (ör.) Çizgi haline gelirse 161
, hatanız artık kesilmeyecektir. Bundan kaçınmak için, 160 parçasını atlayın, eğer tercih ediyorsanız (kişisel olarak önce hatanın o zaman geri gelmesini görmeyi ve sonra normal ifademi yeniden uyarlamayı tercih ederim).
Normal ifadeniz ilk başta çalışmazsa (= mesaj hala görünür), bunun nedeni normal ifadede bazı yazım hataları olması olabilir. O (yakalamak çok böyle bir şeyle denemek için sadece olsa bile böyle yazım hatası, daha az sıkı bir düzenli ifade ile ilk denemede kesin olarak belirlemek için TÜM mesajlar içeren PDOException
ve dblog_watchdog
):
.+PDOException.+dblog_watchdog.+
Ya da böyle ( içeren TÜM mesajları yakalamak için PDOException
):
.+PDOException.+
Bu son 2 ifade muhtemelen çok fazla iletiyi engelleyecektir, bu yüzden onu takip ettiğiniz tek bir iletiye daraltmak istersiniz.
Orada da iyi Mesajları alternatif olarak modülü. Bununla birlikte, D7 için (bu sorunun konusu budur), sadece bir Alfa sürümüne sahiptir.
İn_array () işlevini kullanarak kullanıcı rolünü kontrol edebilirsiniz. Şablonunuzda:
<?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; ?>
Ya da önişleme fonksiyonunuzda yapabilirsiniz (mesaj değişkeninin doğru çağrıldığından emin değilsiniz, ancak size bir fikir verebilir)
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']);
}
}
Aslında bu gerçekten mümkün değil.
Kullanıcılar veya roller için tüm iletileri gizleyebilirsiniz, ancak asıl sorun drupal'ın hataları kategorilere ayırma biçimindedir.
Form hatası, mesajlar işlevi için bir veritabanı istisnasıyla aynıdır, bu nedenle hataları gizlerseniz bir yorum formunun hata mesajlarını da gizlersiniz.
Birisi beni yanlış kanıtlamak isterdim çünkü php bildirimlerini gizleme elde etmeyi başaramadı, aynı zamanda form bildirimlerini göstermeyi başaramadım.
Bir Drupal web sitesinden bildirimi kaldırmak için lütfen aşağıdaki adımları izleyin:
None
tüm hata raporlarını devre dışı bırakır.Errors and warnings
en ciddi problemleri gösterecektir.All messages
tüm sorunları gösterecek ve muhtemelen yalnızca geliştiriciler için yararlı olacaktır.Kod aracılığıyla bildirimi ve hata iletisini devre dışı bırakmanın başka bir yolu. settings.php
Dosyaya aşağıdaki kodu ekleyin :
$conf['error_level']=0;
Drupal'ı yalnızca bu talimatları izleyerek hataları günlüğe kaydedecek şekilde de yapılandırabilirsiniz: Administration > Configuration > Development > Logging and errors
doğrudan yola gidin veya doğrudan yola gidin /admin/config/development/logging
ve "Görüntülenecek hata iletileri" ni yok olarak ayarlayın . Drupal daha sonra hataları günlüğe kaydeder ancak kullanıcılara göstermez.
Daha fazla kontrole ihtiyacınız varsa Disable Messages
modülü kullanın .
Daha iyi mesaj modülünü kullanabilirsiniz . Bazı bildirimleri filtrelemek için rol tabanlı yapılandırma ve / veya düzenli ifade eşlemesi sunar.
Bu kodu temanıza yorumlayabilirsiniz
<?php if ($messages): ?>
<div id="messages"><div class="section clearfix">
<?php print $messages; ?>
</div></div> <!-- /.section, /#messages -->
<?php endif; ?>
veya status_messages tema öğesi bunu sunar. template.php dosyasına kendi tema işlevinizi yazabilirsiniz
MYTHEME_status_messages(&$variables){}
Bu sadece uyarı ve uyarı hatalarını etkileyebilir
$messages
bölüm yorumlanırsa, yöneticiler için de görüntülenmez.