простая подкачка с помощью PHP - PullRequest
3 голосов
/ 28 января 2010

Я бы хотел реализовать пейджинг в PHP. У меня есть некоторый набор результатов из БД, пусть это будет массив. Мне нужен пейджинг, который должен отображать 4 записи на страницу, а номера страниц должны быть следующими

"<< 1,2,3 ..... 20 >>"

и когда вы выбираете страницу 2, то формат должен быть следующим

"<< 3,4,5 ..... 20 >>"

Не могли бы вы, ребята, предложить мне некоторые концепции подкачки для реализации этого?

Ответы [ 5 ]

3 голосов
/ 28 января 2010

Для этого вы можете использовать предложение LIMIT в SQL.

Здесь хороший учебник, с которого можно начать.

1 голос
/ 28 января 2010

Получение результатов достаточно просто, с использованием лимита, как указано выше, в зависимости от номера страницы. Вы можете использовать цикл для распечатки номеров страниц.

Сначала, скажем, номер страницы отправляется как стр = 2 в строке запроса.

$pagenum=(int)$_GET['page'];
if($pagenum<1){ $pagenum=1; }//perform a sanity check. You might also query to find the max page number and see that it's not higher than that.

Затем вы вставляете страницу в свой SQL-запрос как смещение, умножая его на количество результатов на странице минус результаты на странице.

Почти в каждом случае, конечно, следует использовать подготовленный оператор для помещения с использованием предоставленных параметров в SQL, однако в этом случае это не является строго обязательным , поскольку вы уверены, что переменная представляет собой int из-за приведения ( (int) часть). Просто должен был это подчеркнуть.

Скажем, у вас есть 4 элемента на странице. Вы можете использовать два аргумента для LIMIT или LIMIT и OFFSET отдельно. Если вы используете просто предел, первое число - это смещение, второе - это число результатов.

$offset=$pagenum*4-4;//this means for page 1, start on 0, page 2 starts on 4, etc.
$sql="select * from the_table limit $offset,4";

Итак, вот как вы получаете данные для данного номера страницы. Затем распечатка номеров страниц - это другая история. Этот пример основан на том, как вы хотите, чтобы страницы выглядели так, как описано выше.

for($i=pagenum+1;$i<20;$i++){
  if($i<$pagenum+4){  ?>
  <a href='stuff.php?page=<?php echo $i;?>'><?php echo $i;?></a>
  <?php } elseif($i==$pagenum+4) { ?>
  ... <?php } elseif($i==20){ ?>
  <a href='stuff.php?page=20'>20</a>
  <?php } ?>
1 голос
/ 28 января 2010

Посмотрите на PEAR :: Pager .

0 голосов
/ 28 января 2010

Будет наиболее эффективно, если вы управляете этим в БД и в коде доступа к данным, у вас может быть функция, которая принимает аргументы, такие как pageSize, PageNumber, sortOrder. Ваш sql может выглядеть примерно так:

SELECT * FROM your_table WHERE condition = true ORDER BY some_field LIMIT 100, 10
0 голосов
/ 28 января 2010

Я бы порекомендовал использовать стандартизированную библиотеку. Игнасио рекомендовал библиотеку PEAR :: Pager, но я неравнодушен к Zend_Paginator в Zend Framework.

Существует множество адаптеров, включенных в библиотеку и на Github другими для использования различных источников данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...