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

EtiketNe 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.

KonuAyrı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
Parametrelerfav_id (haber ID), action (plus/minus), user_hash
CSRFDenetlenir — 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 haberYayınlanmamış habere favori eklenemez (sunucu tarafı denetim)
YanıtFavori 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.tpl ve fullstory.tpl iç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.favorites sütununu doğrudan değiştirmedim.

Sırada: Özel Mesajlar.