Sitedeki Oylamalar — vote.tpl
Bu şablon, kenar çubuğunda görünen anketi (oylama kutusunu) üretir. Kullanıcı bir seçenek seçip oy verir; sonuçlar aynı kutunun içinde, sayfa yenilenmeden görünür.
| Konu | Ayrıntı |
|---|---|
| İşleyen dosya | engine/modules/vote.php (oy verme: engine/ajax/vote.php) |
| Çıktı yeri | result['vote'] — yani main.tpl/sidebar içindeki {vote} |
| AJAX adresi | index.php?controller=ajax&mod=vote (GET) — user_hash ile |
| Hepsi bir arada | ShowAllVotes() → index.php?controller=ajax&mod=allvotes |
| İzin | allow_vote |
Etiketler
| Etiket | İçeriği |
|---|---|
{title} | Anket sorusu / başlığı |
{list} | Hazır oy listesi HTML'i — seçenekler ve radyo düğmeleri |
{vote_id} | Anketin kimliği |
{votes} | Toplam oy sayısı — yalnızca sonuç görünümünde anlamlıdır |
Bloklar — iki durum
| Blok | Ne zaman kalır? |
|---|---|
[votelist]…[/votelist] |
Kullanıcı henüz oy vermemişse. İçine "Oy ver" düğmesini koyun.
Bu blok görünürken [voteresult] silinir. |
[voteresult]…[/voteresult] |
Kullanıcı oy verdiyse veya "sonuçları gör" dediyse. Burada
{votes} toplam oyu gösterir. |
!
[voted] / [not-voted] bu şablonda YOKTUR
Bu bloklar haber içi anketlerin şablonu poll.tpl'e aittir.
Burada kullanılacak doğru bloklar [votelist] ve [voteresult]'tur.
İkinci bir yaygın hata: [vote], {vote_title},
{vote-list} gibi var olmayan etiketler yazmak.
Kapsayıcı ve form — siz yazmazsınız
Motor, şablonunuzun çıktısını otomatik olarak şu yapıya alır:
-
AJAX kodunu ekler
Oy verme işlevi (
doVote('vote')/doVote('results')) başa konur. -
Sonucu
<div id="vote-layer">içine sarar AJAX ile gelen yeni içerik bu kapsayıcıya yazılır. -
{list}zaten bir kapsayıcı içerir Bu etiket<div id="dle-vote">vename="vote_check"radyo düğmelerini üretir.
i
Şablona
<form> veya vote-layer eklemeyin
Form, kapsayıcı ve gizli alanlar otomatik gelir. Kendi <form>'unuzu
eklerseniz iç içe form oluşur; vote-layer eklerseniz çift kapsayıcı olur.
Yalnızca kutunun görsel düzenini yazın.
Düğmelerin çağırdığı işlevler
| Çağrı | Ne yapar? |
|---|---|
doVote('vote') | Seçilen seçeneği gönderir. Seçim yoksa istek gönderilmez. |
doVote('results') | Oy vermeden sonuçları gösterir. |
ShowAllVotes() | Tüm anketleri bir pencerede listeler. |
Bu işlevler public/js/dle_js.js içinden gelir. Düğmelerde
onclick="doVote('vote'); return false;" biçiminde çağrılmalıdır.
İzin davranışı — önemli ayrıntı
allow_vote izni olmayan grupta anket görünmeye devam eder.
İzin yalnızca oy verme işlemini engeller; kullanıcı "Oy ver" düğmesine bastığında
yetkisi olmadığına dair bir uyarı görür, sonuçları görüntüleyebilir.
| Durum | Kullanıcı ne görür? |
|---|---|
| İzin var | Anket + oy verme |
| İzin yok | Anket görünür; oy vermeye çalışınca uyarı |
Örnek
<section class="widget widget--poll">
<h2 class="widget__title">Anket</h2>
<p class="poll-question">{title}</p>
<div class="poll-list">
{list}
</div>
[voteresult]
<p class="poll-total">Toplam oy: <b>{votes}</b></p>
[/voteresult]
[votelist]
<div class="poll-actions">
<button type="button" onclick="doVote('vote'); return false;">Oy ver</button>
<button type="button" onclick="doVote('results'); return false;">Sonuçları gör</button>
</div>
[/votelist]
<a href="#" onclick="ShowAllVotes(); return false;">Tüm anketler</a>
</section>
Sık yapılan hatalar
| Hata | Sonuç |
|---|---|
[voted] / [not-voted] kullanmak | Bu bloklar poll.tpl'e ait; burada çalışmaz |
[vote], {vote_title}, {vote-list} yazmak | Bu etiketler yoktur |
Şablona <form> eklemek | İç içe form → oy gönderilmez |
{list}'i kendi radyo düğmelerinizle değiştirmek | Düğme adı vote_check olmazsa JS seçimi okuyamaz |
Düğmelerde doVote'u çağırmamak | Oy verme çalışmaz |
Bu şablonu poll.tpl ile karıştırmak | Haber içi anketler ayrı şablondan gelir: Haber İçi Anketler |
Kontrol listesi
- Yalnızca
{title},{list},{votes},{vote_id}etiketleri kullanıldı. [votelist]ve[voteresult]blokları doğru yazıldı.- Düğmeler
doVote('vote')/doVote('results')çağırıyor. - Şablona
<form>veyavote-layereklenmedi. - Oy vermeden ve verdikten sonra iki görünümü de test ettim.
- Yetkisiz grupla oy vermeye çalışıp uyarının çıktığını gördüm.