DLE 19.x Eklenti Geliştirme: A'dan Z'ye Master Rehber

Modern DLE Geliştiricisi Olun

Bu rehber, DLE 19.0+ mimarisine uygun, güvenli ve performanslı eklentiler üretmeniz için tasarlanmıştır. Eski (v18 altı) yöntemler ile yeni standartlar karşılaştırmalı olarak sunulmuştur.

1. Temel Felsefe: Sanal Dosya Sistemi

DLE eklenti sisteminin kalbinde Virtual File System (Sanal Dosya Sistemi) yatar. Siz orijinal dosyaları (örn: engine.php) asla değiştirmezsiniz. Bunun yerine DLE'ye "şu dosyada, şu kodu bul ve şu işlemden sonra benim kodumu ekle" dersiniz. DLE çalışma anında bu dosyayı sanal olarak oluşturur ve çalıştırır.

Avantajlar
  • - Çekirdek dosyalar orijinal kalır.
  • - Güncellemelerde kod kaybı yaşanmaz.
  • - Tek tıkla aktif/pasif yapılabilir.
Riskler
  • - Kötü yazılmış eklenti tüm siteyi çökertebilir.
  • - Diğer eklentilerle "searchcode" çakışması olabilir.

2. Eklenti Anatomisi (A'dan Z'ye Dosya Yapısı)

Profesyonel bir eklenti paketi genellikle şu klasör yapısını izler:

Eklenti_Klasoru/
├── plugin.xml           # Eklentinin beyni (Zorunlu)
└── upload/              # Sunucuya yüklenecek dosyalar
    ├── engine/
    │   ├── inc/         # Yönetim paneli dosyaları
    │   ├── modules/     # Site ön yüz (frontend) dosyaları
    │   └── ajax/        # Arka plan işlemleri (Controller tabanlı)
    ├── public/          # [v19.0+] JS, CSS ve Resimler buraya (Modern Shell)
    └── templates/       # TPL dosyaları

3. `plugin.xml`: Kurallar Kitabı

Eklentiyi kurarken DLE'ye ne yapacağını bu XML dosyası söyler. Aşağıda v19.x uyumlu bir örnek verilmiştir:

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
    <name>MWS Master Plugin</name>
    <description>A'dan Z'ye Örnek</description>
    <version>1.0.0</version>
    <dleversion>19.0</dleversion>
    <versioncompare>greater</versioncompare>
    
    <!-- Veritabanı Kurulumu -->
    <mysqlinstall><![CDATA[
        CREATE TABLE IF NOT EXISTS `{prefix}_mws_test` (
            `id` INT NOT NULL AUTO_INCREMENT,
            `title` VARCHAR(255) NOT NULL,
            PRIMARY KEY (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET={charset};
    ]]></mysqlinstall>

    <!-- Dosya Müdahalesi -->
    <file name="engine/engine.php">
        <operation action="after">
            <searchcode><![CDATA[case "stats" :]]></searchcode>
            <replacecode><![CDATA[case "mws" :
    include_once (DLEPlugins::Check(ENGINE_DIR . '/modules/mws_example.php'));
    break;]]></replacecode>
        </operation>
    </file>
</dleplugin>
KRİTİK UYARI: `DLEPlugins::Check()`

Dosya dahil ederken (include/require) mutlaka bu fonksiyonu kullanın. Bu, eklenti pasif durumdayken dosyanın okunmamasını sağlar ve çakışmaları önler.


4. Eski vs Yeni: DLE 19.x Değişiklikleri

Eğer eski rehberlere bakıyorsanız, v19.0 ile gelen şu farklar sizi hata almaya zorlayabilir:

Konu Eski Yöntem (v18-) Modern Yöntem (v19+)
Statik Klasör /engine/skins/images/ /public/assets/ (Dışa Açık)
AJAX Erişim engine/ajax/file.php (Direkt) index.php?controller=ajax&mod=file
Ek Alanlar Pipe (|) ayrıştırılmış string JSON Nesnesi
Güvenlik Bireysel kontroller Merkezi CSRF & user_hash Check

5. Modern AJAX Yapılandırması

DLE 19.x'te AJAX dosyanız /engine/ajax/myplugin.php konumunda olsa bile ona şu şekilde istek atamazsınız: domain.com/engine/ajax/myplugin.php (403/Forbidden hatası alırsınız).

A- Sunucu Tarafı (PHP):

<?php
if (!defined('DATALIFEENGINE')) die("Hacking attempt!");

// Güvenlik: Sadece adminler veya üyeler
if (!$is_logged) die(json_encode(['error' => 'Yetkisiz erişim']));

$action = $_POST['action'];
echo json_encode(['status' => 'ok', 'message' => 'Hello World']);
?>

B- İstemci Tarafı (JS):

$.post(dle_root + "index.php?controller=ajax&mod=myplugin", {
    action: 'test',
    user_hash: dle_login_hash // KRİTİK: user_hash olmadan asla çalışmaz
}, function(res) {
    DLEPush.success(res.message);
}, "json");

6. Yönetim Paneli (Admin UI) Standartları

DLE Yönetim Paneli AdminLTE 3 (Bootstrap 4) kullanır. Eklentiniz bu yapıya uyarsa sırıtmaz.

echoheader("<i class='fa fa-plug'></i> Eklentim", "Ayarlar Paneli");

echo "<div class='card'>";
echo "  <div class='card-header'><h3 class='card-title'>Genel Ayarlar</h3></div>";
echo "  <div class='card-body'>";
echo "      <form action='' method='post'>";
echo "          <input type='text' name='title' class='form-control' value='Test'>";
echo "          <hr>";
echo "          <button type='submit' class='btn btn-success'>Kaydet</button>";
echo "      </form>";
echo "  </div>";
echo "</div>";

echofooter();

7. Bir Eklenti Yapımı: Adım Adım (A'dan Z'ye)

1
Planlama Hangi dosyayı değiştireceksiniz? Hangi tabloya ihtiyacınız var? Senaryoyu kağıda dökün.
2
plugin.xml Hazırla Eklenti bilgilerini ve veritabanı kurulum kodlarını yazın.
3
Upload Klasörünü Doldur PHP dosyalarınızı (inc, modules, ajax) ve TPL şablonlarınızı oluşturun.
4
Paketle ve Yükle Tüm içeriği ZIP yapın. Admin paneli > Eklenti Yönetimi kısmından yükleyin.
5
Hata Ayıkla (Debug) Eğer beyaz sayfa alıyorsanız display_errors'ı açın ve DLE günlüklerini (MySQL Errors) kontrol edin.

Gelişmiş Seviyeye mi Geçmek İstiyorsunuz?

Daha derinlere inmek için "Modern Mimari ve AJAX" ile "JSON Ek Alanlar" sayfalarımızı mutlaka ziyaret edin. DLE 19 ile oynamak, bir motora turbo takmak gibidir!

v19.x Stable A-Z Mastery