İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Php İle Sayfalamaya Çok Güzel Bir Örnek

yagmayok

1
İyinet Üyesi
Katılım
25 Ocak 2005
Mesajlar
7,131
Reaction score
89
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.


PHP:
$qq = mysql_query("select * from yazilar order by id desc limit 0,10");
		while ( $qw = mysql_fetch_array($qq) ) {
		echo $qw['baslik']."<br>";
		}
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.

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. :=)
 

Invictus

0
İyinet Üyesi
Katılım
4 Şubat 2010
Mesajlar
328
Reaction score
8
Konum
istanbul
güzel anlatım olmuş. sanırım fonksiyon halindeydi sen fonksiyondan çıkartıp kullanmışsın. emin ol fonksiyon olarak kullanımı çok daha rahat oluyor, her dosyada tek satırla çağırıyosun

PHP:
function sayfala($suanda = 1,$iceriksay,$limit = 15,$sayfa = "/",$uzanti = "?page=") {
	$onceki = $suanda - 1;
	$sonraki = $suanda + 1;
	$sonsayfa = ceil($iceriksay / $limit);
	$ileri = $suanda + 4;
	if($ileri > $sonsayfa) $ileri = $sonsayfa;
	$geri = $suanda - 4;
	if($geri < 1) $geri = 1;

	$sayfalar = "";
	if($sonsayfa > 1) {
		$sayfalar .= "\t\t\t<div class=\"pagination\" >\n";
		if($suanda >= 6) {
			$sayfalar .= "\t\t\t\t<a href=\"".$sayfa."1".$uzanti."\"><< İlk</a>\n";
		}
		if($suanda > 1) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$onceki$uzanti\">< Önceki</a>\n";
		}
		for($i=$geri;$i<$suanda;$i++) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$i$uzanti\">$i</a>\n";	
		}
		$sayfalar .= "\t\t\t\t<span class=\"current\">$suanda</span>\n";
		for($i=$suanda+1;$i<=$ileri;$i++) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$i$uzanti\">$i</a>\n";	
		}
		if($suanda < $sonsayfa) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$sonraki$uzanti\">Sonraki ></a>\n";
		}
		if($suanda < $sonsayfa - 4) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$sonsayfa$uzanti\">Son >></a>\n";
		}
		$sayfalar .= "\t\t\t</div>\n";
	}
	return $sayfalar;
}


$suanda = @$_GET['page'];
$tumicerik = mysql_query("SELECT id FROM driver ORDER BY id ASC");
$iceriksay = mysql_num_rows($tumicerik);
$limit = 15;
$sayfa = "/son-eklenenler-";
$uzanti = ".html";
echo sayfala($suanda,$iceriksay,$limit,$sayfa,$uzanti);
 

ilyasbat

0
İyinet Üyesi
Katılım
22 Temmuz 2009
Mesajlar
118
Reaction score
9
güzel anlatım olmuş. sanırım fonksiyon halindeydi sen fonksiyondan çıkartıp kullanmışsın. emin ol fonksiyon olarak kullanımı çok daha rahat oluyor, her dosyada tek satırla çağırıyosun

PHP:
function sayfala($suanda = 1,$iceriksay,$limit = 15,$sayfa = "/",$uzanti = "?page=") {
	$onceki = $suanda - 1;
	$sonraki = $suanda + 1;
	$sonsayfa = ceil($iceriksay / $limit);
	$ileri = $suanda + 4;
	if($ileri > $sonsayfa) $ileri = $sonsayfa;
	$geri = $suanda - 4;
	if($geri < 1) $geri = 1;

	$sayfalar = "";
	if($sonsayfa > 1) {
		$sayfalar .= "\t\t\t<div class=\"pagination\" >\n";
		if($suanda >= 6) {
			$sayfalar .= "\t\t\t\t<a href=\"".$sayfa."1".$uzanti."\"><< İlk</a>\n";
		}
		if($suanda > 1) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$onceki$uzanti\">< Önceki</a>\n";
		}
		for($i=$geri;$i<$suanda;$i++) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$i$uzanti\">$i</a>\n";	
		}
		$sayfalar .= "\t\t\t\t<span class=\"current\">$suanda</span>\n";
		for($i=$suanda+1;$i<=$ileri;$i++) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$i$uzanti\">$i</a>\n";	
		}
		if($suanda < $sonsayfa) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$sonraki$uzanti\">Sonraki ></a>\n";
		}
		if($suanda < $sonsayfa - 4) {
			$sayfalar .= "\t\t\t\t<a href=\"$sayfa$sonsayfa$uzanti\">Son >></a>\n";
		}
		$sayfalar .= "\t\t\t</div>\n";
	}
	return $sayfalar;
}


$suanda = @$_GET['page'];
$tumicerik = mysql_query("SELECT id FROM driver ORDER BY id ASC");
$iceriksay = mysql_num_rows($tumicerik);
$limit = 15;
$sayfa = "/son-eklenenler-";
$uzanti = ".html";
echo sayfala($suanda,$iceriksay,$limit,$sayfa,$uzanti);
Fonksiyon daha rahattır hatta en rahatı class. :)
 

PhpCode

0
İyinet Üyesi
Katılım
5 Temmuz 2013
Mesajlar
122
Reaction score
0
Ben sayfalamayı yorum scriptimde kullanıyorum. Yorum scriptimde de onay var tabiki 0 ise anasayfada gözükmüyo 1 ise gözüküyor. Ancak sayfalama yaptırırken yorum ekledikçe otomatik olarak sayfa oluşturuyor. Yani onaylanmayan yorumlar içinde sayfa ekliyor. Onaylanan yorum sayısı kadar sayfa oluştur diye şart koydum yine olmadı yardımcı olursanız sevinirim :) Yazdığım kod

$gosterim=5;
$page=@$_GET['page'];

if(empty($page) || !is_numeric($page))
{$page=1;}


$topkayit_sayisi=mysql_num_rows(mysql_query("Select y_id From yorumlar"));
$onaylanansayi=mysql_query("Select onay='1' From yorumlar");
$sayfa_sayisi=ceil($onaylanansayi/$gosterim);
$ilk_kayit=($page*$gosterim)-$gosterim;
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

seo ajansı , sosyal medya yönetimi
Üst