Eklenti Sistemi — Yönetim Paneli

Bu bölüm, eklentilerin yönetim panelindeki karşılığıdır: kurma, kaldırma, açma/kapama ve hata günlüğü. Eklentinin nasıl yazıldığını öğrenmek için Eklenti Mimarisi bölümüne bakın.

KonuAyrıntı
Yönetim modülüengine/inc/plugins.php
URLadmin.php?mod=plugins
YetkiYalnızca grup 1 (yönetici) — kod $member_id['user_group'] != 1 ise erişimi reddeder
Genel ayarallow_plugins açık olmalı; kapalıysa modül "devre dışı" mesajı verir
Tablolar_plugins, _plugins_files, _plugins_logs
Salt okuma anahtarıPLUGINS_READ_ONLY — engine/classes/plugins.class.php içinde
!
Eklenti yönetimi yalnızca yöneticiye açıktır Menüde de erişim seviyesi admin (grup 1) olarak işaretlenmiştir ve modül dosyasının ilk satırlarında grup 1 denetimi vardır. Daha alt gruplardaki yöneticilere admin_plugins gibi bir izin yoktur; eklenti yönetimi devredilemez. Bu bilinçli bir güvenlik tercihidir: eklenti, çekirdek kodu değiştirebilir.

Salt okuma modu

engine/classes/plugins.class.php dosyasının başında şu satır bulunur:

define('PLUGINS_READ_ONLY', false);

Bu değer true yapılırsa eklenti sistemi salt okuma moduna geçer: eklentiler çalışmaya devam eder ama panelden hiçbir değişiklik yapılamaz (kurma, kaldırma, açma/kapama). Yönetim modülü bu durumda açıklayıcı bir mesaj gösterir. Siteyi devrederken veya geçici olarak eklenti değişikliğini kilitlemek istediğinizde kullanışlıdır.

Ekranlar

EkranAdresNe yapar?
Eklenti listesi?mod=pluginsTüm eklentiler, sürümleri, durumları
Yeni eklenti ekleme?mod=plugins&action=addElle eklenti kaydı ve dosya yamaları girişi
Eklenti düzenleme?mod=plugins&action=edit&id=NMevcut kaydın ayarları ve yamaları
Kaydetmeaction=doadd / action=doeditFormu işler
Paket indirmeaction=downloadBir XML/ZIP paketinden eklenti kurar
Hata listesi?mod=plugins&action=errorsUygulanamayan yamaları gösterir
Hataları temizleaction=clearerrorsHata kayıtlarını siler (yalnızca grup 1)

Durum değiştiren tüm bağlantılar user_hash taşır; eksik veya geçersizse istek reddedilir. Hiçbir işlem "tek tıkla ve geri alınamaz" biçiminde değildir: yamalar ayrı ayrı açılıp kapatılabilir.

Eklenti kaydı — _plugins tablosu

AlanAnlamı
nameEklenti adı
descriptionKısa açıklama
iconSimge dosyası
versionEklentinin sürümü
dleversion + versioncompareHedef DLE sürümü ve karşılaştırma işleci (==, >=, <=)
activeEklenti açık/kapalı
needpluginBağımlı olunan başka eklentinin adı — kurulu değilse eklenti etkinleştirilemez
filelistEklentinin dokunduğu dosyaların listesi
filedeleteKaldırırken eklenen dosyalar da silinsin mi?
upgradeurlGüncelleme denetiminin kullanacağı adres
notice, mnoticeEklentiye ait bildirim metni ve bildirimin gösterilip gösterilmeyeceği
posiSıralama değeri

Kurulum / kaldırma kancaları

Her eklentinin altı yaşam döngüsü noktası için ayrı bir alanı vardır. İki sütun hâlinde tutulur:

AşamaSQL alanıPHP alanı
Kurulummysqlinstallphpinstall
Güncellememysqlupgradephpupgrade
Etkinleştirmemysqlenablephpenable
Devre dışı bırakmamysqldisablephpdisable
Kaldırmamysqldeletephpdelete
!
PHP kancaları eval() ile çalışır phpinstall ve benzeri alanların içeriği global kapsamda eval() ile çalıştırılır. Bu yüzden:
  • İçeriğe <?php etiketi yazmayın — doğrudan kod gövdesi olmalıdır.
  • SQL alanları ayrıca çalıştırılır; PHP alanına SQL yazmak işe yaramaz.
  • Hatalı bir kanca eklentiyi değil, kurulum işlemini kırar.

Dosya yamaları — _plugins_files tablosu

Bir eklentinin asıl gücü buradadır: çekirdek dosyaların belirli noktalarına kod eklemek. Her yama kaydı şu alanları taşır:

AlanAnlamı
fileYamanacak dosya (ör. engine/modules/show.full.php)
actionYama türü — aşağıdaki tablo
searchcodeAranacak çapa (kod parçası)
replacecodeYerine konacak / eklenecek / dosyayı oluşturacak kod
searchcountEn çok kaç eşleşme değiştirilsin (0 = sınırsız)
replacecountİlk kaç eşleşme atlanıp yerinde bırakılsın
activeBu yama etkin mi?
filedisableDosya düzeyinde devre dışı bırakma bayrağı
filedleversion + fileversioncompareYamanın yalnızca belirli DLE sürümlerinde uygulanması

Beş yama türü

actionNe yapar?
replaceBulunan bloğu değiştirir
beforeBulunan bloğun öncesine kod ekler
afterBulunan bloğun sonrasına kod ekler
replaceallDosyanın tamamını replacecode ile değiştirir
createYeni bir dosya oluşturur; içeriği replacecode olur
i
Çapa araması düz metin değil, "esnek" bir aramadır searchcode düzenli ifade olarak değil, düz metin olarak alınır ve şu şekilde eşleştirilir:
  • Her satır ayrı ayrı kaçırılır (preg_quote), yani *, (, $ gibi karakterler özel anlam taşımaz.
  • Satırlar arası ve satır içi boşluklar \s* olur — yani girinti ve satır sonları esnektir.
  • Arama büyük/küçük harf duyarsızdır.
Yani çapayı normal kod gibi, girintiyi kafanıza takmadan yazabilirsiniz. Ancak tek bir karakter bile yanlışsa (ör. değişken adı, noktalı virgül) eşleşme bulunamaz.

Hata günlüğü — _plugins_logs tablosu

Bir yama uygulanamadığında DLE bunu sessizce yutmaz; günlüğe yazar. Günlük kaydı şunları taşır:

AlanAnlamı
plugin_idHangi eklenti
areaHangi dosya veya hangi sorgu
errorBulunamayan çapa ya da hata metni
typemysql (SQL kancası), file (dosya yaması), upload (yükleme)
action_idHangi yama satırına ait olduğu
!
"Eklenti kuruldu ama çalışmıyor" → ilk bakılacak yer burasıdır Çapa bulunamazsa eklenti kurulu görünür ama yama uygulanmamıştır; yani hiçbir şey değişmez. Bunun en sık sebebi, DLE sürümüyle birlikte çekirdek kodun değişmesidir. Hata listesindeki area alanı size hangi dosyada eşleşme bulunamadığını, error alanı ise hangi metnin arandığını gösterir. Çözüm: çapayı güncel sürüme göre düzeltmek.

Perde arkası: "yamalı kopya" mantığı

  1. Çekirdek her include satırını sarar DLE, dosyaları DLEPlugins::Check(...) üzerinden yükler.
  2. Yama varsa kopya üretilir Orijinal dosya + yamalar birleştirilip engine/cache/system/plugins/ altında yeni bir dosyaya yazılır.
  3. Yüklenen dosya o kopyadır Orijinal çekirdek dosyanız hiç değişmez — bu yüzden güncelleme yaparken çakışma yaşamazsınız.

Yamalanamayan dosyalar

Güvenlik gereği bazı dosyalar korunmuş kabul edilir ve yama kabul etmez:

DosyaNeden korunuyor?
engine/classes/mysql.phpVeritabanı katmanı — yamalanırsa SQL güvenliği riske girer
engine/classes/plugins.class.phpEklenti motorunun kendisi — kendini yamamak tanım gereği tehlikelidir
engine/data/config.phpSistem yapılandırması — ayar değişikliği phpinstall içinde yapılmalı
engine/data/dbconfig.phpVeritabanı erişim bilgileri
engine/data/socialconfig.phpSosyal giriş yapılandırması
engine/data/videoconfig.phpVideo yapılandırması
i
Ayar değiştirmek istiyorsanız config.php yamalanamadığı için eklenti ayarları phpinstall kancası içinde $config değişkeni üzerinden yapılır; var_export ile yazılıp opcache_reset() çağrılır. Doğrudan dosyayı düzenlemeye çalışmak eklentinin kaldırılmasını da zorlaştırır.

Paket kurulumu (özet)

Eklentiler genellikle tek bir dleplugin XML paketi olarak dağıtılır. Paket, yukarıdaki alanların tamamını (ad, sürüm, kancalar, dosya yamaları) taşır. Panelin "indir" ekranı bu paketi okuyup veritabanına kaydeder, ardından kancaları çalıştırır. Paketin alan alan açıklaması için dleplugin.xml Referansı.

Sık yapılan hatalar

HataSonuç
Korunan bir dosyayı yamamaya çalışmakYama uygulanmaz, hata günlüğüne düşer
phpinstall içeriğine <?php yazmakKod çalışmaz, kurulum bozulur
Çapayı sürüme göre güncellememekEklenti kurulu görünür ama etkisiz kalır
replaceall kullanıp replacecode'u eksik yazmakDosyanın tamamı silinir — sitenin o kısmı çöker
needplugin bağımlılığını yok saymakEklenti etkinleştirilemez; hata mesajı okunmazsa "bozuk eklenti" sanılır
Hata günlüğünü temizleyip sorunu kaybetmekÇözüm için gereken tek kayıt silinir
Eklentiyi kaldırırken filedelete'i kapatmakEklenen dosyalar sunucuda çöp olarak kalır

Kontrol listesi

  • allow_plugins açık ve eklenti yönetimini grup 1 yapıyor.
  • Kurulumdan sonra hata listesini açıp boş olduğunu doğruladım.
  • Yamaların hedeflediği dosyalar korunan listesinde değil.
  • PHP kancalarında <?php etiketi yok.
  • Yedek aldıktan sonra eklentiyi etkinleştirdim.
  • Eklentiyi kapatıp sitenin normal çalıştığını gördüm (geri alma planı).
  • Kurulumdan sonra önbelleğin temizlendiğinden emin oldum.