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.
| Konu | Ayrıntı |
|---|---|
| Yönetim modülü | engine/inc/plugins.php |
| URL | admin.php?mod=plugins |
| Yetki | Yalnızca grup 1 (yönetici) — kod $member_id['user_group'] != 1 ise erişimi reddeder |
| Genel ayar | allow_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 |
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
| Ekran | Adres | Ne yapar? |
|---|---|---|
| Eklenti listesi | ?mod=plugins | Tüm eklentiler, sürümleri, durumları |
| Yeni eklenti ekleme | ?mod=plugins&action=add | Elle eklenti kaydı ve dosya yamaları girişi |
| Eklenti düzenleme | ?mod=plugins&action=edit&id=N | Mevcut kaydın ayarları ve yamaları |
| Kaydetme | action=doadd / action=doedit | Formu işler |
| Paket indirme | action=download | Bir XML/ZIP paketinden eklenti kurar |
| Hata listesi | ?mod=plugins&action=errors | Uygulanamayan yamaları gösterir |
| Hataları temizle | action=clearerrors | Hata 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
| Alan | Anlamı |
|---|---|
name | Eklenti adı |
description | Kısa açıklama |
icon | Simge dosyası |
version | Eklentinin sürümü |
dleversion + versioncompare | Hedef DLE sürümü ve karşılaştırma işleci (==, >=, <=) |
active | Eklenti açık/kapalı |
needplugin | Bağımlı olunan başka eklentinin adı — kurulu değilse eklenti etkinleştirilemez |
filelist | Eklentinin dokunduğu dosyaların listesi |
filedelete | Kaldırırken eklenen dosyalar da silinsin mi? |
upgradeurl | Güncelleme denetiminin kullanacağı adres |
notice, mnotice | Eklentiye ait bildirim metni ve bildirimin gösterilip gösterilmeyeceği |
posi | Sı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şama | SQL alanı | PHP alanı |
|---|---|---|
| Kurulum | mysqlinstall | phpinstall |
| Güncelleme | mysqlupgrade | phpupgrade |
| Etkinleştirme | mysqlenable | phpenable |
| Devre dışı bırakma | mysqldisable | phpdisable |
| Kaldırma | mysqldelete | phpdelete |
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
<?phpetiketi 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:
| Alan | Anlamı |
|---|---|
file | Yamanacak dosya (ör. engine/modules/show.full.php) |
action | Yama türü — aşağıdaki tablo |
searchcode | Aranacak çapa (kod parçası) |
replacecode | Yerine konacak / eklenecek / dosyayı oluşturacak kod |
searchcount | En ç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 |
active | Bu yama etkin mi? |
filedisable | Dosya düzeyinde devre dışı bırakma bayrağı |
filedleversion + fileversioncompare | Yamanın yalnızca belirli DLE sürümlerinde uygulanması |
Beş yama türü
action | Ne yapar? |
|---|---|
replace | Bulunan bloğu değiştirir |
before | Bulunan bloğun öncesine kod ekler |
after | Bulunan bloğun sonrasına kod ekler |
replaceall | Dosyanın tamamını replacecode ile değiştirir |
create | Yeni bir dosya oluşturur; içeriği replacecode olur |
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.
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:
| Alan | Anlamı |
|---|---|
plugin_id | Hangi eklenti |
area | Hangi dosya veya hangi sorgu |
error | Bulunamayan çapa ya da hata metni |
type | mysql (SQL kancası), file (dosya yaması), upload (yükleme) |
action_id | Hangi yama satırına ait olduğu |
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ığı
-
Çekirdek her
includesatırını sarar DLE, dosyalarıDLEPlugins::Check(...)üzerinden yükler. -
Yama varsa kopya üretilir
Orijinal dosya + yamalar birleştirilip
engine/cache/system/plugins/altında yeni bir dosyaya yazılır. - 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:
| Dosya | Neden korunuyor? |
|---|---|
engine/classes/mysql.php | Veritabanı katmanı — yamalanırsa SQL güvenliği riske girer |
engine/classes/plugins.class.php | Eklenti motorunun kendisi — kendini yamamak tanım gereği tehlikelidir |
engine/data/config.php | Sistem yapılandırması — ayar değişikliği phpinstall içinde yapılmalı |
engine/data/dbconfig.php | Veritabanı erişim bilgileri |
engine/data/socialconfig.php | Sosyal giriş yapılandırması |
engine/data/videoconfig.php | Video yapılandırması |
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
| Hata | Sonuç |
|---|---|
| Korunan bir dosyayı yamamaya çalışmak | Yama uygulanmaz, hata günlüğüne düşer |
phpinstall içeriğine <?php yazmak | Kod çalışmaz, kurulum bozulur |
| Çapayı sürüme göre güncellememek | Eklenti kurulu görünür ama etkisiz kalır |
replaceall kullanıp replacecode'u eksik yazmak | Dosyanın tamamı silinir — sitenin o kısmı çöker |
needplugin bağımlılığını yok saymak | Eklenti 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 kapatmak | Eklenen dosyalar sunucuda çöp olarak kalır |
Kontrol listesi
allow_pluginsaçı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
<?phpetiketi 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.