За последние 24 часа нас посетили 24212 программистов и 1538 роботов. Сейчас ищут 1335 программистов ...

:arrow: Hавигация по многостраничному документу

Тема в разделе "PHP для новичков", создана пользователем pr0, 29 май 2007.

  1. pr0

    pr0 Активный пользователь

    С нами с:
    29 янв 2007
    Сообщения:
    6
    Симпатии:
    0
    Нужно сформировать массив из номеров страниц с пропусками, по типу:

    Переменные на входе:
    Кол-во страниц документа: >13. Текущая страница: 7

    На выходе:
    Array("1", "2", "3", "...", "5", "6", "7", "8", "9", "...", "11", "12", "13")

    ну а в браузере этот массив я выведу как ссылки на страницы.

    :!: Краевые:

    Кол-во страниц документа: >13. Текущая страница: 1

    На выходе:
    Array("1", "2", "3", "...", "11", "12", "13").


    Кароче смысл такой: обязательно отобразить первые три и последние три страницы. Также отобразить текущую страницу и, если они есть, то две предыдущие и две последующие. Назначение всего этого - навигация по многостраничному документу.


    Для наглядности пара примеров того что я хочу:

    1,2,3, ... ,45,46,47,48,49, ... ,98,99,100

    1,2,3,4,5,6, ... ,98,99,100

    1,2,3, ... ,98,99,100

    1,2,3, ... ,93,94,95,96,97,98,99,100
     
  2. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    предлагаю не мудрить а написать что-то вроде:

    $p= array();
    $p[1]="?page=1";
    $p[2]="?page=2";
    $p[3]="?page=3";
    $p[$max]="?page=".$max;
    $p[$max-1]="?page=".($max-1);
    $p[$max-2]="?page=".($max-2);
    $p[$current]="?page=".$current;
    $p[$current+1]="?page=".$current+1;
    $p[$current+2]="?page=".$current+2;
    $p[$current-1]="?page=".$current-1;
    $p[$current-2]="?page=".$current-2;

    ессно заполнять массив лучше в цикле

    ну а потом через foreach всё это дело выводишь. если индекс следующего минус индекс предыдущего больше 1, то перед выводом ставишь многоточие.
     
  3. pr0

    pr0 Активный пользователь

    С нами с:
    29 янв 2007
    Сообщения:
    6
    Симпатии:
    0
    $current+1, $current+2, $current-1, $current-2 - значения заключить в скобки. После получившийся массив отсортировать. В цикле foreach обязательно условие на проверку принадлежности интервалу [1 ... $max]. И тогда получится то, что мне нужно.

    dark-demon, спасибо.

    Задача решена.
     
  4. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    если правильно заполнять, то сортировать не нужно :)
    проверку на принадлежность интервалу лучше при заполнении и делать, либо циклы организовать так, чтобы значения не вылезали за пределы.