Wordpress bana göre günümüz web teknolojileri arasındaki en kapsamlı sistemlerden birisidir... Bu sistem ile yapabilecekleriniz hayal dünyanız ile sınırlı; en azından benim için öyle
Bugün sizler ile Wordpress'in paylaşılmamış detaylı arama sistemi hakkında konuşacağım ve tüm bilgilerimi buraya aktaracağım. Eminim ki bu sistemi bir çok kişi aramıştır lakin sitelerde kesin bir bilgiye rastlamamıştır. Lakin bugün sadece r10 üyelerine özel bu özelliği en detaylı bir şekilde anlatmaya çaışacağım.
Demo: http://emlakilanlari.me.cf/?s=a burdan detaylı ilan arayabilirsiniz. Bu sistemin aynısıdır...
Sistemin kullanılacağı alanlar: - Emlak ve ilan sistemleri
- Detaylı arama gerekli alışveriş sistemleri
- Detaylı arama katarak kullanıcılarına kolaylık sağlamak isteyen tüm blog, video ve oyun sistemleri
Sistemin Kurulması
Öncelikle tema klasörünüzde var olan "search.php" dosyanızı açın...
<?php if(have_posts()): while(have_posts()): the_post();?>
Yukarıda belirtilen kodun hemen üzerine;
<?php
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} else if ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
$args = array(
'post_type' => 'post',
'orderby' => 'title',
'order' => DESC,
'paged' => $paged
);
query_posts($args);
?>Daha sonra ise eğer pagenavi gibi bir eklenti kullanıyor isek bu eklenti kodlarının hemen altına ise;
<?php wp_reset_query();?>
Yukarıdaki kodu ekleyerek ilk kurulumu bitirmiş olduk. Şimdi ise yukarıdaki kodun ne manaya geldiğini tek tek açıklayacağım...
<?php
$args = array(
'post_type' => 'post',
'orderby' => 'title',
'order' => DESC,
'paged' => $paged
);
?>
Yukarıdaki kodun manası; tüm aranılan yazıların sıralamasını bşlığına göre "z"den "a"ya doğru yap demektir. Biz eğer "DESC" yerine "ASC" yazarsak tüm yazıları "a"dan "z"ye doğru sıralar.
Şimdi biz eğer 'orderby' =>title yerine 'orderby' => date yazarsak bu sefer sıralamaları tarihe göre yapar. Burda sıralamayı yeniden eskiye doğru yapmak için 'order' => DESC olmalıdır eğerki eski tarihten yeni tarihe doğru sıralama istiyorsak yazılarımızı bu sefer 'order' => ASC olması gerek...
Bu tüm aramalar için yapılan sıralama işlemiydi. Şimdi bu sıralama işlemini dinamik hale getirmesini göstereceğim...
Dinamik sıralama yöntemi: <?php
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} else if ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
$args = array(
'post_type' => 'post',
'orderby' => 'title',
'order' => DESC,
'paged' => $paged
);
query_posts($args);
?>Yukarıdaki kodu daha önce sistemimizi oluşturmak için eklemiştil. Şimdi ise bu kodun üzerine ise ;
<script type="text/javascript">
jQuery(document).ready(function($) {
function insertParam(key, value)
{
key = escape(key); value = escape(value);
var kvp = document.location.search.substr(1).split('&');
var i=kvp.length; var x; while(i--)
{
x = kvp[i].split('=');
if (x[0]==key)
{
x[1] = value;
kvp[i] = x.join('=');
break;
}
}
if(i<0) {kvp[kvp.length] = [key,value].join('=');}
//this will reload the page, it's likely better to store this until finished
document.location.search = kvp.join('&');
}
function removeParameter(url, parameter)
{
var urlparts= url.split('?');
if (urlparts.length>=2)
{
var urlBase=urlparts.shift(); //get first part, and remove from array
var queryString=urlparts.join("?"); //join it back up
var prefix = encodeURIComponent(parameter)+'=';
var pars = queryString.split(/[&;]/g);
for (var i= pars.length; i-->0;) //reverse iteration as may be destructive
if (pars[i].lastIndexOf(prefix, 0)!==-1) //idiom for string.startsWith
pars.splice(i, 1);
url = urlBase+'?'+pars.join('&');
}
return url;
}
$('select[name=oncelik]').change(function() {
var current_option = $(this).find('option:selected').val();
if(current_option == 'ad') {
insertParam('oncelik', 'ad')
} else if(current_option == 'tarih') {
insertParam('oncelik', 'tarih')
} else if(current_option == 'fiyat') {
insertParam('oncelik', 'fiyat')
}
});
$('select[name=siralama]').change(function() {
var current_option = $(this).find('option:selected').val();
if(current_option == 'DESC') {
insertParam('siralama', 'DESC')
} else if(current_option == 'ASC') {
insertParam('siralama', 'ASC')
}
});
});
</script>Yukarıdaki kodu ekleyelim... Yukarıdaki kod sıralamamızı dinamik hale getirmek için kullanacağınız. Şimdi bu kodu yaptıktan sonra bu koda uygun html kodu oluşturmalıyız ve daha sonra bu konuyu toparlayacağım...
<div class="control-group">
<label class="control-label" for="inputSortBy">
Öncelik
</label>
<div class="controls">
<select name="oncelik" data-placeholder="Öncelik Seçiniz">
<option value="" />
<option value="ad" <?php if(isset($_GET['oncelik']) && $_GET['oncelik'] == 'ad'): ?>selected="selected"<?php endif; ?>>Ada Göre</option>
<option value="tarih" <?php if(isset($_GET['oncelik']) && $_GET['oncelik'] == 'tarih'): ?>selected="selected"<?php endif; ?>>Tarihe Göre</option>
</select>
</div>
<!-- /.controls -->
</div>
<!-- /.control-group -->
<div class="control-group">
<label class="control-label" for="inputOrder">
Sıralama
</label>
<div class="controls">
<select name="siralama" data-placeholder="Sıralama Türü">
<option value="" />
<option value="DESC" <?php if(isset($_GET['siralama']) && $_GET['siralama'] == 'DESC'): ?>selected="selected"<?php endif; ?>>Azalan</option>
<option value="ASC" <?php if(isset($_GET['siralama']) && $_GET['siralama'] == 'ASC'): ?>selected="selected"<?php endif; ?>>Artan</option>
</select>
</div>
<!-- /.controls -->
</div>Yukarıdaki kod dinamik sıralama yapmak için sadece örnek bir kod olup siz bu kodu kendi temanıza uyarlayabilirsiniz örnek alarak...
Şimdi Yukarıdaki kodda sıralama yapmak için "<select name="oncelik">" ve "<select name="siralama">" vardır...
Bu veriler daha önce verdiğim script kodlarına bilgi göndererek sıramanın nasıl yapılacağını php $_GET[] metodu ile belirliyor...
Peki bu metodu şimdi nasıl sıralamada kullanacağız ? Öncelikle yukarıdaki html kodları ile javascript kodlarından alınan verileri php kodlarına yansıtalım...
<?php
$siralama = $_GET["siralama"];
if($siralama == "") {
$siralama = "DESC";
} else {
$siralama = $siralama;
}
$siralama_onceligi = $_GET['oncelik'];
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} else if ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
if($siralama_onceligi == "ad") {
$args = array(
'post_type' => 'post',
'orderby' => 'title',
'order' => $siralama,
'paged' => $paged
);
} elseif($siralama_onceligi == "tarih") {
$args = array(
'post_type' => 'post',
'orderby' => 'date',
'order' => $siralama,
'paged' => $paged
);
} else {
$args = array(
'post_type' => 'post',
'paged' => $paged
);
}
query_posts($args);
?>Yukarıdaki kodda html ve javascriptten gelen verileri kullandık. Şimdi bu veriler ne anlama geliyor;
$siralama = $_GET["siralama"];
Bu kod verilerin çoktan aza mı yoksa azdan çoğa doğru mu sıralanacağının bilgisini almaktadır...
$siralama_onceligi = $_GET['oncelik'];
Bu kod tarihe göre mi yoksa ada göre mi sıranacağının bilgisini almaktadır...
Sizler bu kodlara göre kendi temanıza göre uyarladığınız takdirde istediğiniz sonucu alabileceksiniz...
Bu dersin devamını ve daha detaylı arama sistemini 2. derste anlatacağım...
Şimdiden saygılarım ile