1. İlk Eklentiniz

Bu sayfada, 10 dakikada çalışan bir DLE eklentisi yazacağız. Eklenti şunları yapacak:

  • Haber sayfasının altına bir kutu ekleyecek,
  • Yönetim panelinde bir ayar sayfası gösterecek,
  • Kurulumda kendi veritabanı tablosunu oluşturacak.
i
Ön koşul DLE 21.0 kurulu ve yönetim paneline erişiminiz olmalı. Eklenti sistemi DLE 13.0'dan itibaren vardır.

Adım 1 — Planlama

Eklenti yazmanın ilk ve en önemli adımı şu soruyu cevaplamaktır: "Hangi dosyaya, hangi satırın yanına kod ekleyeceğim?"

!
Kritik kural Hedef dosyanız DLE tarafından DLEPlugins::Check() ile yükleniyor olmalı. index.php, admin.php ve cron.php yamalanamaz — bu dosyalara yazdığınız kod hiç çalışmaz. Ayrıntısı: Eklenti Mimarisi.

Bizim hedefimiz engine/modules/main.php olacak; bu dosya ön yüzde her açılışta çalışır.

Adım 2 — Dosya Yapısı

Eklenti paketini şu şekilde hazırlayın. ZIP site köküne görelidir, upload/ sarmalayıcı kullanılmaz:

benim-eklentim.zip ├── benim-eklentim.xml # manifest (ZIP kökünde, adı serbest) ├── engine/ │ ├── inc/ │ │ └── benim-eklentim.php # yönetim paneli modülü │ └── modules/ │ └── benim_kutum.php # ön yüz modülü └── public/ └── benim-eklentim/ └── stil.css # statik dosyalar
✕
Yalnızca .php ve .lng yamalanabilir .css, .js, .tpl ve görseller <file><operation> ile değiştirilemez — bunlar ZIP içinde normal dosya olarak gelir.

Adım 3 — Manifesti Yazın

benim-eklentim.xml dosyasını oluşturun:

<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
    <name>Benim Eklentim</name>
    <description>Haber altına kutu ekler.</description>
    <version>1.0</version>
    <dleversion>21.0</dleversion>
    <versioncompare>greater</versioncompare>
    <filedelete>0</filedelete>

    <mysqlinstall><![CDATA[
CREATE TABLE IF NOT EXISTS `{prefix}_benim_kutum` (
  `id`    INT(11) NOT NULL AUTO_INCREMENT,
  `baslik` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE={engine} DEFAULT CHARSET={charset};
INSERT IGNORE INTO `{prefix}_admin_sections`
  (`name`, `title`, `descr`, `icon`, `allow_groups`)
VALUES ('benim-eklentim', 'Benim Eklentim', 'Kutu ayarları', 'reaction.png', '1');
    ]]></mysqlinstall>

    <mysqlupgrade><![CDATA[ /* Güncellemede çalışır */ ]]></mysqlupgrade>
    <mysqlenable><![CDATA[]]></mysqlenable>
    <mysqldisable><![CDATA[]]></mysqldisable>
    <mysqldelete><![CDATA[
DROP TABLE IF EXISTS `{prefix}_benim_kutum`;
DELETE FROM `{prefix}_admin_sections` WHERE `name` = 'benim-eklentim';
    ]]></mysqldelete>

    <phpinstall><![CDATA[ // <?php YAZMAYIN - dogrudan calistirilir ]]></phpinstall>
    <phpupgrade><![CDATA[]]></phpupgrade>
    <phpenable><![CDATA[]]></phpenable>
    <phpdisable><![CDATA[]]></phpdisable>
    <phpdelete><![CDATA[]]></phpdelete>

    <file name="engine/modules/main.php">
        <operation action="after">
            <searchcode><![CDATA[echo $tpl->result['main'];]]></searchcode>
            <replacecode><![CDATA[include_once(DLEPlugins::Check(ENGINE_DIR . '/modules/benim_kutum.php'));]]></replacecode>
            <searchcount>1</searchcount>
            <enabled>1</enabled>
        </operation>
    </file>

    <file name="engine/modules/benim_kutum.php">
        <operation action="create">
            <replacecode><![CDATA[<?php
if (!defined('DATALIFEENGINE')) die('Hacking attempt!');
// Kutu kodunu buraya yazacağız
]]></replacecode>
            <enabled>1</enabled>
        </operation>
    </file>
</dleplugin>
!
Çapa benzersiz olmalı searchcount vermezseniz ve çapa dosyada birden fazla geçiyorsa, kodunuz her geçişte tekrar tekrar eklenir. Ayrıntısı: Çapa Sanatı.

Adım 4 — Ön Yüz Modülünü Yazın

engine/modules/benim_kutum.php içeriği:

if (!defined('DATALIFEENGINE')) die('Hacking attempt!');

global $db, $tpl, $config;

// Tablodan kayıtları çek
$rows = array();
$db->query("SELECT id, baslik FROM " . PREFIX . "_benim_kutum ORDER BY id DESC LIMIT 5");
while ($row = $db->get_row()) {
    $rows[] = $row;
}
$db->free();

if (!$rows) return; // gösterilecek kayıt yoksa sessizce çık

// Şablona bas
$tpl->load_template('benim_kutum.tpl');
foreach ($rows as $row) {
    $tpl->set('{baslik}', htmlspecialchars($row['baslik'], ENT_QUOTES, 'UTF-8'));
    $tpl->compile('benim_kutum');
}
$tpl->clear();
✕
Şablon dosyası yoksa etiket çalışmaz {benim_kutum} etiketi yalnızca şablonunuzda bu blok varsa görünür. Şablon bloğunu eklemeyi unutursanız modül çalışır ama hiçbir şey görünmez. Şablonu phpinstall içinde PHP ile otomatik üretebilirsiniz.

Adım 5 — Kurun ve Test Edin

  1. ZIP'i hazırlayın Manifest ZIP'in kökünde olsun, diğer dosyalar engine/… gibi kök-göreli yerleşsin.
  2. Yönetim panelinden yükleyin Eklentiler bölümünden ZIP'i yükleyin. Kurulumda mysqlinstall çalışır ve tablonuz oluşur.
  3. Hataları kontrol edin Eklentiler → Hataları göster ekranını açın. "Kod bulunamadı" yazıyorsa çapanız tutmamıştır.
  4. Ön yüzü test edin Siteyi açın. Kutu görünmüyorsa tablo boştur veya şablon etiketi eksiktir.

Sonraki Adım

Çalışan bir iskelet kurduğunuza göre artık şunlara bakabilirsiniz: