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.
| Konu | Ayrıntı |
| İşleyen dosya | engine/modules/search.php — load_template('search.tpl') |
| Adres | index.php?do=search — formu gösterir |
| Aramayı çalıştıran adres | index.php?do=search&subaction=search |
| Sonuç şablonu | Arama Sonuçları — searchresult.tpl |
| İzin | allow_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
| Etiket | Yerine 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
| Blok | Ne 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:
| Kavram | Nereden 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ı |
story | Aranan kelime |
search_start | Sonuç sayfası başlangıcı (sayfalama) |
titleonly | Arama kapsamı |
searchuser, exactname | Yazar filtresi |
all_word_seach | Tüm kelimeler eşleşsin (yazım seach — tarihsel yazım hatası, doğrusu budur) |
replyless, replylimit | Yorum sayısı filtresi |
searchdate, beforeafter | Tarih filtresi |
sortby, resorder | Sıralama ve yön |
showposts | Görünüm (haber / başlık) |
catlist[] | Kategoriler (dizi) |
subaction=search | Aramayı 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
| Hata | Sonuç |
Form id="fullsearch" değil | list_submit / full_submit çalışmaz |
subaction gizli alanını silmek | Form gönderilir ama arama hiç yapılmaz |
{story} diye bir etiket aramak | Yoktur — kutuyu {searchfield} üretir |
[catlist] bloğu beklemek | Yoktur — kategoriler {category-option} içinden gelir |
{comments-num}'u yorum listesi sanmak | Bu, 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 yapmak | Zaten 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ı.