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.
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.
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ı
Eklentiyi kurarken DLE'ye ne yapacağını tüm detaylarıyla bu XML dosyası söyler. İşte gerçek bir v19.x uyumlu yapı:
<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
<name>Eklenti adı</name>
<description>Kısa açıklama</description>
<icon>public/adminpanel/images/reaction.png</icon>
<version>1.2</version>
<dleversion>19.0</dleversion>
<versioncompare>greater</versioncompare>
<upgradeurl></upgradeurl>
<filedelete>0</filedelete>
<needplugin></needplugin>
<mnotice>0</mnotice>
<mysqlinstall><![CDATA[Eklentiyi kurarken]]></mysqlinstall>
<mysqlupgrade><![CDATA[Eklentiyi güncellerken:]]></mysqlupgrade>
<mysqlenable><![CDATA[Eklentiyi aktif ederken:]]></mysqlenable>
<mysqldisable><![CDATA[Eklentiyi devredışı bırakırken:]]></mysqldisable>
<mysqldelete><![CDATA[Eklentiyi kaldırırken:]]></mysqldelete>
<phpinstall><![CDATA[]]></phpinstall>
<phpupgrade><![CDATA[]]></phpupgrade>
<phpenable><![CDATA[]]></phpenable>
<phpdisable><![CDATA[]]></phpdisable>
<phpdelete><![CDATA[]]></phpdelete>
<notice><![CDATA[MYSQL sorguları yazarken aşağıda yer alan servis etiketlerini de kullanabilirsiniz:
{prefix} - bu etiket tabloya ön ek getirir ve bu ön ek ile kullanılmasını sağlar.
{userprefix} - birden fazla site aynı veritabanını kullanıyorsa bu etiketten yararlanılabilirsiniz. -
{charset} - bu etiket ile tabloların kodlama yapısını ayarlayabilirsiniz örneğin utf-8, utf8mb4 gibi.
Lütfen dikkat: Eklentiyi yüklediğinizde, eklenti etkinleştirme tetikleyicisi otomatik olarak etkinleştirilir, ancak eklentiyi kaldırdığınızda eklenti devre dışı bırakma tetikleyicisi kullanılmaz]]></notice>
<file name="engine/modules/eklenti.php">
<operation action="after">
<searchcode><![CDATA[bul ]]></searchcode>
<replacecode><![CDATA[altına ekle ]]></replacecode>
<enabled>1</enabled>
</operation>
<operation action="before">
<searchcode><![CDATA[bul ]]></searchcode>
<replacecode><![CDATA[üstüne ekle]]></replacecode>
<enabled>1</enabled>
</operation>
<operation action="replace">
<searchcode><![CDATA[bul ]]></searchcode>
<replacecode><![CDATA[değiştir ]]></replacecode>
<enabled>1</enabled>
</operation>
<operation action="create">
<replacecode><![CDATA[yeni dosya ]]></replacecode>
<enabled>1</enabled>
</operation>
</file>
<file name="engine/inc/eklenti.php">
<operation action="create">
<replacecode><![CDATA[admin paneli kısmı burada ]]></replacecode>
<enabled>1</enabled>
</operation>
</file>
</dleplugin>
XML Yapısı ve Etiket Açıklamaları:
public/adminpanel/images/reaction.png).mysqlinstall, phpinstall vb. Eklenti eylemlerinde (kurma, silme, aktif etme) çalıştırılacak kodlardır.{prefix} ve karakter seti için {charset} mutlaka kullanılmalıdır.action="after": Kodun altına ekle.action="before": Kodun üstüne ekle.action="replace": Kodu değiştir.action="create": Yeni dosya oluştur (Dosya yoksa sıfırdan yaratır).Sanal müdahale gören veya yeni eklediğiniz dosyaları dahil ederken (`include` veya `require` komutunda) mutlaka bu fonksiyonu kullanın. Bu fonksiyon, eklenti pasif durumdayken dosyanın okunmamasını sağlar ve XML searchcode çakışmalarını kökünden önler.
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 |
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).
<?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']);
?>
$.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");
DLE Yönetim Paneli Bootstrap 3 tabanlı özel native bir iskelet kullanır. Eklentiniz bu yapıya uyduğunda kusursuz ve orijinal bir görünüm elde eder. Tasarımın derinine inen Masterclass rehberimize göz atabilirsiniz.
echoheader("<i class='fa fa-plug position-left'></i><span class=\"text-semibold\">Eklentim</span>", "Ayarlar Paneli");
echo "<div class='panel panel-default'>
<div class='panel-heading'>Genel Ayarlar</div>
<div class='panel-body'>
<form action='' method='post' class='form-horizontal'>
<div class='form-group'>
<label class='control-label col-md-2 col-sm-3'>Başlık</label>
<div class='col-md-10 col-sm-9'>
<input type='text' name='title' class='form-control width-400' value='Test'>
</div>
</div>
<hr>
<button type='submit' class='btn bg-primary-600 btn-sm btn-raised'>Kaydet</button>
</form>
</div>
</div>";
echofooter();
display_errors'ı açın ve DLE günlüklerini (MySQL Errors) kontrol edin.
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!