Bilgi ve Hata Çıktısı — info.tpl
Bu şablon, sitenin tüm bilgi ve hata mesajlarını gösteren ortak kutudur. "Erişim reddedildi", "işlem tamamlandı", "oturum süresi doldu" gibi mesajların hepsi buradan geçer. Tek bir şablon olduğu için yaptığınız her değişiklik sitenin her yerinde görünür.
| Konu | Ayrıntı |
|---|---|
| Üreten kod | msgbox() — engine/modules/functions.php |
| Çıktı yeri | result['info'] — yani main.tpl içindeki {info} |
| Kullanım | Her modülden çağrılabilir (merkezî mesaj kutusu) |
| İzin | Yok — mesajın kendisi ilgili modülün izniyle doğar |
Etiketler — yalnızca iki tane
| Etiket | İçeriği |
|---|---|
{title} | Mesajın başlığı (ör. "Bilgi", "Hata") |
{error} | Mesajın metni — HTML içerebilir (<li> listesi vb.) |
{text} ve {link} YOKTUR
Mesajın kendisi {error} etiketine gider — adı yanıltıcıdır, yalnızca
hata için değil bütün mesajlar için kullanılır. Çok sayıda kaynakta
yanlış olarak {text} yazıldığını görürsünüz; motor onu hiçbir
zaman doldurmaz.
Nasıl çalışır?
msgbox() her çağrıldığında şu adımlar işler:
-
Yeni bir şablon örneği açar
Mevcut sayfanın çıktısını bozmamak için ayrı bir
dle_templatenesnesi kullanır. -
info.tpl'yi yükler ve doldurur
{title}ve{error}etiketlerine değerleri koyar. -
Sonucu
infoalanına eklerresult['info'] .= …— yani üst üste yazmaz, biriktirir.
msgbox() çağrılırsa iki mesaj art arda
basılır. Şablonunuz bunu kaldırabilecek şekilde (ör. bir liste) tasarlanmalıdır;
"her zaman tek mesaj gelir" varsayımıyla yazmayın.
Neden {content} değil, {info}?
| Alan | main.tpl etiketi | Ne için? |
|---|---|---|
result['content'] | {content} | Sayfanın ana gövdesi (haber listesi, form, makale …) |
result['info'] | {info} | Bilgi/hata mesajları — içerikten bağımsız olarak gösterilir |
Bu ayrım sayesinde bir hata, sayfanın içeriğini silmez: örneğin yetkisiz bir kullanıcı bir işlem denediğinde mesaj sayfanın üstünde çıkar, altındaki içerik yerinde kalır.
main.tpl'den {info} silinirse hiçbir mesaj görünmez
Bu etiket kaldırıldığında site çalışmaya devam eder ama bütün
bilgi/hata mesajları sessizce kaybolur. Kullanıcı "kaydettim ama hiçbir şey olmadı"
der; sorun aslında burada olabilir. {info}'yu
Ana Sayfa Şablonu dosyasında mutlaka koruyun.
Örnek
<div class="notice">
<div class="notice__icon" aria-hidden="true">!</div>
<div class="notice__body">
<strong class="notice__title">{title}</strong>
<div class="notice__text">{error}</div>
</div>
</div>
Renk/ikon farkı isteyenler için basit bir yaklaşım: mesaj türünü başlığa göre CSS ile
ayırt etmek yerine {title}'ı olduğu gibi gösterip, kutuya nötr bir stil
verin. Sunucu mesajın "hata" mı "bilgi" mi olduğunu şablona ayrıca bildirmez.
Sık yapılan hatalar
| Hata | Sonuç |
|---|---|
{text} veya {link} kullanmak | Etiket boş kalır, mesaj görünmez |
| Şablona tam HTML belgesi yazmak | Sayfanın ortasında ikinci bir belge oluşur |
| Yalnızca tek mesaja yer verecek tasarım | Biriken mesajlarda biçim bozulur |
{error}'u htmlspecialchars ile sarmak | Mesaj içindeki bağlantı/listeler kırılır (zaten HTML olarak basılır) |
main.tpl'de {info}'yu kaldırmak | Tüm mesajlar görünmez olur |
Kontrol listesi
- Şablon yalnızca
{title}ve{error}kullanıyor. main.tpliçinde{info}etiketi mevcut.- Birden çok mesaj geldiğinde tasarım bozulmuyor.
- Mesaj içindeki HTML (liste, bağlantı) görünür durumda.
- En az bir hata senaryosu (ör. yetki reddi) ile canlıda test ettim.