Özel Bloklar — {custom} ve {customcomments}

{custom}, DLE'nin şablon tarafındaki en güçlü aracıdır: istediğiniz kriterlerle haber listesi üretir. {customcomments} aynı işi yorumlar için yapar. "İşte bunlar", "en çok okunanlar", "bu yazarın diğer yazıları" gibi bloklar bu iki etiketle kurulur.

KonuAyrıntı
İşleyen kodengine/modules/functions.php — custom_print() (haber) ve custom_comments() (yorum)
Ne zaman çalışır?Şablon derlenirken (engine/classes/templates.class.php) — yani global bir etikettir, her şablonda kullanılabilir
Varsayılan şablonHaber: shortstory.tpl · Yorum: comments.tpl
ÖnbellekBlok bazında cache= ile yönetilir
!
Her {custom} bir sorgu daha demektir Etiketin her kullanımı veritabanına ek yük bindirir. Ana şablona onlarca {custom} koymak sayfa üretimini yavaşlatır. limit değerini küçük tutun, cache="30m" gibi bir süre verin ve gereksiz blokları kaldırın.

1. {custom} — kendi haber bloğunuz

{custom name="one_cikan" category="1" limit="5" order="rating" cache="30m"}

{custom name="yeni" days="7" limit="4"}

{custom name="one_cikan"}

Tüm parametreler isteğe bağlıdır; en az birini belirtmeniz yeterlidir. Belirtmediğiniz parametreler sitenin genel ayarlarından gelir.

Parametreler

ParametreAnlamı
name="X"Blok adı. Üretilen içeriğin dolu olup olmadığını [custom=X] koşuluyla sınamak için kullanılır.
id="1,4-8,11"Yalnızca bu yayınlar. Aralık yazılabilir, boşluk bırakılmaz.
idexclude="5-10"Bu yayınlar hariç
category="1,4-8"Yalnızca bu kategoriler
categoryexclude="2,7"Bu kategoriler hariç
subcat="yes"Belirtilen kategorilerin alt kategorileri de dâhil
subcat="only"Yalnızca alt kategoriler, kategorinin kendisi hariç
tags="haber,şablon"Bu etiketlerden herhangi birini taşıyan yayınlar
author="admin"Yalnızca bu yazar(lar) — virgülle birden fazla
authorexclude="admin,test"Bu yazarlar hariç
catalog="a,b"Katalog simgesi (symbol) bu değerlerden biri olan yayınlar
catalogexclude="a,b"Katalog simgesi bu değerler olan yayınlar hariç
xfields="deger"Ek alanlarında bu değeri taşıyan yayınlar
xfieldsexclude="deger"Ek alanlarında bu değeri taşımayan yayınlar
days="2"Yalnızca son N güne ait yayınlar
futureannounce="yes"days= ile birlikte: gelecek tarihli duyurular (ör. days="1" = yarın)
available="…"Yalnızca belirtilen sayfalarda göster (aşağıdaki tablo)
from="5"Kaçıncı kayıttan başlanacak
limit="10"Kaç kayıt gelecek
order="date"Sıralama ölçütü (aşağıdaki tablo)
sort="desc"Yön: asc / desc
fixed="only"Sabitlenmiş haberlerin ele alınışı (aşağıdaki tablo)
template="shortstory"Kayıtları basacak .tpl dosyası (uzantısız)
unique="yes"Bu blokta gösterilen yayın başka blokta tekrar çıkmasın
favorites="yes"Ziyaretçinin yer imlerindeki yayınlar
navigation="yes"Sayfalama bağlantıları üret (yalnızca sayfalamayı destekleyen sayfalarda)
sortbyuser="yes"Ziyaretçi bu blokta [sort]{sort}[/sort] ile sıralamayı seçebilsin
banners="yes"Kayıtların arasına reklamları da koy (varsayılan: kapalı)
cache="yes"Bloğu önbelleğe al (zorla açar). no kapatır; süre de verilebilir: 30m, 2h, 1d
i
available yazımı — eski şablon uyumluluğu DLE yanlış yazımı da kabul eder: aviable="cat" ile available="cat" aynı işi yapar (ikisi birlikte yazılırsa available geçerlidir). Eski tema kodlarında aviable= görürseniz şaşırmayın.

order — sıralama ölçütü

DeğerSıralama
dateYayın tarihi (varsayılan)
editdateSon düzenleme tarihi
ratingHaber puanı
readsOkunma sayısı
commentsYorum sayısı
titleBaşlık (alfabetik)
randRastgele — bu modda sabitleme ve yön yok sayılır
id_as_listid="3,4,1,2" listesindeki sıraya göre
lastviewedZiyaretçinin son görüntülediği yayınlar. Site ayarlarında "son görüntülenenler" açık olmalıdır; kapalıysa blok boş döner.

id_as_list yalnızca id= parametresiyle anlamlıdır. Rastgele bloklar için order="rand" kullanın; bu modda sabitleme ve yön ayarları devre dışıdır.

fixed — sabitlenmiş haberler

DeğerDavranış
yesSabitlenmiş haberler listenin başında, gerisi normal akışta
onlyYalnızca sabitlenmiş haberler
withoutSabitlenmiş haberler hiç gösterilmez
no veya yazılmazsaSabitlenmiş olsun olmasın, normal sıralamaya göre gelir

subcat — alt kategoriler

Örnek: 2 ve 3 numaralı kategoriler, 1 numaralı kategorinin alt kategorileri olsun.

YazımSeçilen haberler
category="1" subcat="yes"1, 2 ve 3 numaralı kategorilerin tamamı
category="1" subcat="only"Yalnızca 2 ve 3 (alt kategoriler)
category="1"Yalnızca 1

available — hangi sayfada gösterilsin?

Değerler | ile birleştirilir: available="main|cat". Hiç yazılmazsa veya global verilirse her sayfada gösterilir.

DeğerSayfa
mainAna sayfa
catKategori sayfası
dateTarih arşivi (yıl / ay / gün)
showfullTam haber sayfası
searchArama sonuçları
xfsearchEk alan araması sonuçları
tagsBir etikete ait haberler
alltagsEtiket bulutu sayfası
catalogKatalog sayfası
userinfoÜye profili
allnewsBir üyenin tüm haberleri
lastnewsSon haberler listesi
newpostsYeni gönderiler
lastcommentsSon yorumlar sayfası
addnewsHaber ekleme sayfası
registerKayıt sayfası
lostpasswordParola kurtarma sayfası
favoritesYer imleri sayfası
pmÖzel mesajlar
feedbackİletişim (geri bildirim) formu
statsİstatistik sayfası
staticStatik sayfalar
globalHer sayfa (varsayılan)

Blok koşulu: [custom=X]

name= ile adlandırdığınız blok boş değilse, o adı kullandığınız koşul bloğu görünür. Başlık ve sarmalayıcıyı bu koşula koymak, "boş blok" görüntüsünü önler:

[custom=one_cikan]
<section class="featured">
    <h2>Öne çıkanlar</h2>
    {custom name="one_cikan" category="1" limit="5"}
</section>
[/custom=one_cikan]

Koşul bloğunun etiketin kendisini sarması gerekmez; blok sayfanın başka bir yerinde üretilebilir, koşul ise bambaşka bir yerde durabilir. Birden fazla bloğu birlikte sınayabilirsiniz:

YazımKoşul
[custom=blok1]Yalnızca blok1 doluysa
[custom=blok1,blok2,blok3]Üçü de doluysa (VE)
[custom=blok1|blok2|blok3]Herhangi biri doluysa (VEYA)
[not-custom=blok1]Blok boşsa (tersi)
!
, = "hepsi", | = "herhangi biri" İki ayraç anlam olarak birbirinin zıddıdır: virgül VE, dikey çizgi VEYA anlamına gelir. [not-custom=…] ise her ikisinin de tersini uygular.

Örnekler

{* 1 ve 2 numaralı yayınlar, tarihe göre *}
{custom id="1,2" order="date"}

{* Yalnızca 2 ve 7 numaralı kategoriler, 5. kayıttan sonra *}
{custom category="2,7" from="5" cache="yes"}

{* 10. kayıttan itibaren 5 kayıt *}
{custom order="date" from="9" limit="5"}

{* Son 2 güne ait 5 haber *}
{custom days="2" limit="5"}

{* Yalnızca sabitlenmiş haberler, en çok 3 tane *}
{custom fixed="only" limit="3"}

{* Ek alanında "Öne Çıkan" yazan haberler *}
{custom xfields="Öne Çıkan" limit="6"}

{* Ziyaretçinin yer imleri, ekleme sırasına göre *}
{custom favorites="yes" order="id_as_list"}

Varsayılan değerler

ParametreYazılmazsa ne olur?
templateshortstory.tpl kullanılır
from0 (ilk kayıttan başlar)
limitSitenin "sayfa başına haber sayısı" ayarı
order / sortSitenin genel sıralama ayarları
availableglobal — her sayfa
subcatAlt kategoriler dâhil edilmez
fixedSabitleme sıralamayı değiştirmez
bannersno — reklam gösterilmez
uniqueKapalı — yayınlar tekrar edebilir
cacheYazılmazsa sitenin önbellek ayarına uyulur
navigationKapalı

unique ve cache — iki pratik ayrıntı

KonuAyrıntı
unique="yes" Aynı kriterlere sahip iki blok yazsanız bile farklı yayınlar gelir: ilki ilk haberi, ikincisi onu atlayıp sonrakini gösterir. Ayrıca {content} içinde gösterilen bir yayın, bu bayrak açıkken özel bloklarda tekrar çıkmaz.
cache yes = bu bloğu önbelleğe al (site ayarından bağımsız olarak açar) · no = önbelleğe alma · 30m / 2h / 1d = zorunlu süre (dakika, saat, gün). Yükü azaltmak için önbellekleme önerilir.

navigation="yes" verildiğinde blok, sayfalama bağlantıları üretir. Ancak bu yalnızca sayfalamayı destekleyen sayfalarda çalışır (ana sayfa, kategori sayfası gibi). Haber detayı veya statik sayfa gibi sayfalaması olmayan yerlerde DLE bu parametreyi yok sayar ve sayfalamayı kapatır.

2. {customcomments} — kendi yorum bloğunuz

Aynı mantıkla yorum listesi üretir. En sık kullanımı, ana sayfaya ya da kenar çubuğuna "son yorumlar" veya "en beğenilen yorumlar" bloğu koymaktır.

{customcomments name="pop_yorum" order="rating" limit="5" cache="1h"}
ParametreAnlamı
name="X"Blok adı — [customcomments=X] koşulu için
template="comments"Kullanılacak .tpl dosyası (varsayılan: comments.tpl; bu şablondaki etiketler geçerlidir)
id= / idexclude=Yorum kimliğine göre dâhil / hariç
newsid= / newsidexclude=Yorumun ait olduğu haber kimliğine göre dâhil / hariç
category= / categoryexclude=Haberin kategorisine göre dâhil / hariç
author= / authorexclude=Yorum yazarına göre dâhil / hariç
days="2"Yalnızca son N günün yorumları
available="…"{custom} ile aynı sayfa listesi
from= / limit=Başlangıç (0'dan sayılır) / adet
order=date, rating, rand, id_as_list
sort=asc / desc
cache=yes, no veya süre (30m, 2h, 1d)

Blok koşulu, haber tarafındakiyle aynı kurallara sahiptir: [customcomments=…], [not-customcomments=…] ve virgül (hepsi) / dikey çizgi (herhangi biri) mantığı.

[customcomments=pop_yorum]
<aside class="widget">
    <h3>En beğenilen yorumlar</h3>
    {customcomments name="pop_yorum" order="rating" limit="5"}
</aside>
[/customcomments=pop_yorum]
i
from sıfırdan başlar from="1" yazmak ilk yorumu atlar (ikinciden başlar). Haber tarafında da aynı mantık geçerlidir.

Sık yapılan hatalar

HataSonuç
Koşul adıyla name= değerini farklı yazmakBlok hep görünür ya da hep gizli kalır
, ile |'yi karıştırmakBeklenenin tersi koşul uygulanır
template= ile adı verilen dosyayı oluşturmamakBlok boş görünür
available yazıp modül adını yanlış vermekBlok hiçbir sayfada çıkmaz
order="rand" ile fixed= beklemekRastgele modda sabitleme ve yön yok sayılır
order="id_as_list" yazıp id= vermemekSıralama listesi oluşmaz
order="lastviewed" kullanıp site ayarını kapatmakBlok boş döner
navigation="yes"'i tam haber sayfasında beklemekSayfalama desteklenmediği için kapanır
Aynı blok adını birden çok kez tanımlamakKoşul yanlış blokla eşleşir
Önbellek süresi dolmadan içeriğin değişmesini beklemekBlok eski hâlini gösterir

Kontrol listesi

  • Her bloğa anlaşılır ve tekil bir name= verdim.
  • limit değerlerini küçük tuttum (her blok bir sorgu).
  • Yoğun bloklara cache="30m" gibi bir süre verdim.
  • Koşul adları name= değerleriyle birebir aynı.
  • , (hepsi) ve | (herhangi biri) ayraçlarını bilinçli seçtim.
  • Kullandığım template= dosyaları temada mevcut.
  • available değerlerini gerçek modül adlarıyla yazdım.
  • Blokları hem dar hem geniş ekranda, hem giriş yapmış hem ziyaretçi olarak test ettim.