SSS (Sıkça Sorulan Sorular) nedir?
SSS, DataLife Engine 21 için kurulabilir tam bir eklenti paketidir. Ön yüze akordeon SSS sayfası, yönetim paneline soru yönetimi ekler. Veriler veritabanı tablosu değil, engine/data/faq.json dosyasında tutulur.
- Paket:
dle-faq-sss.zip(içindefaq.xml) - Sürüm: 1.0
- Uyumluluk: DLE 21.0+
- Ön yüz:
SITENIZ/?do=faq - Yönetim:
admin.php?mod=faq— Sıkça Sorulan Sorular (Üçüncü taraf modüller)
| Taraf | Adres | Ne yapar |
|---|---|---|
| Ön yüz | ?do=faq |
Yalnızca aktif soruları akordeon listesi olarak gösterir |
| Yönetim | ?mod=faq |
Ekle / düzenle / sil / aktif-pasif / sürükle-bırak sıralama |
Kurulum
- Yönetim paneli → Eklenti yönetimi → Eklenti yükle.
- Bu makaledeki ZIP içinden
faq.xmldosyasını seçip yükleyin (XML’i tek başına yüklemeyin; paket ZIP’tir). - Listede SSS (Sikca Sorulan Sorular) görünür; aktif edin.
Kurulumda otomatik olarak şunlar olur:
engine/data/faq.jsonoluşturulur (yoksa boş dizi),public/adminpanel/images/faq.pngsimgesi yazılır (yoksa),- aktif temada
faq.tplyoksa oluşturulur (varsa dokunulmaz), _admin_sectionsmenü kaydı eklenir.
Dil uyarısı: Eklenti kurulumda mevcut language/Turkish ve language/English dosyalarını yamalar. Siteniz başka bir dil kullanıyorsa faq.xml içindeki after operasyonlarını o dile uyarlayın.
$config['allow_plugins'] açık olmalıdır.
Yaşam döngüsü
| Panelden işlem | DLE kancaları | Menü (_admin_sections) |
Dosya yamaları |
|---|---|---|---|
| Kurulum | mysqlinstall + (aktifse) mysqlenable, sonra phpinstall + phpenable |
eklenir | uygulanır |
| Aktif et | mysqlenable + phpenable |
geri eklenir | yeniden uygulanır |
| Pasif et | mysqldisable + phpdisable |
kaldırılır | kaldırılır |
| Güncelle | mysqlupgrade + phpupgrade |
tazelenir | yeniden uygulanır |
| Sil | mysqldelete + phpdelete |
kaldırılır | kaldırılır, _plugins* kayıtları silinir |
| Kanca | İçerik |
|---|---|
phpinstall |
faq.json + simge (base64 gömülü) + faq.tpl + install_admin_module |
phpenable |
menü kaydını geri koyar |
phpdisable |
menü kaydını kaldırır (kırık link kalmasın diye) |
phpupgrade |
menü kaydını tazeler; faq.json yoksa oluşturur |
phpdelete |
menüyü kaldırır + simgeyi siler |
Neden phpdisable? DLE, eklenti pasif edildiğinde _plugins_files.active alanını 0 yapar; oluşturulan dosyalar devre dışı kalır ve ?mod=faq açılamaz. Menü kaydı durursa panelde kırık link kalır.
Korunanlar: faq.json verisi ve faq.tpl şablonu silinmez. Yalnızca menü kaydı ve simge temizlenir.
Yönetim paneli bağlantısı
Menü, DLE API ile yazılır (elle SQL yok):
include_once ENGINE_DIR . '/api/api.class.php';
$dle_api->install_admin_module('faq', 'Sıkça Sorulan Sorular', 'SSS yönetimi', 'public/adminpanel/images/faq.png', '1');
| Alan | Değer |
|---|---|
name |
faq — engine/inc/faq.php ile birebir aynı olmalı |
title |
Sıkça Sorulan Sorular |
descr |
SSS yönetimi |
icon |
public/adminpanel/images/faq.png (70×70, kurulumda yazılır) |
allow_groups |
1 |
- Menü
engine/skins/default.skin.phpiçinde 5. grup ($lang['admin_other_section']/ Üçüncü taraf modüller) altında listelenir;engine/inc/options.phpaynı kayıtları kart olarak gösterir. - Simge yalnızca kartta görünür; sol menüde modüller ikonsuzdur.
allow_groupssadece görünürlüktür. Doğrudanadmin.php?mod=faqyazan biri için sayfa kendi kontrolünü yapar: grup 1 değilsemsg("error", ...).
Paketin içeriği (9 dosya, 10 operasyon)
| Dosya | Aksiyon | Ne yapar |
|---|---|---|
engine/engine.php |
before |
?do=faq için case "faq" dalı |
engine/engine.php |
after |
Sayfa başlığı: $nam_e = $lang['faq_head'] |
engine/ajax/controller.php |
replace |
faq değerini $admin_modules whitelist’ine ekler |
engine/modules/faq.php |
create |
Ön yüz modülü |
engine/ajax/faq.php |
create |
Yönetim AJAX: save / delete / toggle / sort |
engine/inc/faq.php |
create |
Yönetim sayfası (TinyMCE) |
language/{Turkish,English}/website.lng |
after |
Ön yüz dil anahtarları |
language/{Turkish,English}/adminpanel.lng |
after |
Yönetim dil anahtarları |
Şablon (templates/<Skin>/faq.tpl) XML ile oluşturulamaz: DLE dosya operasyonları yalnızca .php ve .lng kabul eder. Bu yüzden phpinstall içinde file_put_contents kullanılır. PHP kancalarına <?php etiketi koyulmaz (eval ile global scope).
Korumalı dosyalara operasyon yazılmaz: engine/classes/mysql.php, plugins.class.php, data/config.php, dbconfig.php, socialconfig.php, videoconfig.php.
Nasıl kullanılır? (yönetim)
admin.php?mod=faqaçın (grup 1).- Soru ekle ile modalı açın. Soru düz metin, cevap TinyMCE ile HTML’dir.
- Kaydet / düzenle / sil. Satırdaki anahtarla aktif-pasif değiştirin.
- Satırları sürükleyerek sıralayın (Sortable). Sıra
faq.jsondizisinin sırasıdır. - Ön yüzde yalnızca
active = 1kayıtlar, bu sırayla görünC�r.
JSON kayıt yapısı: q (soru), a (cevap HTML), active (0/1).
Cevap alanında TinyMCE
- Editör JS’si yalnızca
?mod=faqsayfasında yüklenir. - Bootstrap modal gizliyken init edilirse editör bozuk çıkar. Init
shown.bs.modalolayında; temizliktinymce.removeileopenFaqModal()başında vehidden.bs.modalsonrasında yapılır. - Kaydetmede içerik
tinymce.get('faq_a').getContent()ile alınır. - Araç çubuğu DLE haber editörüyle aynı düzendedir: iki satır,
fontformatting/aligngrupları,forecolor/backcolor,quickbars, kelime sayacı,fullscreen,table,charmap,hr, undo/redo,removeformat. - DLE’nin kutu stilleri (Bilgi / Uyarı / Hata / Kenarlıklı / Gölgeli / renkli arka planlar) ve başlık blokları dahildir.
- Koyu tema (
dle_theme_dark→oxide-dark),content_css: public/editor/css/content.css— DLE ile aynı. - Resim/video yükleme yoktur (haber editöründeki upload sunucusu bağlı değildir). Resim için
imagediyaloğunda kaynak URL kullanın. - Arayüz dili
$lang['language_code'](public/editor/tiny_mce/langs/tr.js).
İçerik temizleme (güvenlik)
Hem engine/ajax/faq.php (kaydetme) hem engine/modules/faq.php (gösterim) faq_clean_html() kullanır. İki yerde aynı olmalıdır.
- Tehlikeli bloklar içerikleriyle silinir:
script,style,iframe,object,embed,svg,math,form,input,button… HTML yorumları silinir. - Etiket beyaz listesi:
p, div, span, br, strong/b, em/i, u, s, ul, ol, li, blockquote, h1–h6, code, pre, a, img, hr, table/thead/tbody/tr/td/th. - Öznitelik beyaz listesi (etiket başına):
style,href,target,title,src,alt,width,height,colspan,rowspan. styleayrıca özellik beyaz listesinden geçer (color,background-color,font-*,text-align,line-height,padding,margin,border*,border-radius,box-shadow,list-style-type…).url(,expression(,@importve{ } < > " 'içeren değerler reddedilir.<a>hrefyoksa kaldırılır; kalanlararel="nofollow noopener"eklenir.<img>yalnızcajаvascript:/dаta:dışı kaynaklarla kabul edilir.
Bu, regex tabanlı pragmatik bir temizleyicidir; içeriği yalnızca grup-1 girdiği için yeterlidir. Yazarlara/üyelere açacaksanız DLE’nin ParseFilter / HTMLPurifier’ı ile değiştirin.
Geriye dönük uyumluluk: içerikte < yoksa (düz metin) eski davranış korunur — htmlspecialchars + nl2br.
Ön yüz şablonu ve etiketler
Modülün şablona verdiği yer tutucular yalnızca ikidir: {faq-title} ve {faq-body}.
Modülün ürettiği HTML sözleşmesi (faq.tpl CSS’i bunlara bağlıdır):
div.faq-list div.faq-item div.faq-question -> "N. soru" + <i class="fa fa-chevron-down"></i> div.faq-answer -> cevap HTML'i div.faq-empty -> kayıt yoksa
Kurulumun yazdığı varsayılan faq.tpl: başlık + gövde, gömülü CSS (kenarlıklı kart, tıklanınca .open), FontAwesome ok ikonu, tıklama ile akordeon JS’i.
Ne değiştirilir → hangi dosya
| İstek | Dosya |
|---|---|
| Görünüm, akordeon yerine sekme, CSS/JS | templates/<Tema>/faq.tpl |
| Sayfa başlığı / “kayıt yok” metni | language/<Dil>/website.lng → faq_head, faq_empty |
| Kayıtlar | engine/data/faq.json veya ?mod=faq |
| Yeni alan (kategori, tarih, ikon) | faq.json + engine/modules/faq.php (+ yönetim: inc/faq.php, ajax/faq.php) |
URL’yi ?do=faq dışında yapmak |
engine/engine.php yaması + modül adı + website.lng |
| İzinli HTML’i daraltmak | faq_clean_html() — iki dosyada aynı |
CSS/JS’i tema dosyalarına taşımak
templates/<Tema>/css/faq.cssvejs/faq.jsoluşturun.faq.tpliçindeki<style>yerine{include file="{THEME}/css/faq.css"}, script yerine{include file="{THEME}/js/faq.js"}yazın.
{THEME} çıktıda $config['http_home_url'] . 'templates/' . $config['skin'] olur.
Dokunulmaması gerekenler
engine/engine.phpveengine/ajax/controller.phpiçindeki eklenti satırları (case "faq", whitelist).searchcodeçekirdeğe aittir; elle değişirse güncelleme bozulur.- Korumalı çekirdek / ayar dosyaları.
- HTML temizleyiciyi yalnızca tek dosyada değiştirmek.
Başka siteye uyarlama — kontrol listesi
- XML’i yükleyip aktive edin.
- Kendi diliniz için
website.lngveadminpanel.lnganahtarlarını ekleyin (paket yalnızca TR/EN yamalar). - Aktif temanın
faq.tpldosyasını düzenleyin (yalnızca iki yer tutucu doldurulur). ?mod=faqile iaçerik girin,?do=faqile test edin.- Bağka sayfada göstermek: en basit yol
?do=faqbağlantısıdır. Aynı sayfaya gömmek için ikinci bircaseveya ortak fonksiyon gerekir. - Tema değiştirirseniz
faq.tpl’i yeni temanın klasörüne kopyalayın.phpinstallyalnızca o anki aktif temaya ve yalnızca dosya yoksa yazar.
Güvenlik ve log
- Tüm uçlarda
user_hash(CSRF),$db->safesql,htmlspecialchars(..., ENT_QUOTES, 'UTF-8')ve grup-1 yetki kontrolü vardır. - Yönetim AJAX’ı native
adminfunction.phpdeğildir;engine/ajax/faq.php+controller.phpwhitelist yaması zorunludur. - Silme/kaydetme
USERPREFIX_admin_logstablosuna2001–2005kodlarıyla yazılır. Okunabilir etiket içinadminlogs.lngiçineadmin_logs_action_2001…2005eklenebilir (opsiyonel).
Yama uygulanmadıysa
?mod=plugins → ilgili eklenti → hata listesi (PREFIX_plugins_logs). En sık neden: searchcode metninin DLE sürümünde değişmiş olması.
Kaldırma
phpdelete menüyü kaldırır ve public/adminpanel/images/faq.png simgesini siler. faq.json ve faq.tpl kalır (içeriğiniz / tema düzenlemeniz). İsterseniz bunları elle silin.