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.

KonuAyrıntı
İşleyen dosyaengine/modules/vote.php (oy verme: engine/ajax/vote.php)
Çıktı yeriresult['vote'] — yani main.tpl/sidebar içindeki {vote}
AJAX adresiindex.php?controller=ajax&mod=vote (GET) — user_hash ile
Hepsi bir aradaShowAllVotes() → index.php?controller=ajax&mod=allvotes
İzinallow_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

BlokNe 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:

  1. AJAX kodunu ekler Oy verme işlevi (doVote('vote') / doVote('results')) başa konur.
  2. Sonucu <div id="vote-layer"> içine sarar AJAX ile gelen yeni içerik bu kapsayıcıya yazılır.
  3. {list} zaten bir kapsayıcı içerir Bu etiket <div id="dle-vote"> ve name="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.

DurumKullanıcı ne görür?
İzin varAnket + oy verme
İzin yokAnket 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

HataSonuç
[voted] / [not-voted] kullanmakBu bloklar poll.tpl'e ait; burada çalışmaz
[vote], {vote_title}, {vote-list} yazmakBu etiketler yoktur
Şablona <form> eklemekİç içe form → oy gönderilmez
{list}'i kendi radyo düğmelerinizle değiştirmekDüğme adı vote_check olmazsa JS seçimi okuyamaz
Düğmelerde doVote'u çağırmamakOy verme çalışmaz
Bu şablonu poll.tpl ile karıştırmakHaber 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> veya vote-layer eklenmedi.
  • 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.