Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Постраничная навигация
 
 автор: admiral   (07.01.2011 в 19:39)   письмо автору
 
 

Вобщем знаю что в сети полно этих paginator'ов, но я хочу написать свой.
Но проблема в чем. Я хочу сделать, например, как на яндексе в поиске.

Практически все релизовал, но не могу вычислить следущее.
Например, пусть всего элементов 100(total). На страницу выводится по 10 элементов (col_element), Текущая старница (cur_page) равна, например 3

В итоге получается что в цикле по идее мы должны вывести значения от 1 до 10, где число 3 будет текущим (т.е. ввиде обычного текста, а не ссылки). Если текущая страница - cur_page равна, например 12, то соотвественно в цикле выводим от 11 до 20.

Я не могу получить точку старта в цикле, т.е. понимаю сдесь простоая математика, но что-то не получается сообразить как расчитать точку старта, зная все переменные.
Прошу помощи в разъяснении

  Ответить  
 
 автор: cheops   (07.01.2011 в 19:45)   письмо автору
 
   для: admiral   (07.01.2011 в 19:39)
 

>Если текущая страница - cur_page равна, например 12, то соотвественно в цикле выводим от 11 до 20.
Почему? Если текущая страница 12, а на странице выводится 10 позиций, то цикл должен пробегать значения от 111 до 120. Тогда точка старта вычисляется очень просто cur_page * col_element + 1.

  Ответить  
 
 автор: admiral   (07.01.2011 в 19:52)   письмо автору
 
   для: 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:54)   письмо автору
 
   для: admiral   (07.01.2011 в 19:52)
 

тоесть как-то так

for( точка старта=0; точка старта < кол-во выводимых ссылок; точка старта++) {
///  выводим ссылки на страницы
}


Вот эту точку отсчета как выявить?

  Ответить  
 
 автор: ride   (07.01.2011 в 20:06)   письмо автору
 
   для: 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 строчки

  Ответить  
 
 автор: admiral   (07.01.2011 в 20:25)   письмо автору
 
   для: ride   (07.01.2011 в 20:06)
 

Что-то не понимаю. $pageRange каким образом вычисляется?
Ваш пример у меня не работает. Я что-то не так понимаю, наверное.

  Ответить  
 
 автор: ride   (07.01.2011 в 20:27)   письмо автору
 
   для: admiral   (07.01.2011 в 20:25)
 

$pageRange не вычисляется, а задается
замените на 10 (ну, или присвойте)

  Ответить  
 
 автор: admiral   (07.01.2011 в 20:39)   письмо автору
 
   для: ride   (07.01.2011 в 20:27)
 

а понял

  Ответить  
 
 автор: admiral   (07.01.2011 в 20:42)   письмо автору
 
   для: ride   (07.01.2011 в 20:27)
 

Спасибо Вам большое за то, что помогли разобраться в моей неправильно поставленной задаче! Дай Бог Вам здоровья!

  Ответить  
 
 автор: Trianon   (07.01.2011 в 20:15)   письмо автору
 
   для: admiral   (07.01.2011 в 19:39)
 

в яндексе не так.
В яндексе скользящее окно [cur-7.....cur+7]
если текущая страница 12 - яндексу в голову не придет выводить с 11 и до 20.
Вывод будет с 5 по 19

  Ответить  
 
 автор: admiral   (07.01.2011 в 20:28)   письмо автору
 
   для: Trianon   (07.01.2011 в 20:15)
 

Действительно. Пример с яндексом оказался неудачным

  Ответить  
 
 автор: Trianon   (07.01.2011 в 20:30)   письмо автору
 
   для: admiral   (07.01.2011 в 20:28)
 

неудачной (точнее, никакой) оказалась постановка задачи.

  Ответить  
 
 автор: admiral   (07.01.2011 в 20:32)   письмо автору
 
   для: Trianon   (07.01.2011 в 20:30)
 

Почему? Вам не понятна задача?

  Ответить  
 
 автор: Trianon   (07.01.2011 в 20:37)   письмо автору
 
   для: admiral   (07.01.2011 в 20:32)
 

непонятна, конечно.

  Ответить  
 
 автор: admiral   (07.01.2011 в 20:39)   письмо автору
 
   для: Trianon   (07.01.2011 в 20:37)
 

Почему?

  Ответить  
 
 автор: Trianon   (07.01.2011 в 20:43)   письмо автору
 
   для: admiral   (07.01.2011 в 20:39)
 

покажите, где у Вас в исходном посте определяется , с какого элемента выводить этот десяток?
Где определяется, что делать, если элементов меньше?

  Ответить  
 
 автор: admiral   (07.01.2011 в 20:59)   письмо автору
 
   для: Trianon   (07.01.2011 в 20:43)
 

>покажите, где у Вас в исходном посте определяется , с какого элемента выводить этот десяток?

как-то так
for($i = $start; $i<$end; $i++) {
              $str .= '<a href="">'.$i.'</a>&nbsp;';
           }


>Где определяется, что делать, если элементов меньше?
ну это уже нетрудно расчитать, и не понимаю к чему Вы это спрашиваете, ведь для того чтобы помочь в том что я выше постом описал это не требуется. Ведь прежде чем выводить этот цикл, я естественно сделаю соответствующее условие

  Ответить  
 
 автор: Trianon   (07.01.2011 в 21:11)   письмо автору
 
   для: admiral   (07.01.2011 в 20:59)
 

> и не понимаю к чему Вы это спрашиваете
Это Вы спросили. Вы спросили, почему я счел задачу непоставленной.
Почему я её не понял.
Я ответил.
в исходном посте (с постановкой задачи) этих строк не было.
Собственно они и сейчас ничего не говорят.

>ведь для того чтобы помочь в том что я выше постом описал это не требуется.
Откуда такая уверенность?
Вот ссылаться на яндекс, дабы запутать и без того запутанную собственную мысль - этого не требовалось.
А учиться задачу ставить - требуется.

  Ответить  
 
 автор: Красная_шляпа   (08.01.2011 в 00:44)   письмо автору
 
   для: 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=\"перв.\">&laquo;&laquo;</a>";
            
$tmp[] = "<a href=\"{$_SERVER["PHP_SELF"]}?{$extraQueryString}start={$start}\" title=\"пред.\">&laquo;</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=\"след.\">&raquo;</a>";
            
$tmp[] = "<a href=\"{$_SERVER["PHP_SELF"]}?{$extraQueryString}start={$last}\" title=\"посл.\">&raquo;&raquo;</a>";
        }
        return 
implode("&nbsp;"$tmp);
    }
    return 
false;
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования