|
|
|
| Вобщем знаю что в сети полно этих paginator'ов, но я хочу написать свой.
Но проблема в чем. Я хочу сделать, например, как на яндексе в поиске.
Практически все релизовал, но не могу вычислить следущее.
Например, пусть всего элементов 100(total). На страницу выводится по 10 элементов (col_element), Текущая старница (cur_page) равна, например 3
В итоге получается что в цикле по идее мы должны вывести значения от 1 до 10, где число 3 будет текущим (т.е. ввиде обычного текста, а не ссылки). Если текущая страница - cur_page равна, например 12, то соотвественно в цикле выводим от 11 до 20.
Я не могу получить точку старта в цикле, т.е. понимаю сдесь простоая математика, но что-то не получается сообразить как расчитать точку старта, зная все переменные.
Прошу помощи в разъяснении | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 19:39)
| | >Если текущая страница - cur_page равна, например 12, то соотвественно в цикле выводим от 11 до 20.
Почему? Если текущая страница 12, а на странице выводится 10 позиций, то цикл должен пробегать значения от 111 до 120. Тогда точка старта вычисляется очень просто cur_page * col_element + 1. | |
|
|
|
|
|
|
|
для: cheops
(07.01.2011 в 19:45)
| | >>Если текущая страница - cur_page равна, например 12, то соотвественно в цикле выводим от 11 до 20.
>Почему? Если текущая страница 12, а на странице выводится 10 позиций, то цикл должен пробегать значения от 111 до 120. Тогда точка старта вычисляется очень просто cur_page * col_element + 1.
Это точка старта для первого аргумента LIMIT в sql-Запросе.
Я имею ввиду мне нужно вывести в цикле ссылки на сведущие и предыдущие страницы.
Тоесть я хочу понять как мне узнать что если текущая страница равна 2 или пусть 9, то цикл должен вывести значения для ссылок от 1 до 10, а если текущая страница больше 10 и меньше 21, то скрипт должен вывести значения от 11 до 20. | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 19:52)
| | тоесть как-то так
for( точка старта=0; точка старта < кол-во выводимых ссылок; точка старта++) {
/// выводим ссылки на страницы
}
|
Вот эту точку отсчета как выявить? | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 19:54)
| | $currentPage - текущая страница
$pageRange - диапазон (т.е. ваши 1...10 или 11...20)
upd
$delta = $currentPage % $pageRange;
if($delta === 0)
$delta = $pageRange;
$start = $currentPage - $delta + 1;
|
upd2
можно код сократить до 1 строчки | |
|
|
|
|
|
|
|
для: ride
(07.01.2011 в 20:06)
| | Что-то не понимаю. $pageRange каким образом вычисляется?
Ваш пример у меня не работает. Я что-то не так понимаю, наверное. | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 20:25)
| | $pageRange не вычисляется, а задается
замените на 10 (ну, или присвойте) | |
|
|
|
|
|
|
|
для: ride
(07.01.2011 в 20:27)
| | а понял | |
|
|
|
|
|
|
|
для: ride
(07.01.2011 в 20:27)
| | Спасибо Вам большое за то, что помогли разобраться в моей неправильно поставленной задаче! Дай Бог Вам здоровья! | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 19:39)
| | в яндексе не так.
В яндексе скользящее окно [cur-7.....cur+7]
если текущая страница 12 - яндексу в голову не придет выводить с 11 и до 20.
Вывод будет с 5 по 19 | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2011 в 20:15)
| | Действительно. Пример с яндексом оказался неудачным | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 20:28)
| | неудачной (точнее, никакой) оказалась постановка задачи. | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2011 в 20:30)
| | Почему? Вам не понятна задача? | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 20:32)
| | непонятна, конечно. | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2011 в 20:37)
| | Почему? | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 20:39)
| | покажите, где у Вас в исходном посте определяется , с какого элемента выводить этот десяток?
Где определяется, что делать, если элементов меньше? | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2011 в 20:43)
| | >покажите, где у Вас в исходном посте определяется , с какого элемента выводить этот десяток?
как-то так
for($i = $start; $i<$end; $i++) {
$str .= '<a href="">'.$i.'</a> ';
}
|
>Где определяется, что делать, если элементов меньше?
ну это уже нетрудно расчитать, и не понимаю к чему Вы это спрашиваете, ведь для того чтобы помочь в том что я выше постом описал это не требуется. Ведь прежде чем выводить этот цикл, я естественно сделаю соответствующее условие | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 20:59)
| | > и не понимаю к чему Вы это спрашиваете
Это Вы спросили. Вы спросили, почему я счел задачу непоставленной.
Почему я её не понял.
Я ответил.
в исходном посте (с постановкой задачи) этих строк не было.
Собственно они и сейчас ничего не говорят.
>ведь для того чтобы помочь в том что я выше постом описал это не требуется.
Откуда такая уверенность?
Вот ссылаться на яндекс, дабы запутать и без того запутанную собственную мысль - этого не требовалось.
А учиться задачу ставить - требуется. | |
|
|
|
|
|
|
|
для: admiral
(07.01.2011 в 19:39)
| |
<?php
// ...
function pagiNation($start, $items, $items_per_page, $links_per_page, $extraQueryString = "") {
$pages = ceil($items / $items_per_page);
if ($pages > 1) {
$tmp = array();
$page = ceil(($start + 1) / $items_per_page);
$links = ceil($pages / $links_per_page);
$link = ceil($page / $links_per_page);
$page_start = $link * $links_per_page - $links_per_page;
$page_end = $page_start + $links_per_page;
$page_end = ($page_end < $pages + 1) ? $page_end : $pages;
$first = $page_start * $items_per_page;
$last = $pages * $items_per_page - $items_per_page;
if ($link > 1) {
$start = $first - $items_per_page * $links_per_page;
$tmp[] = "<a href=\"{$_SERVER["PHP_SELF"]}?{$extraQueryString}start=0\" title=\"перв.\">««</a>";
$tmp[] = "<a href=\"{$_SERVER["PHP_SELF"]}?{$extraQueryString}start={$start}\" title=\"пред.\">«</a>";
}
for ($i = $page_start; $i < $page_end; ++$i) {
$start = $i * $items_per_page;
if ($page == $i + 1) {
$tmp[] = "<strong>$page</strong>";
}
else {
$tmp[] = "<a href=\"{$_SERVER["PHP_SELF"]}?{$extraQueryString}start={$start}\">".($i + 1)."</a>";
}
}
if ($link < $links) {
$start = $page_end * $items_per_page;
$tmp[] = "<a href=\"{$_SERVER["PHP_SELF"]}?{$extraQueryString}start={$start}\" title=\"след.\">»</a>";
$tmp[] = "<a href=\"{$_SERVER["PHP_SELF"]}?{$extraQueryString}start={$last}\" title=\"посл.\">»»</a>";
}
return implode(" ", $tmp);
}
return false;
}
|
| |
|
|
|