Statik Dosyalar ve Modern Shell Yapısı

1. Modern Shell Nedir?

DLE 19.x ile birlikte, güvenlik mimarisi "Modern Shell" adı verilen bir yapıya geçmiştir. Bu yapının en temel kuralı şudur: PHP dosyaları ile statik dosyalar (JS, CSS, Resim) birbirinden tamamen ayrılmalıdır.

Artık /engine/ klasörü altındaki dosyalara tarayıcı üzerinden doğrudan erişim (URL üzerinden) tamamen kapatılmıştır.


2. `/public/` Klasörü: Yeni Eviniz

Eklentilerinize ait tüm statik dosyaları (JS, CSS, Font, Resim) mutlaka /public/ klasörü altında bir alt klasöre koymalısınız.

Neden /engine/ kullanmamalıyım?

Eğer JS dosyanızı /engine/modules/test.js içine koyarsanız, DLE'nin .htaccess kuralları gereği tarayıcı bu dosyayı 403 Forbidden diyerek reddedecektir. Sadece /public/ ve /uploads/ klasörleri dışa açıktır.


3. Dosyaları Sisteme Dahil Etme

Eklentinizde CSS veya JS dosyalarını kodun içine <script> yazarak değil, DLE'nin API'sini kullanarak dahil etmelisiniz. Bu, dosyaların sayfanın en altında toplanmasını ve daha hızlı yüklenmesini sağlar.

PHP ile JS/CSS Kayıt Etme

// engine/inc/myplugin.php içinde
$css_array[] = "public/myplugin/style.css";
$js_array[] = "public/myplugin/script.js";

4. Asset Klasör Yapısı Örneği

Profesyonel bir eklenti için önerilen yapı:

Eklenti_Paketi/
├── engine/
│   └── inc/myplugin.php
└── public/
    └── myplugin/
        ├── css/
        │   └── styles.css
        ├── js/
        │   └── main.js
        └── images/
            └── logo.png

5. Önemli İpucu: URL Erişimi

JS dosyanızın içinde bir resim veya başka bir dosyaya erişirken mutlaka tam yolu veya dle_root değişkenini kullanın:

// Yanlış: ../images/icon.png (Çalışmayabilir)
// Doğru: 
const iconUrl = dle_root + 'public/myplugin/images/icon.png';

Performans Notu

/public/ klasöründeki dosyalar Nginx veya Apache tarafından doğrudan sunulur, PHP yorumlayıcısı devreye girmez. Bu da statik dosyaların çok daha hızlı yüklenmesi ve sunucu yükünün azalması demektir.