За последние 24 часа нас посетили 17532 программиста и 1601 робот. Сейчас ищут 1034 программиста ...

Пагинатор, постраничный вывод [в сотый раз]

Тема в разделе "Решения, алгоритмы", создана пользователем Koc, 22 июл 2009.

  1. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Не так давно ГО №2 написал заметку о пагинаторе. Но что мне там не понравилось, так это то, что как и во всех остальных пагинаторах там код нефигово так смешан с html-тегами. А мне это не нужно. С утреца сегодня набросал кой-че, баги видны невооруженным взглядом, еще не принимался фиксить их. Просто хочу показать идею пагинации с другой стороны немного.

    http://code.google.com/p/bicycle-librar ... ce/browse/
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    давно уж шаблоны юзают все =)
     
  3. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Mr.M.I.T.
    ты это к чему?

    upd пофиксил часть багов, обновил 1 пост
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Koc
    к тому что так удобнее и быстрее
     
  5. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    все равно не понял. Что удобнее?
    Это, это или это?
     
  6. kostyl

    kostyl Guest

    например, у меня нет вообще такого класса. Логика отображения в шаблоне делается. Туда только набор ссылок передается с номерами страниц. Этот набор формирует контроллер по запросу из коллекции которая отображается постранично.
     
  7. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    ну тут примерно тоже самое будет.
    1) В конструктор закидываешь общее кол-во элементов, текущую страницу, настройки если нужно.
    2) Получаешь номера страниц, которые можешь показать,
    3) тулишь их в шаблон, он сам расставляет троеточия, стрелочки, стиль active или нет.

    Все эти пункты можно сделать каким-то своим другим классом и потом его все время и юзать. Задача моей поделки: всего лишь получить номера страниц, которые можно выводить.

    Такой вопрос еще:
    SPL ArrayObject быстрее стандартных массивов или нет?
     
  8. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Нет, ибо это надстройка над стандартными массивами. При этом - не очень качественная:

    PHP:
    1. <?php
    2.  $array = array('Buck','Jerry','Tomas');
    3.  $arrayObject = new ArrayObject($array);
     
  9. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    странно, меня смутило это исследование http://blueparabola.com/blog/spl-deserv ... eiteration

    TheShock
    а по поводу такого пагинатора против генерирующих сразу html че скажешь?
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    блин я имел ввиду что куда удобнее писать так
    Paginator("<a href='/index.php?page={page}'>[{page}]</a>")
    чем каждый раз писать по сути обёртку для сабжа

    хотя с другой стороно с сабжем можно сделать вывод логикой шаблона
     
  11. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Генерирующие сразу html есть самый, что ни на есть маразм, имхо. Твой подход мне нравится намного больше.
     
  12. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Переехали на говнокод^W гуглокод. Теперь это набор велосипедных библиотек (пока одна, вскоре наверно подтянется strclass).
     
  13. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Добавлен метод getCountElementsOnPage([$page]) - возвращает кол-во элементов на странице $page.
    если $page не указывать - вернет кол-во элементов на текущей странице
    если $page=-1 - кол-во на последней странице

    Добавлен параметр fromTo в настройках. Если true, вывод будет примерно таким:
    Код (Text):
    1. Страницы слева: 1 - 21, 31 - 51, 61 - 81, 91 - 111, 121 - 141
    2. Страницы по центру: 391 - 411, 421 - 441, 451 - 471, 481 - 501, 511 - 531
    3. Страницы справа: 751 - 771, 781 - 801, 811 - 831, 841 - 861, 871 - 891
    Если false (что по умолчению), то что-то типа:
    Код (Text):
    1. Страницы слева: 1, 2, 3, 4, 5
    2. Страницы по центру: 14, 15, 16, 17, 18
    3. Страницы справа: 26, 27, 28, 29, 30
    Если по-хорошему, то нужно сделать возможность возвращать и то и другое одновременно. Но я не придумал еще как это сделать лучше (какой формат возвращаемых данных). Есть идеи - велкам.
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Правильное слово - "сразу" ;-) html-код ссылок в любом случае генерируется скритом, вопрос лишь в том, как бы сделать это-по сложнее =)