DleHub
Derya profil resmi
Yeni

DLE SSS (Sıkça Sorulan Sorular) v1.0 — Akordeon FAQ sayfası ve yönetim paneli

Geliştirici: Derya • Yayın: Dün, 14:57
DLE SSS (Sıkça Sorulan Sorular) v1.0 — Akordeon FAQ sayfası ve yönetim paneli

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çinde faq.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

  1. Yönetim paneli → Eklenti yönetimi → Eklenti yükle.
  2. Bu makaledeki ZIP içinden faq.xml dosyasını seçip yükleyin (XML’i tek başına yüklemeyin; paket ZIP’tir).
  3. Listede SSS (Sikca Sorulan Sorular) görünür; aktif edin.

Kurulumda otomatik olarak şunlar olur:

  • engine/data/faq.json oluşturulur (yoksa boş dizi),
  • public/adminpanel/images/faq.png simgesi yazılır (yoksa),
  • aktif temada faq.tpl yoksa oluşturulur (varsa dokunulmaz),
  • _admin_sections menü 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.php içinde 5. grup ($lang['admin_other_section'] / Üçüncü taraf modüller) altında listelenir; engine/inc/options.php aynı kayıtları kart olarak gösterir.
  • Simge yalnızca kartta görünür; sol menüde modüller ikonsuzdur.
  • allow_groups sadece görünürlüktür. Doğrudan admin.php?mod=faq yazan biri için sayfa kendi kontrolünü yapar: grup 1 değilse msg("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)

  1. admin.php?mod=faq açın (grup 1).
  2. Soru ekle ile modalı açın. Soru düz metin, cevap TinyMCE ile HTML’dir.
  3. Kaydet / düzenle / sil. Satırdaki anahtarla aktif-pasif değiştirin.
  4. Satırları sürükleyerek sıralayın (Sortable). Sıra faq.json dizisinin sırasıdır.
  5. Ön yüzde yalnızca active = 1 kayı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=faq sayfasında yüklenir.
  • Bootstrap modal gizliyken init edilirse editör bozuk çıkar. Init shown.bs.modal olayında; temizlik tinymce.remove ile openFaqModal() başında ve hidden.bs.modal sonrası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 / align grupları, 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 image diyaloğ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.
  • style ayrı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(, @import ve { } < > " ' içeren değerler reddedilir.
  • <a> href yoksa kaldırılır; kalanlara rel="nofollow noopener" eklenir.
  • <img> yalnızca jа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

  1. templates/<Tema>/css/faq.css ve js/faq.js oluşturun.
  2. faq.tpl iç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.php ve engine/ajax/controller.php iç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

  1. XML’i yükleyip aktive edin.
  2. Kendi diliniz için website.lng ve adminpanel.lng anahtarlarını ekleyin (paket yalnızca TR/EN yamalar).
  3. Aktif temanın faq.tpl dosyasını düzenleyin (yalnızca iki yer tutucu doldurulur).
  4. ?mod=faq ile iaçerik girin, ?do=faq ile test edin.
  5. Bağka sayfada göstermek: en basit yol ?do=faq bağlantısıdır. Aynı sayfaya gömmek için ikinci bir case veya ortak fonksiyon gerekir.
  6. Tema değiştirirseniz faq.tpl’i yeni temanın klasörüne kopyalayın. phpinstall yalnı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.php değildir; engine/ajax/faq.php + controller.php whitelist yaması zorunludur.
  • Silme/kaydetme USERPREFIX_admin_logs tablosuna 2001–2005 kodlarıyla yazılır. Okunabilir etiket için adminlogs.lng içine admin_logs_action_2001 … 2005 eklenebilir (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.


Dosya İndirme Kilitli

Changelog

1.0 — İlk sürüm: ?do=faq akordeon, ?mod=faq yönetim, TinyMCE cevap editörü, faq.json depolama, otomatik faq.tpl.

10 Gösterim 0 Yorum
Bu İçeriği DeğerlendirHenüz oy yok
Harika (+10p)
❤
0
Çalışıyor (+5p)
✅
0
Yararlı (+5p)
🚀
0
Hatalı (-5p)
❌
0
Sorum Var (0p)
❓
0
Teşekkürler (+2p)
🙏
0

Geliştirici Tartışmaları

0 yorum

Yorum ekleme

Hesapla giriş:
Kod okunmuyorsa yenilemek için görsele tıklayın