DataLife Engine (DLE) 17+ Eklenti ve Plugin Geliştirme Rehberi

DataLife Engine 17 ve üzeri sürümler için profesyonel eklenti ve modül geliştirmek amacıyla gereken tüm temel bilgileri, en iyi uygulamaları ve gelişmiş teknikleri içeren eksiksiz bir rehber.


1. Giriş

DataLife Engine (DLE), Rus menşeli güçlü bir içerik yönetim sistemidir. DLE 13.0 sürümüyle birlikte devrim niteliğinde bir eklenti sistemi tanıtılmıştır. Bu sistem, sanal dosya sistemi teknolojisi kullanılarak oluşturulmuş ve orijinal dosyaları değiştirmeden modifikasyon yapılmasına olanak tanır.

Temel Özellikler

  • Tek Tıklama Kurulum: Eklenti kurulumu ve güncellemesi DataLife Engine Kontrol Panelinde tek bir tıklama gerektirir.
  • Sanal Dosya Sistemi: Orijinal dosyalar asla değiştirilmez.
  • Otomatik Güncelleme: DLE 13.0+ otomatik güncelleme sistemine sahiptir.
  • Çakışma Yönetimi: Farklı eklentiler aynı dosyayı değiştirebilir.
  • Hata Kayıt Sistemi: Entegre hata izleme mevcuttur.

2. DLE Eklenti Sistemi (v13.0+)

Sistem Mimarisi

Eklenti sistemi sanal dosya sistemi teknolojisi kullanılarak oluşturulmuştur. Eklentinizde hangi dosyanın etkileneceğini ve gerçekleştirilecek eylemleri tanımlarsınız. Bu bilgilere dayanarak DataLife Engine, bu dosyaların sanal kopyalarını oluşturur.

Eklenti Dosya Yapısı

myplugin.zip
├── install.xml          # Ana eklenti tanım dosyası (ZORUNLU)
├── engine/
│   ├── modules/         # Modül dosyaları
│   ├── inc/             # Admin panel dosyaları
│   └── skins/
│       └── images/      # İkon dosyaları
├── templates/
│   └── Default/         # Şablon dosyaları
└── uploads/             # Ek dosyalar

3. Eklenti XML Yapısı

Temel XML Şablonu

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
    <!-- Eklenti Bilgileri -->
    <name>My Plugin Name</name>
    <description><![CDATA[Plugin açıklaması]]></description>
    <icon>engine/skins/images/myplugin.png</icon>
    <version>1.0</version>
    <dleversion>17.0</dleversion>
    <versioncompare>greater</versioncompare>
    <author>Your Name</author>
    <mysqlinstall><![CDATA[]]></mysqlinstall>
    <mysqlupgrade><![CDATA[]]></mysqlupgrade>
    <mysqlenable><![CDATA[]]></mysqlenable>
    <mysqldisable><![CDATA[]]></mysqldisable>
    <mysqldelete><![CDATA[]]></mysqldelete>
    <file name="engine/engine.php">
        <operation action="before">
            <searchcode><![CDATA[
// Aranacak kod
            ]]></searchcode>
            <replacecode><![CDATA[
// Eklenecek/değiştirilecek kod
            ]]></replacecode>
        </operation>
    </file>
</dleplugin>

4. Eklenti Operasyonları

Operation Actions

Dosyalar üzerinde birkaç eylem gerçekleştirilebilir:

  1. before: Koddan önce ekleme
  2. after: Koddan sonra ekleme
  3. replace: Kodu değiştirme
  4. regex: Düzenli ifade ile değiştirme

Örnek Operasyonlar

<!-- Önce Ekleme -->
<operation action="before">
    <searchcode><![CDATA[$config['version_id'] = "17.0";]]></searchcode>
    <replacecode><![CDATA[
// My plugin code
define('MYPLUGIN_VERSION', '1.0');
    ]]></replacecode>
</operation>

<!-- Değiştirme -->
<operation action="replace">
    <searchcode><![CDATA[$limit = 10;]]></searchcode>
    <replacecode><![CDATA[$limit = 20;]]></replacecode>
</operation>

5. Klasik Modül Sistemi

Include Sistemi

Geliştirdiğiniz PHP scriptlerini şablon dosyalarına {include} etiketiyle dahil edebilirsiniz.

<!-- Basit include -->
{include file="engine/modules/mymodule.php"}

<!-- Parametreli include -->
{include file="engine/modules/mymodule.php?param=value1&variable2=value2"}

<!-- Dinamik parametreler -->
{include file="engine/modules/mymodule.php?param={news-id}"}

6. Veritabanı İşlemleri

MySQL Sorguları (Eklenti XML)

Eklentinizin yaşam döngüsü boyunca çalışacak SQL sorgularını tanımlayabilirsiniz.

<!-- Kurulum sırasında -->
<mysqlinstall><![CDATA[
CREATE TABLE IF NOT EXISTS {prefix}_myplugin (
    id int(11) NOT NULL AUTO_INCREMENT,
    title varchar(255) NOT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
]]></mysqlinstall>

<!-- Eklenti silindiğinde -->
<mysqldelete><![CDATA[
DROP TABLE IF EXISTS {prefix}_myplugin;
]]></mysqldelete>

PHP'de Veritabanı İşlemleri

// Güvenli veri ekleme
$title = $db->safesql($title);
$db->query("INSERT INTO " . PREFIX . "_myplugin (title) VALUES ('{$title}')");

// Tek satır çekme
$row = $db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_myplugin");
echo $row['count'];

7. Güvenlik ve En İyi Uygulamalar

Temel Güvenlik Kontrolleri

// DLE kontrolü
if (!defined('DATALIFEENGINE')) {
    die("Hacking attempt!");
}

// Admin kontrolü
if (!defined('LOGGED_IN')) {
    die("Hacking attempt!");
}

// CSRF koruması
if ($_REQUEST['user_hash'] != $dle_login_hash) {
    die("Session error");
}

Veri Güvenliği

// SQL Injection koruması
$input = $db->safesql($input);

// XSS koruması
$output = htmlspecialchars($output, ENT_QUOTES, 'UTF-8');

// Sayısal veri kontrolü
$id = intval($_REQUEST['id']);

8. Gelişmiş Örnekler

AJAX Modülü Oluşturma (engine/ajax/myplugin.php)

<?php
@error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
@ini_set('display_errors', true);

define('DATALIFEENGINE', true);
define('ROOT_DIR', substr(dirname(__FILE__), 0, -12));
define('ENGINE_DIR', ROOT_DIR . '/engine');

include ENGINE_DIR . '/data/config.php';
require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/modules/sitelogin.php';

header('Content-type: application/json; charset=' . $config['charset']);
$response = array('success' => false);

if (!$is_logged) {
    $response['error'] = 'Giriş yapmanız gerekiyor';
    echo json_encode($response);
    die();
}

$action = $_REQUEST['action'];
switch ($action) {
    case 'get_data':
        $response['success'] = true;
        $response['data'] = "Bu bir AJAX yanıtıdır.";
        break;
    default:
        $response['error'] = 'Geçersiz işlem';
}
echo json_encode($response);
?>

JavaScript AJAX İstemci

function getMyPluginData() {
    ShowLoading('');
    
    $.ajax({
        url: dle_root + 'engine/ajax/myplugin.php',
        type: 'POST',
        dataType: 'json',
        data: {
            action: 'get_data',
            user_hash: dle_login_hash
        },
        success: function(response) {
            HideLoading('');
            if (response.success) {
                DLEalert(response.data, 'Başarılı');
            } else {
                DLEalert(response.error, 'Hata');
            }
        },
        error: function() {
            HideLoading('');
            DLEalert('Sunucu hatası oluştu.', 'Hata');
        }
    });
}

9. Çoklu Dil Desteği

Eklentinizin farklı dilleri desteklemesi için dil dosyaları oluşturabilirsiniz.

Dil Dosyası: engine/language/Turkish/myplugin.lng
<?php
$lang['myplugin_title'] = 'Eklenti Başlığı';
$lang['myplugin_save'] = 'Kaydet';
?>
Eklenti İçinde Kullanım
if (file_exists(ENGINE_DIR . '/language/' . $config['langs'] . '/myplugin.lng')) {
    include_once ENGINE_DIR . '/language/' . $config['langs'] . '/myplugin.lng';
} else {
    include_once ENGINE_DIR . '/language/English/myplugin.lng';
}

echo $lang['myplugin_title'];

10. Gelişmiş Eklenti Özellikleri

Cron Job Desteği (engine/cron/myplugin_daily.php)

DLE'nin zamanlanmış görevler sistemiyle entegre çalışacak scriptler oluşturabilirsiniz.

<?php
if (!defined('DATALIFEENGINE')) {
    define('DATALIFEENGINE', true);
    define('ROOT_DIR', dirname(__FILE__) . '/../..');
    define('ENGINE_DIR', ROOT_DIR . '/engine');
    
    include ENGINE_DIR . '/data/config.php';
    require_once ENGINE_DIR . '/classes/mysql.php';
    require_once ENGINE_DIR . '/data/dbconfig.php';
}

// Her gün çalışacak bir işlem: 7 günden eski geçici kayıtları sil
$one_week_ago = time() - (86400 * 7);
$db->query("DELETE FROM " . PREFIX . "_myplugin_temp WHERE date < '{$one_week_ago}'");

echo "Cron job completed successfully";
?>

11. Eklenti Test ve Dağıtım

Eklenti Paketleme Scripti (build.php)

Eklentinizi dağıtıma hazır hale getirmek için bir ZIP arşivi oluşturan basit bir PHP scripti.

<?php
$plugin_name = 'myplugin';
$version = '1.0.0';
$files = [
    'install.xml',
    'engine/modules/myplugin.php',
    'engine/inc/myplugin.php',
    'engine/skins/images/myplugin.png'
];

$zip = new ZipArchive();
$filename = "{$plugin_name}_v{$version}.zip";

if ($zip->open($filename, ZipArchive::CREATE) !== TRUE) {
    exit("ZIP dosyası oluşturulamadı.\n");
}

foreach ($files as $file) {
    if (file_exists($file)) {
        $zip->addFile($file, $file);
    }
}

$zip->close();
echo "Eklenti başarıyla paketlendi: {$filename}\n";
?>

12. Sonuç

Bu rehber, DataLife Engine 17 ve üzeri için profesyonel eklenti ve modül geliştirmeniz için gereken tüm temel ve ileri düzey bilgileri içermektedir. DLE'nin güçlü eklenti sistemi sayesinde, motor dosyalarını değiştirmeden karmaşık eklentiler oluşturabilirsiniz.

Önemli Noktalar

  1. Sanal Dosya Sistemi: Orijinal dosyalar asla değiştirilmez, bu da güncellemeleri kolaylaştırır.
  2. Kolay Kurulum: Tek tıklama ile kurulum ve kaldırma kullanıcı dostudur.
  3. Güvenlik: Her zaman DLE'nin güvenlik fonksiyonlarını (safesql, intval, CSRF kontrolü) kullanın.
  4. Performans: Gereksiz veritabanı sorgularından kaçının ve DLE'nin önbellekleme mekanizmalarını kullanın.
  5. Dokümantasyon: Kodunuzu ve kullanımını belgelendirmek, hem sizin hem de kullanıcılarınız için hayati önem taşır.