Favoriler
Favoriler, üyelerin haberleri sonra bulmak üzere kaydetmesini sağlar. Sadece giriş yapmış üyeler için çalışır.
Nasıl çalışır?
Haber listesi / tam haber
└─ {favorites} veya [add-favorites] / [del-favorites]
└─ tıklama → doFavorites() (public/js/dle_js.js)
└─ AJAX → index.php?controller=ajax&mod=favorites
└─ action = plus | minus
└─ USERPREFIX._users.favorites güncellenir
Şablon etiketleri
| Etiket | Ne yapar? |
|---|---|
{favorites} |
Tek tıkla favori ikonu. Haber favorideyse "çıkar", değilse "ekle" görüntüsü çıkar. |
[add-favorites]…[/add-favorites] |
Yalnızca haber favoride değilken görünen blok (tipik olarak "Favorilere ekle" bağlantısı). |
[del-favorites]…[/del-favorites] |
Yalnızca haber favorideyken görünen blok. |
{favorite-count} |
Üyenin toplam favori sayısı (üye panelinde gösterilir). |
Kullanım örneği:
[add-favorites]
<a href="#" class="fav-add">Favorilere ekle</a>
[/add-favorites]
[del-favorites]
<a href="#" class="fav-del">Favoriden çıkar</a>
[/del-favorites]
i
Üye değilse bloklar otomatik silinir
Ziyaretçi giriş yapmamışsa DLE, favori etiketlerinin tamamını çıktıdan çıkarır. Yani
şablonu ayrıca
[group=5] ile korumak zorunda değilsiniz.
Favoriler sayfası
Üyenin tüm favorileri engine/modules/favorites.php tarafından listelenir.
Bu sayfa kendi şablonunu kullanmaz — haber listesiyle aynı şablonu
(shortstory.tpl) işler. Yani haber listesini nasıl güzelleştirdiyseniz
favoriler sayfası da öyle görünür.
| Konu | Ayrıntı |
|---|---|
| Adres | SEF açıksa favoriler kuralıyla üretilen adres; kapalıysa index.php?do=favorites |
| Sıralama | Eklenme sırasına göre (ORDER BY FIND_IN_SET(id, …)) — en son eklenen önce |
| Boşsa | Kullanıcıya "favori bulunamadı" mesajı gösterilir (info.tpl üzerinden) |
Favoriler nerede saklanır?
Ayrı bir tablo yoktur. Favoriler, üyenin satırındaki bir sütunda virgülle ayrılmış ID listesi olarak tutulur:
USERPREFIX._users
└── favorites VARCHAR # "12,45,103,7"
!
Bir eklenti yazacaksanız bunu bilin
Favori eklemek/çıkarmak,
_users.favorites sütununu
baştan yazmak demektir (implode(",", $liste) →
UPDATE). Yani bu sütunu kendiniz değiştirirken önce okuyup sonra
yazmalısınız.
AJAX akışı
| Ayrıntı | |
|---|---|
| Uç | index.php?controller=ajax&mod=favorites |
| Parametreler | fav_id (haber ID), action (plus/minus), user_hash |
| CSRF | Denetlenir — user_hash eşleşmezse hata döner |
| Üye değilse | "Bu bölüm yalnızca kayıtlı üyeler içindir" mesajı döner |
| Onaysız haber | Yayınlanmamış habere favori eklenemez (sunucu tarafı denetim) |
| Yanıt | Favori ikonunun yeni hâli + blokların yer değiştirmesi için gereken HTML |
✕
Ziyaretçiler için favori YOKTUR
Bazı sistemlerde olduğu gibi "üye olmayan ziyaretçi tarayıcısında favori saklama"
mekanizması DLE'de yoktur. Ziyaretçi için hem şablondan bloklar
silinir, hem AJAX isteği reddedilir.
Sık karıştırılan: "son görüntülenenler"
!
viewed_ids favorilerle İLGİLİ DEĞİLDİR
DLE'de viewed_ids adlı bir çerez/yerel depo anahtarı vardır, ama bu
"son görüntülenen haberler" modülüne aittir
(last_viewed ayarı) ve tarayıcı tarafında tutulur. Favoriler ise sunucu
tarafında, üyenin veritabanı kaydında saklanır. İkisini karıştırmak, yanlış yerde
hata aramanıza yol açar.
Kontrol listesi
- Favori etiketlerini
shortstory.tplvefullstory.tpliçine yerleştirdim. [add-favorites]ve[del-favorites]bloklarının ikisini de ekledim.- Üye panelinde
{favorite-count}gösteriyorum. - Favoriler sayfasının görünümü için
shortstory.tpl'i düzenledim. - Test ederken
_users.favoritessütununu doğrudan değiştirmedim.
Sırada: Özel Mesajlar.