Pull to refresh

Comments 21

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

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


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

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

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

Статья, доказывающая почему не любят php-шников, №187.
UFO landed and left these words here
Да, это нормально. В обычном мире мы также действуем по отношению к другим меньшинствам, национальностям и т.д.
UFO landed and left these words 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 landed and left these words here

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


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

Sign up to leave a comment.

Articles