PHP

Простой PHP Paginator

В своей жизни я видел несколько подобных скриптов, но с вами решил поделиться тем, который использую в своих проектах. Если вы начинающий разработчик, то рано или поздно, вы столкнётесь с тем, что вам необходимо будет распределять информацию по страницам. Для этого нам понадобится язык PHP и база данных с информацией. Наверняка вы видели примеры подобного функционала. Его можно встретить на любом крупном сайте.

Для того чтобы начать, нам надо создать подключение к базе данных. Далее мы определим несколько переменных. ‘$tableName’ будет содержать имя таблицы, в которой хранится информация, которую мы будем распределять по разным страницам. Она будет содержать список стран - ‘countries_list’, ‘$targetpage’, ‘$limit’ это количество строк, которые должны отображаться на странице. В нашем случае мы будет выводить по 10 записей.

А теперь я приведу список того, что делает следующий код.

Определяет три основные переменные, имя таблицы откуда будут извлекаться данные, название документа и количество отображаемых строк;
Далее мы подключаемся к базе и считаем количество строк, для того, чтобы знать с каким объёмом информации нам предстоит работать;
Если номер страницы передан нам как GET параметр то мы проверяем номер. Если он не валидный отправляем пользователя на первую страницу;
Затем нам необходимо сделать выборку;
Далее мы определяем номера для следующей и предыдущей страницы, а так же для первой и последней;
Теперь у нас есть целый ряд выражений, которые вычисляют все необходимые данные. Общее число страниц и т.д.
В конце мы выводим значение переменной ‘$paginate’ для отображения номеров страниц
Затем в цикле выводим записи
 	<?php
 	    include('connect.php');
 	 
 	    $tableName="countries_list";
 	    $targetpage = "index.php";
 	    $limit = 10;
 	 
 	    $query = "SELECT COUNT(*) as num FROM $tableName";
 	    $total_pages = mysql_fetch_array(mysql_query($query));
 	    $total_pages = $total_pages[num];
 	 
 	    $stages = 3;
 	    $page = mysql_escape_string($_GET['page']);
 	    if($page){
 	        $start = ($page - 1) * $limit;
 	    }else{
 	        $start = 0;
 	        }  
 	 
 	    $query1 = "SELECT * FROM $tableName LIMIT $start, $limit";
 	    $result = mysql_query($query1);
 	 
 	    if ($page == 0){$page = 1;}
 	    $prev = $page - 1;
 	    $next = $page + 1;
 	    $lastpage = ceil($total_pages/$limit);
 	    $LastPagem1 = $lastpage - 1;                   
 	 
 	    $paginate = '';
 	    if($lastpage > 1)
 	    {  
 	 
 	        $paginate .= "<div class='paginate'>";
 	        if ($page > 1){
 	            $paginate.= "<a href='$targetpage?page=$prev'>previous</a>";
	        }else{
 	            $paginate.= "<span class='disabled'>previous</span>"; }
 	 
 	        if ($lastpage < 7 + ($stages * 2))  
 	        {
 	            for ($counter = 1; $counter <= $lastpage; $counter++)
 	            {
 	                if ($counter == $page){
 	                    $paginate.= "<span class='current'>$counter</span>";
 	                }else{
 	                    $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
 	            }
 	        }
 	        elseif($lastpage > 5 + ($stages * 2))   
	        {
 	            if($page < 1 + ($stages * 2))
 	            {
 	                for ($counter = 1; $counter < 4 + ($stages * 2); $counter++)
 	                {
 	                    if ($counter == $page){
 	                        $paginate.= "<span class='current'>$counter</span>";
 	                    }else{
 	                        $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
 	                }
 	                $paginate.= "...";
 	                $paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
 	                $paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";
 	            }
 	            elseif($lastpage - ($stages * 2) > $page && $page > ($stages * 2))
 	            {
 	                $paginate.= "<a href='$targetpage?page=1'>1</a>";
 	                $paginate.= "<a href='$targetpage?page=2'>2</a>";
 	                $paginate.= "...";
 	                for ($counter = $page - $stages; $counter <= $page + $stages; $counter++)
 	                {
 	                    if ($counter == $page){
 	                        $paginate.= "<span class='current'>$counter</span>";
 	                    }else{
 	                        $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
	                }
	                $paginate.= "...";
 	                $paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
 	                $paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";
 	            }
 	            else
 	            {
 	                $paginate.= "<a href='$targetpage?page=1'>1</a>";
	                $paginate.= "<a href='$targetpage?page=2'>2</a>";
 	                $paginate.= "...";
 	                for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++)
 	                {
 	                    if ($counter == $page){
 	                        $paginate.= "<span class='current'>$counter</span>";
 	                    }else{
 	                        $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
 	                }
 	            }
 	        }
 	 
 	        if ($page < $counter - 1){
 	            $paginate.= "<a href='$targetpage?page=$next'>next</a>";
 	        }else{
 	            $paginate.= "<span class='disabled'>next</span>";
 	            }
 	 
 	        $paginate.= "</div>";      
 	 
 	}
 	 echo $total_pages.' Results';
 	echo $paginate;
 	?>
 	 
 	<ul>
 	 
 	<?php
 	 
 	        while($row = mysql_fetch_array($result))
 	        {
 	 
 	        echo '<li>'.$row['country'].'</li>';
 	 
 	        }
 	 
 	    ?>
 	</ul>

Добавим немного стиля

Давайте теперь немного оформим наш paginator
 	.paginate {
 	font-family:Arial, Helvetica, sans-serif;
 	    padding: 3px;
 	    margin: 3px;
 	}
 	 
 	.paginate a {
 	    padding:2px 5px 2px 5px;
 	    margin:2px;
 	    border:1px solid #999;
 	    text-decoration:none;
 	    color: #666;
 	}
 	.paginate a:hover, .paginate a:active {
 	    border: 1px solid #999;
 	    color: #000;
 	}
 	.paginate span.current {
 	    margin: 2px;
 	    padding: 2px 5px 2px 5px;
 	        border: 1px solid #999;
 	 
 	        font-weight: bold;
 	        background-color: #999;
 	        color: #FFF;
 	    }
 	    .paginate span.disabled {
 	        padding:2px 5px 2px 5px;
 	        margin:2px;
 	        border:1px solid #eee;
 	        color:#DDD;
 	    }
 	 
 	    li{
 	        padding:4px;
 	        margin-bottom:3px;
 	        background-color:#FCC;
 	        list-style:none;}
 	 
 	    ul{margin:6px;
 	    padding:0px;
 	}
Добавлено: 16 Августа 2013 01:09:47 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...