PHP

Нумерация страниц на php (пагинация).

Для создания нумерации страниц в готовых CMS рядовым пользователям не нужно задумываться о том, как этот механизм будет функционировать. Большое количество программистов уже позаботились о том, чтобы все выводилось там, где нужно и как нужно. Однако, иногда возникают ситуации, когда в процессе создания собственного шаблона для сайта приходится решать подобные задачи самостоятельно (в особенности, когда готовые решения в виде плагинов не подходят). Здесь нам на помощь приходит php. Далее рассматривается один из примеров подобного скрипта.

Скрипт состоит из функции, которой передаются «входные» параметры. Перед ее вызовом ваш сценарий должен определить все эти необходимые переменные. Для определения номера текущей страницы вы можете «выудить» необходимую информацию, например, из урла (решение данной задачи – ваше домашнее задание).

Итак, определяем все необходимые переменные.
$all = 150; //количество постов в категории (определяем количество постов в базе данных)
$lim = 10; //количество постов, размещаемых на одной странице
$prev = 3; //количество отображаемых ссылок до и после номера текущей страницы
$curr_link = 18; //номер текущей страницы (получаем из URL)
$curr_css = "current"; //css-стиль для ссылки на "текущую (активную)" страницу
$link = "http://site.ru/category/news/"; //часть адреса, который будет использован для формирования линков на другие страницы

В нужном нам месте вызываем функцию для создания нумерации, передавая ей исходные данные:
pagination($all,$lim,$prev,$curr_link,$curr_css,$link);

Ну и собственно, сама функция. С виду кажется несколько сложно для восприятия, так как идет рутинный и дотошный процесс создания линка по частям. Здесь нужно обратить внимание на три момента:

1. Функция позволяет задавать необходимое количество отображаемых номеров на странице. Если страниц очень много, а вы задали к примеру 3 линка до и после номера текущей страницы, то она сформирует такой результат:

1…14 15 17 18 19 20 21 … 100


2. Можно задать, чтобы при текущей странице до 7 или 10 символы «…» не появлялись, а отображались все страницы до текущей. Подправить это можно в строке 11 (замените 6 любым другим числом страниц).

3. Чтобы исключить дублирование первой страницы для ее линка не добавляются дополнительные данные (?page=1). Соответственно, ваш контроллер должен делать проверку: если параметр page в линке отсутствует, то это первая страница.

Данный скрипт позволяет получать УРЛы с номерами страниц, например, так http://site.ru/category/news/?page=6.
function pagination($all, $lim, $prev, $curr_link ,$curr_css, $link)
{
//осуществляем проверку, чтобы выводимые первая и последняя страницы
// не вышли за границы нумерации
    $first=$curr_link-$prev;
    if($first<1) $first=1;
    $last=$curr_link+$prev;
    if($last>ceil($all/$lim))$last=ceil($all/$lim);
 
//начало вывода нумерации
//выводим первую страницу
    $y=1;
    if($first>1) echo "<a href='{$link}?page={$y}'>1</a> ";
//если текущая страница далеко от 1-й, то часть предыдущих страниц 
//скрываем троеточием
    $y=$first-1;	
    if($first>6) {
       echo "<a href='{$link}?page={$y}'>...</a> ";
    }else {
//если текущая страница имеет номер до 10, то выводим все номера 
//перед заданным диапазоном без скрытия 
        for($i=2;$i<$first;$i++){
            echo "<a href='{$link}?page={$i}'>$i</a> ";
        }
    }
//отображаем заданный диапазон: текущая страница +-$prev
    for($i=$first;$i<$last+1;$i++){
 
	if($i==$curr_link){?>
   //если выводится текущая страница, то ей назначается особый стиль css
	    <span><?=$i?></span>
	<?php }else{
		 $alink = "<a href='{$link}";
		 if($i != 1) $alink .= "?page={$i}";
		 $alink .= "'>$i</a> 	";
		 echo $alink;
	}
    }
 
    $y=$last+1;
    //часть страниц скрываем троеточием
    if($last<ceil($all/$lim) and ceil($all/$lim)-$last>2) echo "<a href='{$link}?page={$y}'>...</a> ";
    //выводим последнюю страницу
    $e=ceil($all/$lim);
    if($last<ceil($all/$lim)) echo "<a href='{$link}?page={$e}'>$e</a>";
}
Теги:
пагинация
Добавлено: 10 Мая 2018 07:47:02 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...