Geçen gün bir arkadaş bir sitemde kullandığım ve çok beğendiği php ile sayfalama örneğini istedi. Bende verdim ancak ona çok karışık geldi. Ben bunu nasıl düzenleyeyim dedi. Tek tek ne yapması gerektiğini anlatmaktansa bir iki değişken atayarak istediği yapıya sadece bir iki değişiklik ile getirebilmesi için düzenledim. Yoksa eminim ki sürekli bana gelip nasıl düzenliyorduk diyecek. :=) Tabi bu düzenlemeyi yaptıktan sonra forum.iyinet.com'da da paylaşmamak olmazdı.
Yazı biraz uzun oldu ama zor bir uygulama değil. Herkesin anlayabileceği şekilde yazmak istediğim için biraz uzun oldu.
Bu anlatımım ile galiba fazla php bilgisine sahip olmayanların çok işine yarayacaktır ve kolayca anlayabileceklerini düşünüyorum.
Neyse olaya geçelim.
Sayfalanacak olan içeriği yazilar tablosundan çektiğimizi ve seo uyumlu ise htaccess te yaptığımız düzenleme ile sayfalama numarasını $_GET['sayfa'] tanımlamasından aldığımızı varsayarak işlem yapıyoruz.
Yani içeriğimizi yukardaki gibi çekiyor olalım ve her sayfada 10 tane veri göstereceğimizi düşünüyorum.
Her sayfada 10 tane gösterebilmek için yukarıdaki kodu aşağıdaki gibi düzenliyoruz.
Bu işlemden sonra sayfalamadaki bağlantıları göstereceğimiz alana geliyoruz. Orada da sadece 5 değişken üzerinde oynarak işlemlerimizi bitiriyoruz.
Aşağıda gördüğünüz kodda $bolum1, $bolum2,$limit ve $tbl_name değişkenleri ile oynuyoruz. Eğer sayfalama $_GET['sayfa'] ile değilde başka bir tanımlama ile de alıyorsak $page = $_GET['sayfa'] değişkenindeki sayfa tanımlamasını değiştiriyoruz.
Gelelim $bolum1,$bolum2 ve $tbl_name açıklamalarını.
$tbl_name değişkenini veri çektiğimiz tablonun ismini yazıyoruz.
$limit ise bir sayfada kaçtane içerik gösterdiğimiz değeri giriyoruz.Bizim 10 olduğu için 10 olarak düzenliyoruz.
$bolum1,$bolum2 değişkenlerini de örneklerle birlikte açıklamaya çalışayım.
Diyelim sayfalama yapısı şu şekilde olacak:
1. örnek: http://www.site.com/haber-basligi-1.html
O zaman
$bolum1 = "http://www.site.com/haber-basligi-";
$bolum2 = ".html";
2. Örnek :http://www.site.com/1-haber-basligi/
ise
$bolum1 = "http://www.site.com/";
$bolum2 = "-haber-basligi/";
Yani $bolum1 sayfa numarasından önce gelen bölüm iken $bolum2 sayfa numarasında sonra gelen bölüm olacak şekilde düzenliyoruz.
Son olarakta CSS dosyamızı ektedir. oradan indirebilirsiniz.
Kaynak - Yagmayok
Bu yapıya bende uzun bir zaman önce başka bir yerde bulmuştum ve sitelerimde genelde bunu kullanıyorum. Ama tam olarak nerede bulduğumu hatırlayamıyorum. O yüzden o kişiyi kaynak olarak göstermediğim için kusura bakamsın. Galiba yabancı bir siteden almıştım. :=)
Yazı biraz uzun oldu ama zor bir uygulama değil. Herkesin anlayabileceği şekilde yazmak istediğim için biraz uzun oldu.
Bu anlatımım ile galiba fazla php bilgisine sahip olmayanların çok işine yarayacaktır ve kolayca anlayabileceklerini düşünüyorum.
Neyse olaya geçelim.
Sayfalanacak olan içeriği yazilar tablosundan çektiğimizi ve seo uyumlu ise htaccess te yaptığımız düzenleme ile sayfalama numarasını $_GET['sayfa'] tanımlamasından aldığımızı varsayarak işlem yapıyoruz.
PHP:
$qq = mysql_query("select * from yazilar order by id desc limit 0,10");
while ( $qw = mysql_fetch_array($qq) ) {
echo $qw['baslik']."<br>";
}
Her sayfada 10 tane gösterebilmek için yukarıdaki kodu aşağıdaki gibi düzenliyoruz.
PHP:
$s = $_GET['sayfa'];
if($s == "")
$s = 0;
else
$s = ($s-1) * 10;
$qq = mysql_query("select * from yazilar order by id desc limit $s,10");
while ( $qw = mysql_fetch_array($qq) ) {
echo $qw['baslik']."<br>";
}
Bu işlemden sonra sayfalamadaki bağlantıları göstereceğimiz alana geliyoruz. Orada da sadece 5 değişken üzerinde oynarak işlemlerimizi bitiriyoruz.
Aşağıda gördüğünüz kodda $bolum1, $bolum2,$limit ve $tbl_name değişkenleri ile oynuyoruz. Eğer sayfalama $_GET['sayfa'] ile değilde başka bir tanımlama ile de alıyorsak $page = $_GET['sayfa'] değişkenindeki sayfa tanımlamasını değiştiriyoruz.
Gelelim $bolum1,$bolum2 ve $tbl_name açıklamalarını.
$tbl_name değişkenini veri çektiğimiz tablonun ismini yazıyoruz.
$limit ise bir sayfada kaçtane içerik gösterdiğimiz değeri giriyoruz.Bizim 10 olduğu için 10 olarak düzenliyoruz.
$bolum1,$bolum2 değişkenlerini de örneklerle birlikte açıklamaya çalışayım.
Diyelim sayfalama yapısı şu şekilde olacak:
1. örnek: http://www.site.com/haber-basligi-1.html
O zaman
$bolum1 = "http://www.site.com/haber-basligi-";
$bolum2 = ".html";
2. Örnek :http://www.site.com/1-haber-basligi/
ise
$bolum1 = "http://www.site.com/";
$bolum2 = "-haber-basligi/";
Yani $bolum1 sayfa numarasından önce gelen bölüm iken $bolum2 sayfa numarasında sonra gelen bölüm olacak şekilde düzenliyoruz.
PHP:
$bolum1 = "http://www.site.com/sayfalama/";
$bolum2 = ".html";
/*
Place code to connect to your DB here.
*/
$tbl_name="tartisma"; //your table name
// How many adjacent pages should be shown on each side?
$adjacents = 3;
/*
First get total number of rows in data table.
If you have a WHERE clause in your query, make sure you mirror it here.
*/
$query = "SELECT COUNT(*) as num FROM $tbl_name";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];
/* Setup vars for query. */
$targetpage = "index.php"; //your file name (the name of this file)
$limit = 10; //how many items to show per page
$page = $_GET['sayfa'];
if($page)
$start = ($page - 1) * $limit; //first item to display on this page
else
$start = 0; //if no page var is given, set start to 0
/* Get data. */
$sql = "SELECT column_name FROM $tbl_name LIMIT $start, $limit";
$result = mysql_query($sql);
/* Setup page vars for display. */
if ($page == 0) $page = 1; //if no page var is given, default to 1.
$prev = $page - 1; //previous page is page - 1
$next = $page + 1; //next page is page + 1
$lastpage = ceil($total_pages/$limit); //lastpage is = total pages / items per page, rounded up.
$lpm1 = $lastpage - 1; //last page minus 1
/*
Now we apply our rules and draw the pagination object.
We're actually saving the code to a variable in case we want to draw it more than once.
*/
$pagination = "";
if($lastpage > 1)
{
$pagination .= "<div class=\"pagination\">";
//previous button
if ($page > 1)
$pagination.= "<a href=\"".$bolum1."$prev".$bolum2."\">« Önceki</a>";
else
$pagination.= "<span class=\"disabled\">« Önceki</span>";
//pages
if ($lastpage < 7 + ($adjacents * 2)) //not enough pages to bother breaking it up
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"".$bolum1."$counter".$bolum2."\">$counter</a>";
}
}
elseif($lastpage > 5 + ($adjacents * 2)) //enough pages to hide some
{
//close to beginning; only hide later pages
if($page < 1 + ($adjacents * 2))
{
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"".$bolum1."$counter".$bolum2."\">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=\"".$bolum1."$lpm1".$bolum2."\">$lpm1</a>";
$pagination.= "<a href=\"".$bolum1."$lastpage".$bolum2."\">$lastpage</a>";
}
//in middle; hide some front and some back
elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
{
$pagination.= "<a href=\"".$bolum1."1".$bolum2."\">1</a>";
$pagination.= "<a href=\"".$bolum1."2".$bolum2."\">2</a>";
$pagination.= "...";
for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"".$bolum1."$counter".$bolum2."\">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=\"".$bolum1."$lpm1".$bolum2."\">$lpm1</a>";
$pagination.= "<a href=\"".$bolum1."$lastpage".$bolum2."\">$lastpage</a>";
}
//close to end; only hide early pages
else
{
$pagination.= "<a href=\"".$bolum1."1".$bolum2."\">1</a>";
$pagination.= "<a href=\"".$bolum1."2".$bolum2."\">2</a>";
$pagination.= "...";
for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"".$bolum1."$counter".$bolum2."\">$counter</a>";
}
}
}
//next button
if ($page < $counter - 1)
$pagination.= "<a href=\"".$bolum1."$next".$bolum2."\">Sonraki »</a>";
else
$pagination.= "<span class=\"disabled\">Sonraki »</span>";
$pagination.= "</div>\n";
}
echo $pagination ;
Son olarakta CSS dosyamızı ektedir. oradan indirebilirsiniz.
Kaynak - Yagmayok
Bu yapıya bende uzun bir zaman önce başka bir yerde bulmuştum ve sitelerimde genelde bunu kullanıyorum. Ama tam olarak nerede bulduğumu hatırlayamıyorum. O yüzden o kişiyi kaynak olarak göstermediğim için kusura bakamsın. Galiba yabancı bir siteden almıştım. :=)