آموزش ساخت صفحه بندی(pagination) با php

شاید دیدید که وقتی تعداد پست های یک سایت یا وبلاگ افزایش پیدا می کنه و بیش از حدی می شه که توی صفحه ی اول جا بشه، سایت ها یه صفحه بندی در نظر می گیرن برای صفحاتشون که مطالب رو در چند صفحه نمایش می ده که با کلیک بر روی شماره ی هر صفحه می شه پست های قدیمی تر رو دید. امروز قصد دارم یکی از این آموزش های کاربردی رو براتون بنویسم که خیلی راحت و زیبا می تونید یه صفحه بندی تو سایت خودتون ایجاد کنید و ازش لذت ببرید. این اسکریپت توسط برنامه نویسان سایت Stranger Studios نوشته شده

بنده هم هیچ نقشی در این کار نداشته ام به جز فارسی نوشتنش. تبریک به خودم.

نتیجه ی کار به این صورت خواهد بود:

pagination_php1.gif



بخش اول: کد نویسی

PHP:
<?php
	
	include('config.php');	// فایل حاوی تنظیمات اتصال به پایگاه داده

	$tbl_name='tableName';		//نام جدول پایگاه داده
	
	
	$adjacents = 3; //تعداد صفحاتی که بعد از شماره ی صفحه نمایش می دهد
	
	$query = 'SELECT COUNT(*) as `num` FROM $tbl_name'; // کوئری دریافت تعداد صفحات قابل نمایش 
	$total_pages = mysql_fetch_array(mysql_query($query));
	$total_pages = $total_pages['num'];
	
	$targetpage = 'pageName'; 	//اسم این فایل که کدها را در آن قرار می دهید
	
	$limit = 5; 								//تعداد پست هایی که در هر صفحه نشان داده می شود
	$page = $_GET['page'];
	if($page) 
		$start = ($page - 1) * $limit; 			//اولین گزینه گزینه ای که در صفحه نمایش داده می شود
	else
		$start = 0;								
	
	/* دریافت اطلاعات 
	column_name نام ستون یا ستونهایی می باشد که از جدول می خوانید
	*/
	$sql = 'SELECT column_name FROM $tbl_name LIMIT $start, $limit';
	$result = mysql_query($sql);
	
	if ($page == 0) $page = 1;
	$prev = $page - 1;
	$next = $page + 1;
	$lastpage = ceil($total_pages/$limit);
	$lpm1 = $lastpage - 1;
	
	$pagination = '';
	if($lastpage > 1)
	{	
		$pagination .= '<div class=\'pagination\'>';
		//کلید قبلی
		if ($page > 1) 
			$pagination.= '<a href=\'$targetpage?page=$prev\'>« previous</a>';
		else
			$pagination.= '<span class=\'disabled\'>« previous</span>';	
		
		//صفحات	
		if ($lastpage < 7 + ($adjacents * 2))	
		{	
			for ($counter = 1; $counter <= $lastpage; $counter++)
			{
				if ($counter == $page)
					$pagination.= '<span class=\'current\'>$counter</span>';
				else
					$pagination.= '<a href=\'$targetpage?page=$counter\'>$counter</a>';					
			}
		}
		elseif($lastpage > 5 + ($adjacents * 2))	
		{
			
			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=\'$targetpage?page=$counter\'>$counter</a>';					
				}
				$pagination.= '...';
				$pagination.= '<a href=\'$targetpage?page=$lpm1\'>$lpm1</a>';
				$pagination.= '<a href=\'$targetpage?page=$lastpage\'>$lastpage</a>';		
			}
			
			elseif($lastpage - ($adjacents * 2) > $page &amp;amp;&amp;amp; $page > ($adjacents * 2))
			{
				$pagination.= '<a href=\'$targetpage?page=1\'>1</a>';
				$pagination.= '<a href=\'$targetpage?page=2\'>2</a>';
				$pagination.= '...';
				for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
				{
					if ($counter == $page)
						$pagination.= '<span class=\'current\'>$counter</span>';
					else
						$pagination.= '<a href=\'$targetpage?page=$counter\'>$counter</a>';					
				}
				$pagination.= '...';
				$pagination.= '<a href=\'$targetpage?page=$lpm1\'>$lpm1</a>';
				$pagination.= '<a href=\'$targetpage?page=$lastpage\'>$lastpage</a>';		
			}
			
			else
			{
				$pagination.= '<a href=\'$targetpage?page=1\'>1</a>';
				$pagination.= '<a href=\'$targetpage?page=2\'>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=\'$targetpage?page=$counter\'>$counter</a>';					
				}
			}
		}
		
		//کلید بعدی
		if ($page < $counter - 1) 
			$pagination.= '<a href=\'$targetpage?page=$next\'>next »</a>';
		else
			$pagination.= '<span class=\'disabled\'>next »</span>';
		$pagination.= '</div>\n';		
	}
?>

	<?php
		while($row = mysql_fetch_assoc($result))
		{

			/* 
			کدهای تکرار شما
			برای مثال:
			
			echo $row['name'].'<br>';
			
			*/
		
		}
	?>

<?php echo $pagination; ?>


توضیحات کامل رو به صورت کامنت توی کدها گذاشتم. فقط یه نکته هم این که شما می تونید استایل این صفحه بندی رو تغییر بدید. برای نمونه این استایل رو می تونید در فایل css خودتون قرار بدید:
کد:
div.pagination {
	padding: 3px;
	margin: 3px;
}

div.pagination a {
	padding: 2px 5px 2px 5px;
	margin: 2px;
	border: 1px solid #AAAADD;
	
	text-decoration: none; /* no underline */
	color: #000099;
}
div.pagination a:hover, div.pagination a:active {
	border: 1px solid #000099;

	color: #000;
}
div.pagination span.current {
	padding: 2px 5px 2px 5px;
	margin: 2px;
		border: 1px solid #000099;
		
		font-weight: bold;
		background-color: #000099;
		color: #FFF;
	}
	div.pagination span.disabled {
		padding: 2px 5px 2px 5px;
		margin: 2px;
		border: 1px solid #EEE;
	
		color: #DDD;
	}

استایل های دیگه ای هم هست که لازم نیست شما زحمت بکشید خیلی. می تونید برید از این آدرس دانلود کنید:

بقیه ی استایل ها


چند نمونه از استایل های موجود:

all-style.gif


امیدوارم به دردتون خورده باشه.
همیشه شاد باشید

منبع:
minerva-se
 

qwerty2010

New Member
صفحه بندي

وقتي اين كد را اجرا ميكنم ، خطاي زير ر. ميبينم

Parse error: parse error in c:\program files\easyphp1-8\www\khabar_usa\khabar.php on line 73


elseif($lastpage - ($adjacents * 2) > $page &amp;amp;&amp;amp; $page > ($adjacents * 2))



شاید دیدید که وقتی تعداد پست های یک سایت یا وبلاگ افزایش پیدا می کنه و بیش از حدی می شه که توی صفحه ی اول جا بشه، سایت ها یه صفحه بندی در نظر می گیرن برای صفحاتشون که مطالب رو در چند صفحه نمایش می ده که با کلیک بر روی شماره ی هر صفحه می شه پست های قدیمی تر رو دید. امروز قصد دارم یکی از این آموزش های کاربردی رو براتون بنویسم که خیلی راحت و زیبا می تونید یه صفحه بندی تو سایت خودتون ایجاد کنید و ازش لذت ببرید. این اسکریپت توسط برنامه نویسان سایت Stranger Studios نوشته شده

بنده هم هیچ نقشی در این کار نداشته ام به جز فارسی نوشتنش. تبریک به خودم.

نتیجه ی کار به این صورت خواهد بود:

pagination_php1.gif



بخش اول: کد نویسی

PHP:
<?php
 
    include('config.php');    // فایل حاوی تنظیمات اتصال به پایگاه داده
 
    $tbl_name='tableName';        //نام جدول پایگاه داده
 
 
    $adjacents = 3; //تعداد صفحاتی که بعد از شماره ی صفحه نمایش می دهد
 
    $query = 'SELECT COUNT(*) as `num` FROM $tbl_name'; // کوئری دریافت تعداد صفحات قابل نمایش 
    $total_pages = mysql_fetch_array(mysql_query($query));
    $total_pages = $total_pages['num'];
 
    $targetpage = 'pageName';     //اسم این فایل که کدها را در آن قرار می دهید
 
    $limit = 5;                                 //تعداد پست هایی که در هر صفحه نشان داده می شود
    $page = $_GET['page'];
    if($page) 
        $start = ($page - 1) * $limit;             //اولین گزینه گزینه ای که در صفحه نمایش داده می شود
    else
        $start = 0;                                
 
    /* دریافت اطلاعات 
    column_name نام ستون یا ستونهایی می باشد که از جدول می خوانید
    */
    $sql = 'SELECT column_name FROM $tbl_name LIMIT $start, $limit';
    $result = mysql_query($sql);
 
    if ($page == 0) $page = 1;
    $prev = $page - 1;
    $next = $page + 1;
    $lastpage = ceil($total_pages/$limit);
    $lpm1 = $lastpage - 1;
 
    $pagination = '';
    if($lastpage > 1)
    {    
        $pagination .= '<div class=\'pagination\'>';
        //کلید قبلی
        if ($page > 1) 
            $pagination.= '<a href=\'$targetpage?page=$prev\'>« previous</a>';
        else
            $pagination.= '<span class=\'disabled\'>« previous</span>';    
 
        //صفحات    
        if ($lastpage < 7 + ($adjacents * 2))    
        {    
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination.= '<span class=\'current\'>$counter</span>';
                else
                    $pagination.= '<a href=\'$targetpage?page=$counter\'>$counter</a>';                    
            }
        }
        elseif($lastpage > 5 + ($adjacents * 2))    
        {
 
            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=\'$targetpage?page=$counter\'>$counter</a>';                    
                }
                $pagination.= '...';
                $pagination.= '<a href=\'$targetpage?page=$lpm1\'>$lpm1</a>';
                $pagination.= '<a href=\'$targetpage?page=$lastpage\'>$lastpage</a>';        
            }
 
            elseif($lastpage - ($adjacents * 2) > $page &amp;amp;&amp;amp; $page > ($adjacents * 2))
            {
                $pagination.= '<a href=\'$targetpage?page=1\'>1</a>';
                $pagination.= '<a href=\'$targetpage?page=2\'>2</a>';
                $pagination.= '...';
                for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= '<span class=\'current\'>$counter</span>';
                    else
                        $pagination.= '<a href=\'$targetpage?page=$counter\'>$counter</a>';                    
                }
                $pagination.= '...';
                $pagination.= '<a href=\'$targetpage?page=$lpm1\'>$lpm1</a>';
                $pagination.= '<a href=\'$targetpage?page=$lastpage\'>$lastpage</a>';        
            }
 
            else
            {
                $pagination.= '<a href=\'$targetpage?page=1\'>1</a>';
                $pagination.= '<a href=\'$targetpage?page=2\'>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=\'$targetpage?page=$counter\'>$counter</a>';                    
                }
            }
        }
 
        //کلید بعدی
        if ($page < $counter - 1) 
            $pagination.= '<a href=\'$targetpage?page=$next\'>next »</a>';
        else
            $pagination.= '<span class=\'disabled\'>next »</span>';
        $pagination.= '</div>\n';        
    }
?>
 
    <?php
        while($row = mysql_fetch_assoc($result))
        {
 
            /* 
            کدهای تکرار شما
            برای مثال:
 
            echo $row['name'].'<br>';
 
            */
 
        }
    ?>
 
<?php echo $pagination; ?>


توضیحات کامل رو به صورت کامنت توی کدها گذاشتم. فقط یه نکته هم این که شما می تونید استایل این صفحه بندی رو تغییر بدید. برای نمونه این استایل رو می تونید در فایل css خودتون قرار بدید:
کد:
div.pagination {
    padding: 3px;
    margin: 3px;
}
 
div.pagination a {
    padding: 2px 5px 2px 5px;
    margin: 2px;
    border: 1px solid #AAAADD;
 
    text-decoration: none; /* no underline */
    color: #000099;
}
div.pagination a:hover, div.pagination a:active {
    border: 1px solid #000099;
 
    color: #000;
}
div.pagination span.current {
    padding: 2px 5px 2px 5px;
    margin: 2px;
        border: 1px solid #000099;
 
        font-weight: bold;
        background-color: #000099;
        color: #FFF;
    }
    div.pagination span.disabled {
        padding: 2px 5px 2px 5px;
        margin: 2px;
        border: 1px solid #EEE;
 
        color: #DDD;
    }

استایل های دیگه ای هم هست که لازم نیست شما زحمت بکشید خیلی. می تونید برید از این آدرس دانلود کنید:

بقیه ی استایل ها


چند نمونه از استایل های موجود:

all-style.gif


امیدوارم به دردتون خورده باشه.
همیشه شاد باشید

منبع:
minerva-se
 

amir1390

Member
شاخه بندی خاصی نداره ؟!
شایدم منظور شما رو متوجه نشدم ؟

آخه من کتاب آموزش گام به گام php جعفرنژاد قمی رو خریدم, تقریبا همشم خوندم, ولی هیچی راجب اینکه چه جوری صفحه صفحه کنم توضیح نداده :sad: البته شاید اگه خودم وقت بزارم بتونم با چیزایی که بلدم این کار رو انجام بدم ولی زمین تا آسمون با این آموزش فرق میکنه :sad: از این آموزش هم واقعا هیچی سر در نمیارم, اصلا خیلی از این کدها و توابع ای که تو این آموزش هست رو من برای اولین بار میبینم.

حالا میخوام اگه میتونید یه بار دیگه با زبان ساده تر این آموزش رو بدید

ممنون :rose::oops::rose:
 

sharktech

کاربر فعال
این جعفر نژاد قمی کیه که برای هر چیزی کتاب مینویسه !!!!!!!!

شما کتاب خوبی رو انتخاب نکردین, اینترنت و چند تا سایت ( مثلا این سایت ) هستن که بهترین منبع هستن و به شما توصیه میکنم که از کتاب فارسی استفاده نکنید و از کتاب های زبان اصلی استفاده کنید.
 

abbas3zaar

New Member
سلام. منم مشکل پست دوم این تاپیک رو دارم!!

ارور میده اینم عکس:
یکم راهنماییم کنید


cp8of5f5sf21le3szpdh.jpg
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا