Arama Formu — search.tpl

Bu şablon, sitenin arama sayfasını üretir: hem tek satırlık basit arama kutusunu hem de gelişmiş (filtreli) arama formunu. Formun tamamı tek bir şablondan gelir; hangi bölümün görüneceğine sunucu tarafı karar verir.

KonuAyrıntı
İşleyen dosyaengine/modules/search.php — load_template('search.tpl')
Adresindex.php?do=search — formu gösterir
Aramayı çalıştıran adresindex.php?do=search&subaction=search
Sonuç şablonuArama Sonuçları — searchresult.tpl
İzinallow_search — izni olmayan gruba form hiç gösterilmez
Sayfa başına sonuçsearch_number ayarı
i
Form ayrı bir şablon değildir <form>, <input> ve <select> elemanlarını siz yazmazsınız; {searchfield} gibi etiketlerin yerine PHP hazır HTML koyar. Siz yalnızca bu parçaları yerleştirir ve çevrelerini biçimlendirirsiniz.

Etiketler

EtiketYerine konan HTML
{searchfield}Arama kelimesi kutusu (name="story", id="searchinput")
{word-option}"Tüm kelimeler" onay kutusu — yalnızca FULLTEXT kapalıyken dolar
{search-area}Nerede aranacak? (name="titleonly"): her yerde / başlıkta / statik sayfada / etikette
{userfield}Yazar adı kutusu (name="searchuser")
{user-option}"Yazar adı tam eşleşsin" onay kutusu (name="exactname")
{news-option}Yorum sayısı filtresi (name="replyless"): en az / en çok
{comments-num}Yorum sayısı kutusu (name="replylimit") — sayı, yorum listesi değil
{date-option}Tarih aralığı listesi (name="searchdate"): hepsi / son / bugün / hafta … / yıl
{date-beforeafter}"Önce / sonra" listesi (name="beforeafter")
{sort-option}Sıralama listesi (name="sortby"): başlık / yorum / okuma / yazar / kategori / puan
{order-option}Yön listesi (name="resorder"): azalan / artan
{view-option}Görünüm radyoları (name="showposts"): haberler / yalnız başlıklar
{category-option}Kategori seçim kutusu (name="catlist[]")
{searchtable}Sunucunun ürettiği hazır form tablosu — blok kullanmak istemezseniz tüm formu tek başına basar
{searchmsg}[searchmsg] bloğu içinde sonuç sayısı mesajı

Bloklar

BlokNe zaman kalır?
[simple-search]…[/simple-search] Kullanıcı basit arama modunda (varsayılan). Gelişmiş moda geçtiğinde içeriğiyle birlikte silinir.
[extended-search]…[/extended-search] Kullanıcı "gelişmiş arama" istediğinde (full_search=1). Basit modda içeriğiyle birlikte silinir.
[searchmsg]…[/searchmsg] Bir arama yapıldığında ve sonuç mesajı olduğunda. İlk açılışta ve arama yapılmadan gelindiğinde silinir.

İki mod bloğunu birlikte kullanın: sayfa ilk açıldığında basit, "Gelişmiş arama" düğmesine basıldığında genişletilmiş form görünür. Aynı anda yalnızca biri kalır.

Basit mi, gelişmiş mi? (iki ayrı kavram)

Burada sık karışan iki farklı "gelişmiş" vardır; ikisini ayırt etmek şart:

KavramNereden gelir?Etkisi
Kullanıcının istediği mod İstek parametresi full_search (form alanı) [simple-search] veya [extended-search] bloğunu seçer
Sitenin FULLTEXT yeteneği full_search ayarı (yönetim paneli) Açıksa {word-option} boş kalır ve sıralamaya "ilgi düzeyi" seçeneği eklenir
!
Ad benzerliği tuzağı Biri istek parametresi (full_search), diğeri site ayarı (full_search) — aynı ada sahipler. Şablon içinde ikisini de doğrudan okuyamazsınız; yalnızca sonuçlarına etiketler üzerinden ulaşırsınız.

Değiştirilemez form alan adları

Bu adlar PHP tarafından beklenir. Etiketlerin ürettiği <input> ve <select> elemanlarının name değerlerini elle değiştirmeyin; form kırılır.

Alan adıAnlamı
storyAranan kelime
search_startSonuç sayfası başlangıcı (sayfalama)
titleonlyArama kapsamı
searchuser, exactnameYazar filtresi
all_word_seachTüm kelimeler eşleşsin (yazım seach — tarihsel yazım hatası, doğrusu budur)
replyless, replylimitYorum sayısı filtresi
searchdate, beforeafterTarih filtresi
sortby, resorderSıralama ve yön
showpostsGörünüm (haber / başlık)
catlist[]Kategoriler (dizi)
subaction=searchAramayı gerçekten çalıştırır

Şablonun çağırdığı JavaScript

ÇağrıNe yapar?
list_submit(-1)Aramayı 1. sayfadan başlatır (search_start sıfırlanır)
full_submit(1)Gelişmiş forma geçiş — full_search=1 gönderir
clearform('fullsearch')Gelişmiş formu temizler

Bu işlevler public/js/dle_js.js (ve ilgili paket) içinden gelir. Şablonun altındaki form id="fullsearch" olmak zorundadır; aksi hâlde düğmeler çalışmaz.

Örnek

<section class="searchpage">
    <h1>Sitede ara</h1>

    <form method="post" action="/index.php?do=search" id="fullsearch" name="fullsearch">
        <input type="hidden" name="subaction" value="search">
        <input type="hidden" name="search_start" id="search_start" value="0">
        <input type="hidden" name="full_search" id="full_search" value="0">

        [simple-search]
        <div class="search-simple">
            {searchfield}
            <button type="button" onclick="list_submit(-1); return false;">Ara</button>
            <button type="button" onclick="full_submit(1); return false;">Gelişmiş arama</button>
        </div>
        [/simple-search]

        [extended-search]
        <div class="search-advanced">
            <fieldset>
                <legend>İçerik</legend>
                {searchfield}
                {word-option}
                {search-area}
            </fieldset>

            <fieldset>
                <legend>Yazar</legend>
                {userfield}
                {user-option}
            </fieldset>

            <fieldset>
                <legend>Yorum ve tarih</legend>
                {news-option} {comments-num}
                {date-option} {date-beforeafter}
            </fieldset>

            <fieldset>
                <legend>Sıralama</legend>
                {sort-option} {order-option} {view-option}
            </fieldset>

            <fieldset>
                <legend>Kategoriler</legend>
                {category-option}
            </fieldset>

            <button type="button" onclick="list_submit(-1); return false;">Ara</button>
            <button type="reset">Sıfırla</button>
        </div>
        [/extended-search]
    </form>

    [searchmsg]
        <p class="search-msg">{searchmsg}</p>
    [/searchmsg]
</section>
i
Alternatif: yalnızca {searchtable} Bloklarla uğraşmak istemezseniz formun tamamını <form …>{searchtable}</form> ile basabilirsiniz. Sunucu, seçilen moda göre doğru tabloyu üretir. Ancak tasarım üzerindeki denetiminiz azalır: hazır tablo kendi satır içi stilleriyle gelir.

Sık yapılan hatalar

HataSonuç
Form id="fullsearch" değillist_submit / full_submit çalışmaz
subaction gizli alanını silmekForm gönderilir ama arama hiç yapılmaz
{story} diye bir etiket aramakYoktur — kutuyu {searchfield} üretir
[catlist] bloğu beklemekYoktur — kategoriler {category-option} içinden gelir
{comments-num}'u yorum listesi sanmakBu, yorum sayısı girdisidir
Alanların name değerini "düzeltmek"Filtreler sessizce yok sayılır
İki mod bloğunu da aynı anda görünür yapmakZaten sunucu diğerini siler; çift form oluşur

Kontrol listesi

  • Form id="fullsearch" ve action="/index.php?do=search" oldu.
  • subaction=search gizli alanı mevcut.
  • [simple-search] ve [extended-search] bloklarının ikisi de yazıldı.
  • {searchfield} formun içinde; etiketlerin ürettiği alan adlarını değiştirmedim.
  • Arama izni olmayan grupla sayfayı test ettim (form görünmemeli).
  • Sonuç sayfasının ayrı şablon olduğunu biliyorum: Arama Sonuçları.