Ö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.
| Konu | Ayrıntı |
| İşleyen kod | engine/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 şablon | Haber: shortstory.tpl · Yorum: comments.tpl |
| Önbellek | Blok 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
| Parametre | Anlamı |
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ğer | Sıralama |
date | Yayın tarihi (varsayılan) |
editdate | Son düzenleme tarihi |
rating | Haber puanı |
reads | Okunma sayısı |
comments | Yorum sayısı |
title | Başlık (alfabetik) |
rand | Rastgele — bu modda sabitleme ve yön yok sayılır |
id_as_list | id="3,4,1,2" listesindeki sıraya göre |
lastviewed | Ziyaretç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ğer | Davranış |
yes | Sabitlenmiş haberler listenin başında, gerisi normal akışta |
only | Yalnızca sabitlenmiş haberler |
without | Sabitlenmiş haberler hiç gösterilmez |
no veya yazılmazsa | Sabitlenmiş 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ım | Seç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ğer | Sayfa |
main | Ana sayfa |
cat | Kategori sayfası |
date | Tarih arşivi (yıl / ay / gün) |
showfull | Tam haber sayfası |
search | Arama sonuçları |
xfsearch | Ek alan araması sonuçları |
tags | Bir etikete ait haberler |
alltags | Etiket bulutu sayfası |
catalog | Katalog sayfası |
userinfo | Üye profili |
allnews | Bir üyenin tüm haberleri |
lastnews | Son haberler listesi |
newposts | Yeni gönderiler |
lastcomments | Son yorumlar sayfası |
addnews | Haber ekleme sayfası |
register | Kayıt sayfası |
lostpassword | Parola kurtarma sayfası |
favorites | Yer imleri sayfası |
pm | Özel mesajlar |
feedback | İletişim (geri bildirim) formu |
stats | İstatistik sayfası |
static | Statik sayfalar |
global | Her 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ım | Koş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
| Parametre | Yazılmazsa ne olur? |
template | shortstory.tpl kullanılır |
from | 0 (ilk kayıttan başlar) |
limit | Sitenin "sayfa başına haber sayısı" ayarı |
order / sort | Sitenin genel sıralama ayarları |
available | global — her sayfa |
subcat | Alt kategoriler dâhil edilmez |
fixed | Sabitleme sıralamayı değiştirmez |
banners | no — reklam gösterilmez |
unique | Kapalı — yayınlar tekrar edebilir |
cache | Yazılmazsa sitenin önbellek ayarına uyulur |
navigation | Kapalı |
unique ve cache — iki pratik ayrıntı
| Konu | Ayrı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 — blokta sayfalama
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.
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"}
| Parametre | Anlamı |
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
| Hata | Sonuç |
Koşul adıyla name= değerini farklı yazmak | Blok hep görünür ya da hep gizli kalır |
, ile |'yi karıştırmak | Beklenenin tersi koşul uygulanır |
template= ile adı verilen dosyayı oluşturmamak | Blok boş görünür |
available yazıp modül adını yanlış vermek | Blok hiçbir sayfada çıkmaz |
order="rand" ile fixed= beklemek | Rastgele modda sabitleme ve yön yok sayılır |
order="id_as_list" yazıp id= vermemek | Sıralama listesi oluşmaz |
order="lastviewed" kullanıp site ayarını kapatmak | Blok boş döner |
navigation="yes"'i tam haber sayfasında beklemek | Sayfalama desteklenmediği için kapanır |
| Aynı blok adını birden çok kez tanımlamak | Koşul yanlış blokla eşleşir |
| Önbellek süresi dolmadan içeriğin değişmesini beklemek | Blok 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.