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.

KonuAyrıntı
Üreten kodmsgbox() — engine/modules/functions.php
Çıktı yeriresult['info'] — yani main.tpl içindeki {info}
KullanımHer modülden çağrılabilir (merkezî mesaj kutusu)
İzinYok — 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.)
!
Bu şablonda {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:

  1. Yeni bir şablon örneği açar Mevcut sayfanın çıktısını bozmamak için ayrı bir dle_template nesnesi kullanır.
  2. info.tpl'yi yükler ve doldurur {title} ve {error} etiketlerine değerleri koyar.
  3. Sonucu info alanına ekler result['info'] .= … — yani üst üste yazmaz, biriktirir.
i
Mesajlar birikir — bir kerede birkaç tanesi görünebilir Aynı istekte iki kez 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}?

Alanmain.tpl etiketiNe 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

HataSonuç
{text} veya {link} kullanmakEtiket boş kalır, mesaj görünmez
Şablona tam HTML belgesi yazmakSayfanın ortasında ikinci bir belge oluşur
Yalnızca tek mesaja yer verecek tasarımBiriken mesajlarda biçim bozulur
{error}'u htmlspecialchars ile sarmakMesaj içindeki bağlantı/listeler kırılır (zaten HTML olarak basılır)
main.tpl'de {info}'yu kaldırmakTüm mesajlar görünmez olur

Kontrol listesi

  • Şablon yalnızca {title} ve {error} kullanıyor.
  • main.tpl iç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.