Eklenti Geliştirme Dökümanları

DataLife Engine için eklenti geliştirirken izlenmesi gereken en iyi uygulamalar ve teknikler bu dökümanlarla açıklanmıştır.

1. Sürüm Uyumluluğu

Eklentinin desteklediği DLE sürümlerini mutlaka belirt.

<dleversion>14.0-18.0</dleversion>

2. Yapılandırma Dosyası (plugin.xml) Kullanımı

Eklentinin tanımı, ikon yolu, sürümü, kurulum SQL ve PHP işlemleri burada yer alır.

<name>My Plugin</name> <version>1.0</version> <icon>icon.png</icon> <dleversion>14.0-18.0</dleversion>

3. Veritabanı Güvenliği ve Sorgular

prefix_pluginconfig, prefix_admin_sections, prefix_usergroups gibi tablolara doğru şekilde veri ekle/sil.

SQL sorgularını XML içinde kullanırken dikkatli ol:

<mysqlinstall> <![CDATA[ CREATE TABLE IF NOT EXISTS `prefix_pluginconfig` (...); ]]> </mysqlinstall>

4. DLEPlugins::Check() ile Dosya Dahil Etme

Her zaman bu fonksiyonu kullan:

include_once(DLEPlugins::Check(ENGINE_DIR . '/inc/mymodule.php'));

Böylece başka eklentilerle çakışma minimum olur.

5. Dosya Oluşturma

Eklenti için dosya oluşturmak için aşağıdaki yapıyı kullanabilirsiniz:

<file name="example_plugin.php"> <operation action="create"> <replacecode><![CDATA[<?php // Dosya içeriği buraya gelir ?>]]></replacecode> </operation> </file>

Bu şekilde, eklenti kurulumunda example_plugin.php adında bir dosya oluşturulur ve içeriği <replacecode> tagları arasında belirtildiği şekilde oluşturulur.

6. Admin Panel Entegrasyonu

  • engine/inc/ içine PHP modül dosyası koy.
  • prefix_admin_sections tablosuna kayıt ekle.
  • İkonu engine/skins/images/ içine at.
<mysqlinstall> <![CDATA[ INSERT INTO `prefix_admin_sections` (`name`, `title`, `icon`, `url`, `access`) VALUES ('example_plugin', 'Örnek Eklenti', 'example_icon.png', 'engine/inc/example_plugin.php', '1,2'); ]]> </mysqlinstall>

7. AJAX Desteği

engine/ajax/controller.php içinde mod= parametresi ile AJAX fonksiyonu oluştur.

JS tarafında çağırmak için örnek:

$.post("engine/ajax/controller.php?mod=example_plugin", { data: "test" }, function(result) { alert(result); });

8. Kod Müdahaleleri (operation)

Çekirdek dosyaya müdahele gerekiyorsa, operation etiketi ile searchcode ve replacecode kullan:

<operation action="after"> <searchcode><![CDATA[ if( !$allow_addnews ) msg( "error", ... ); ]]></searchcode> <replacecode><![CDATA[ include_once(DLEPlugins::Check(ENGINE_DIR . '/modules/myaddon.php')); ]]></replacecode> </operation>

9. Ayarlar ve Konfigürasyon

Ayarlar prefix_pluginconfig tablosunda saklanmalı.

Admin panelde bir ayar sayfası sunulabilir (tpl yerine PHP tercih ediyorsan direk kodla).

10. Uninstall (Kaldırma) Desteği

Veritabanı ve dosya temizliği yapacak bir <mysqldisable> bölümü olmalı.

<mysqldisable> <![CDATA[ DROP TABLE IF EXISTS `prefix_pluginconfig`; DELETE FROM `prefix_admin_sections` WHERE name='example_plugin'; ]]> </mysqldisable>

Örnek Eklenti XML Dosyası

<?xml version="1.0" encoding="utf-8"?> <plugin> <name>Ornek Eklenti</name> <description>Bu eklenti örnek olarak hazırlanmıştır.</description> <icon>example_icon.png</icon> <version>1.0</version> <dleversion>14.0-18.0</dleversion> <!-- Veritabanı kurulumu --> <mysqlinstall> <![CDATA[ CREATE TABLE IF NOT EXISTS `prefix_pluginconfig` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `plugin` VARCHAR(50) NOT NULL, `config_key` VARCHAR(50) NOT NULL, `config_value` TEXT NOT NULL ); INSERT INTO `prefix_admin_sections` (`name`, `title`, `icon`, `url`, `access`) VALUES ('example_plugin', 'Örnek Eklenti', 'example_icon.png', 'engine/inc/example_plugin.php', '1,2'); ]]> </mysqlinstall> <!-- Veritabanı kaldırma işlemi --> <mysqldisable> <![CDATA[ DROP TABLE IF EXISTS `prefix_pluginconfig`; DELETE FROM `prefix_admin_sections` WHERE name='example_plugin'; ]]> </mysqldisable> <!-- Çekirdek dosyalara müdahale örneği --> <operation action="after"> <searchcode><![CDATA[ if( !$allow_addnews ) msg( "error", $lang['addnews_denied'], $lang['addnews_denied'] ); ]]></searchcode> <replacecode><![CDATA[ include_once(DLEPlugins::Check(ENGINE_DIR . '/modules/example_plugin_hook.php')); ]]></replacecode> </operation> <!-- Dosya oluşturma örneği --> <file name="engine/inc/example_plugin.php"> <operation action="create"> <replacecode><![CDATA[<?php if (!defined('DATALIFEENGINE')) die("Hacking attempt!"); echo "<h1>Örnek eklenti çalışıyor!</h1>"; ?>]]></replacecode> </operation> </file> <file name="engine/modules/example_plugin_hook.php"> <operation action="create"> <replacecode><![CDATA[<?php // Buraya müdahale edilen fonksiyonlar yerleştirilebilir ?>]]></replacecode> </operation> </file> </plugin>