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ı 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>
Dosya dahil ederken (include/require) mutlaka bu fonksiyonu kullanın. Bu, eklenti pasif durumdayken dosyanın okunmamasını sağlar ve çakışmaları ö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 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();
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!