Pull to refresh

Comments 21

UFO just landed and posted this here
А ссылка page1 и не добавляется. Это даже в html примере видно.
Редирект нужен, если ранее использовалась навигация в которой формировался url с page1.
Зачем писать куски кода, каких в интернете полное, и которые может написать любой школьник?

Laravel хорош, но его компонент пагинации отдельно от фреймворка весьма громоздкий и не удобный.


Я советую Pagerfanta: простой пагинатор на PHP, который решает сразу 3 задачи: получение порции данных (например из БД) для отображения на странице, подсчёт количества страниц и рендер самого пагинатора.

ковырялся один раз давно в pagerfanta… очень удивило то, что он принимает весь массив записей для организации постранички о_О
или это только одна из его возможностей?

Не обязательно получать все записи сразу. Pagerfanta получает информацию для постраничного вывода через адаптер. У интерфейса адаптера 2 метода: «вернуть количество записей» и «вернуть N записей начиная с M-ной записи». БД-адаптеры берут из базы данных ровно те записи, которые нужны для текущей страницы. Есть ещё массив-адаптер, в который подаются все записи сразу, но это не самый оптимальный путь, лучше сделать адаптер для своего источника данных, если его нет среди готовых.

Щас бы написать код на php4 без psr.
Статья, доказывающая почему не любят php-шников, №187.
UFO just landed and posted this here
Да, это нормально. В обычном мире мы также действуем по отношению к другим меньшинствам, национальностям и т.д.
UFO just landed and posted this here
Вот я как раз и хочу поделиться своим решением данной задачи.
Но зачем? Чем чаще люди сталкиваются с задачей, тем чаще она находит решение в велосипедах. Пагинаторов на просторах интернетов тьма, с адекватным оформлением, тестами, документацией и прочими плюшками. Нет, надо в который раз выставить PHP сообщество макаками у клавиатур и запостить свой слепленный на коленках агрегат на всеобщее обозрение. Зачем?
В некотором роде статью можно назвать «начинающим от начинающих».
На вопрос «зачем» — как минимум я получил отзывы и мнение более продвинутых товарищей, а так же получил направление в котором следует двигаться и развиваться.

Лучше задавайте вопросы на toster.ru с уточнением, что нужно ревью вашего кода

1. Изнасилован PSR и правила именования
2. Внезапный и бесполезный редирект
3. Смешение логики и представления
4. Отрезать руки за
if( $this->next_prev ) $list = $this->get_item( $this->current_page > 1 ? $this->current_page - 1 : 1, $this->prev_title, true ) . $list . $this->get_item( $this->current_page < $count_pages ? $this->current_page + 1 : $count_pages, $this->next_title, true );
Sandev На этом, пожалуй, всё. Буду рад любой конструктивной критике.

Рекомендую ознакомиться: https://toster.ru/q/276441#answer_723827, там я описывал, на что стоит обращать внимание при проверке кода

Что плохо в вашем коде, при самом не пристальном взгляде


  • PSR не поддерживаете
  • Про SOLID (SRP особенно) не слышали: ваш навигатор — это роутер + шаблонизатор + генератор урлов + контроллер
  • Используете супеглобальные переменные, про это статей написано много
  • Параметры расчета захардкожены. Например, нет возможности показать по 4 страницы справа и слева от текущей, для этого нужно менять ваш код.
UFO just landed and posted this here

Если воспринимать ваш класс как учебный и как выше вы написали "начинающим от начинающих", то вот вам хелп от меня.


https://gist.github.com/anonymous/782f852d8528c53c2f3958ed8278b519
Взял ваш класс. Прогнал автоформатером кода в IDE. Сменил объявление полей класса с var (php4 стиль) на нормальный public. Сменил через рефакторинг стиль именования методов, параметров метадов и полей со snake_case на camelCase. Поправил докблоки. Убрал "мусорные" символы перевода строки и табуляции в шаблонах (они не чем особо не помогают, а вот сам код засоряют). Ну и главное, определил что данный класс только строит нам код пагинации (например он у вас не определяет текущую страницу) и тогда я дал ему более корректное имя. И убрал самое плохое что было в этом классе — выставление заголовков для редиректа и die. И в случаях некорректных входных данных сделал выброс исключений. Ну и там что то еще наверное делал)
Еще нужно разнести длинный метод билда на подметоды. Убрать паблик параметры, добавив где нужно сеттеры и геттеры.

Sign up to leave a comment.

Articles