Простой PHP Paginator

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

Код

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

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

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

Теги:
Paginator
Добавлено: 02 Мая 2018 20:32:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...