DataLife Engine için eklenti geliştirirken izlenmesi gereken en iyi uygulamalar, kurallar ve teknikler bu dökümanla açıklanmıştır.
1. Yapılandırma Dosyası (plugin.xml) ve Sürüm Uyumluluğu
Her eklentinin temelini plugin.xml
dosyası oluşturur. Bu dosyada eklentinin adı, sürümü, ikonu ve en önemlisi desteklediği DLE sürümleri belirtilmelidir.
<?xml version="1.0" encoding="utf-8"?>
<plugin>
<name>My Plugin</name>
<description>Eklentimin açıklaması.</description>
<icon>icon.png</icon>
<version>1.0</version>
<dleversion>17.0</dleversion>
</plugin>
2. Admin Panel Entegrasyonu ve Veritabanı İşlemleri
Eklentinizi Yönetim Paneli menüsünde göstermek için prefix_admin_sections
tablosuna kayıt eklemelisiniz. Bu işlem, eklenti kurulurken, güncellenirken, aktif/pasif edilirken ve silinirken doğru SQL sorguları ile yönetilmelidir.
XML İçinde Eklenti Veritabanı Döngüsü Sorguları:
<!-- Eklenti Kurulurken Çalışır -->
<mysqlinstall><![CDATA[
INSERT INTO `prefix_admin_sections` (`name`, `title`, `descr`, `icon`, `allow_groups`)
VALUES ('mymod', 'Test Eklentisi', 'Test eklentisinin açıklaması', 'mymod.png', '1');
]]></mysqlinstall>
<!-- Eklenti Aktif Edildiğinde Çalışır -->
<mysqlenable><![CDATA[
REPLACE INTO `{prefix}_admin_sections` (`name`, `title`, `descr`, `icon`, `allow_groups`)
VALUES ('mymod', 'Dizi Yönetimi', 'TMDB API ile dizi yönetim sistemi', 'fa-film', '1');
]]></mysqlenable>
<!-- Eklenti Pasif Edildiğinde Çalışır -->
<mysqldisable><![CDATA[
DELETE FROM `{prefix}_admin_sections` WHERE name IN ('mymod');
]]></mysqldisable>
<!-- Eklenti Tamamen Silindiğinde Çalışır -->
<mysqldelete><![CDATA[
DELETE FROM `{prefix}_admin_sections` WHERE name = 'mymod';
DROP TABLE IF EXISTS `{prefix}_mymod_ayarlar`;
]]></mysqldelete>
<!-- Eklenti Güncellenirken Çalışır -->
<mysqlupgrade><![CDATA[
ALTER TABLE `{prefix}_mymod_ayarlar` ADD `yeni_ayar` VARCHAR(255) NOT NULL;
]]></mysqlupgrade>
3. Güvenli Dosya Dahil Etme: DLEPlugins::Check()
Eklenti dosyalarınızı başka bir dosyaya dahil ederken çakışmaları önlemek için her zaman DLEPlugins::Check()
fonksiyonunu kullanın:
include_once(DLEPlugins::Check(ENGINE_DIR . '/inc/mymodule.php'));
4. Kod Müdahaleleri: <operation>
Çekirdek dosyalara müdahale etmeniz gerektiğinde, dosyayı doğrudan düzenlemek yerine plugin.xml
içindeki <operation>
etiketini kullanın:
<operation action="after">
<searchcode><![CDATA[
if( !$allow_addnews ) msg( "error", ... );
]]></searchcode>
<replacecode><![CDATA[
include_once(DLEPlugins::Check(ENGINE_DIR . '/modules/mymod_hook.php'));
]]></replacecode>
</operation>
5. Dosya Oluşturma: <file>
Eklentinizle birlikte yeni PHP dosyaları oluşturmak için <file>
etiketini kullanabilirsiniz:
<file name="engine/ajax/mymod_ajax.php">
<operation action="create">
<replacecode><![CDATA[<?php
// AJAX dosya içeriği buraya gelir
?>]]></replacecode>
</operation>
</file>
6. AJAX Desteği
engine/ajax/controller.php
içinde mod=
parametresi ile AJAX fonksiyonu oluşturun. JS tarafında çağırmak için örnek:
$.post("engine/ajax/controller.php?mod=example_plugin", { data: "test" }, function(result) {
console.log(result);
});
7. PHP → TPL Şablon Bağlantısı
PHP tarafında oluşturduğunuz verileri .tpl
dosyasında göstermek için DLE'nin şablon motorunu kullanın. Bu sayede kod ve tasarım ayrı kalır.
PHP Kodu (engine/modules/mymod.php
)
$tpl->load_template('mymod.tpl');
$tpl->set('{plugin_adi}', 'Benim Harika Eklentim');
if ($is_logged) {
$tpl->set('[logged]', "");
$tpl->set('[/logged]', "");
$tpl->set_block("'\\[not-logged\\](.*?)\\[/not-logged\\]'si", "");
} else {
$tpl->set('[not-logged]', "");
$tpl->set('[/not-logged]', "");
$tpl->set_block("'\\[logged\\](.*?)\\[/logged\\]'si", "");
}
$tpl->compile('content');
Şablon Kodu (templates/skin-adi/mymod.tpl
)
<h2>{plugin_adi}</h2>
[logged]<p>Hoşgeldin üye!</p>[/logged]
[not-logged]<p>Lütfen giriş yapın.</p>[/not-logged]
İyileştirilmiş Örnek Eklenti XML Dosyası (plugin.xml)
Yukarıdaki tüm kuralları bir araya getiren, daha sağlam ve DLE standartlarına uygun bir eklenti yapılandırma dosyası örneği.
<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
<name>Ornek Eklenti</name>
<description>Bu eklenti, DLE eklenti geliştirme standartlarına uygun olarak hazırlanmıştır.</description>
<icon>example_icon.png</icon>
<version>1.0</version>
<dleversion>18.0</dleversion>
<versioncompare>greater</versioncompare>
<!-- Veritabanı kurulumu -->
<mysqlinstall>
<![CDATA[
CREATE TABLE IF NOT EXISTS `{prefix}_pluginconfig` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`setting_key` VARCHAR(50) NOT NULL UNIQUE,
`setting_value` TEXT NOT NULL
);
INSERT IGNORE INTO `{prefix}_pluginconfig` (`setting_key`, `setting_value`) VALUES ('enable_feature', '1');
]]>
</mysqlinstall>
<!-- Eklenti Aktif Edildiğinde -->
<mysqlenable>
<![CDATA[
REPLACE INTO `{prefix}_admin_sections` (`name`, `title`, `descr`, `icon`, `allow_groups`)
VALUES ('example_plugin', 'Örnek Eklenti', 'Örnek eklenti ayar sayfası', 'example_icon.png', '1');
]]>
</mysqlenable>
<!-- Eklenti Pasif Edildiğinde -->
<mysqldisable>
<![CDATA[
DELETE FROM `{prefix}_admin_sections` WHERE name='example_plugin';
]]>
</mysqldisable>
<!-- Eklenti Tamamen Silindiğinde -->
<mysqldelete>
<![CDATA[
DROP TABLE IF EXISTS `{prefix}_pluginconfig`;
DELETE FROM `{prefix}_admin_sections` WHERE name='example_plugin';
]]>
</mysqldelete>
<!-- Çekirdek dosyalara müdahale örneği -->
<file name="engine/modules/main.php">
<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>
</file>
<!-- Eklentinin oluşturacağı yeni dosyalar -->
<file name="engine/inc/example_plugin.php">
<operation action="create">
<replacecode><![CDATA[<?php
if (!defined('DATALIFEENGINE') OR !defined('LOGGED_ADMIN')) { die("Hacking attempt!"); }
echo "<h1>Örnek Eklenti Yönetim Paneli</h1>";
?>]]></replacecode>
</operation>
</file>
<file name="engine/modules/example_plugin_hook.php">
<operation action="create">
<replacecode><![CDATA[<?php
if (!defined('DATALIFEENGINE')) { die("Hacking attempt!"); }
// Bu dosya, main.php'deki belirtilen noktada çalışacaktır.
?>]]></replacecode>
</operation>
</file>
</dleplugin>