Пагинация на PHP - постраничная навигация

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

Пагинация на PHP - постраничная навигация

Сообщение Slash » Ср авг 19, 2015 7:32 am

На форуме, товарищ lyod уже выкладывал код пагинации (тема: Скрипт постраничной навигации (Пагинация на PHP)).
Это еще один код постраничной навигации (файл pagination.php):

Код: Выделить всё

<?php
/*
    DANFA http://danfa.org
    Постраничная навигация
    Файл pagination.php
*/

$lines_per_page = 15; #Количество блоков на странице

# URL страницы
$page = basename($_SERVER['REQUEST_URI']);
if (preg_match('/\&/', $page))
{
    $explode = explode('&', $page); 
    $page 
= $explode[0];
}
# END URL страницы

$count = ceil($all_lines / $lines_per_page);

$_GET['page'] = isset($_GET['page']) ? $_GET['page'] : null;
if ($_GET['page'] > $count)
{
    header('location: ' . $page);
}

if (isset($_GET['page']))
{
    $limit = ($_GET['page'] * $lines_per_page) - $lines_per_page;
}
else
{
    $limit = 0;
}

if (($limit + $lines_per_page) > $all_lines)
{
    $offset = $all_lines - $limit;
}
else
{
    $offset = $lines_per_page;
}

if ($count > 1)
{
    if ($count > 5)
    {
        $get_page = isset($_GET['page']) ? $_GET['page'] : 1;
        $x = ($get_page > 1) ? (($get_page - 1 == 1) ? 2 : $get_page - 1) : 2;
        $y = ($count - $get_page > 2) ? ($get_page + 1) : $count - 1;
        $dot_start = ($_GET['page'] >= 4) ? ' ...' : null;
        $dot_end = ($count - 3 >= $_GET['page']) ? '... ' : null;        
    
}
    else
    
{
        $x = 2;
        $y = $count - 1;
        $dot_start = null;
        $dot_end = null;    
    
}

    # Генирация навигации
    $pagination[] = (!$_GET['page']) ? '[ - <strong>1</strong> - ]' : '[ <a href="' . $page . '">1</a> ]' . $dot_start;
    
    for 
($i = $x; $i <= $y; $i++)
    {
        $pagination[] = ($_GET['page'] == $i) ? '[ - <strong>' . $i . '</strong> - ]' : '[ <a href="' . $page . '&amp;page=' . $i . '">' . $i . '</a> ]';
    }
    
    $pagination
[] = ($_GET['page'] == $count) ? '[ - <strong>' . $count .'</strong> - ]' : $dot_end . '[ <a href="' . $page . '&amp;page=' . $count . '">' . $count . '</a> ]';
}

Как подключить сценарий:
В файле, который надо разбить на несколько страниц, определяем количество записей всего, можно через функцию mysqli_num_rows() и передаем результат в переменную $all_lines, затем подключаем файл pagination.php и выполняем запрос:

Код: Выделить всё

$all_lines = mysqli_num_rows($query);        
include('pagination.php');

$sql = "SELECT * 
    FROM table        
    LIMIT 
$limit$offset";
$query = mysqli_query($connect, $sql);
if (!$query) 
{
    mysqli_error();
}

Код вывода пагинации в шаблоне:

Код: Выделить всё

<div class="pagination">
    {if 
$count <= 1}
        {echo 
$lang['all_records'] . ': ' $all_lines}
    {else}
        {echo 
$lang['all_records'] . ': ' $all_lines ' ' $lang['all_pages'] . ': ' $count}<br />
        {foreach 
$pagination as $link}
            {echo 
$link}
        {endforeach}
    {endif}
</
div

Код для шаблона написан с расчетом на то что используется шаблонизатор из темы: Шаблонизатор на PHP.
Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

Re: Пагинация на PHP - постраничная навигация

Сообщение Slash » Чт авг 20, 2015 7:43 am

Кто не использует шаблонизатор, в шаблон может вставить этот код:

Код: Выделить всё

<div class="pagination">
    <?php if ($count <= 1): ?>
       <?php echo 'Всего записей: ' . $all_lines; ?>
    <?php else: ?>
       <?php echo 'Всего записей: ' . $all_lines . ' Всего страниц: ' . $count; ?><br />
        <?php foreach ($pagination as $link) ?>
           <?php echo $link; ?>
       <?php endforeach; ?>
    <?php endif; ?>
</div>

Ещё можно добавить класса, например:

Код: Выделить всё

.pagination
{
   display: block;
   float: right;
}

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость