- Laravel по-русски
- #1 07.11.2016 21:08:32
- Не работает пагинация в 5.3
- #2 08.11.2016 01:06:23
- Re: Не работает пагинация в 5.3
- #3 08.11.2016 07:05:31
- Re: Не работает пагинация в 5.3
- #4 08.11.2016 08:34:16
- Re: Не работает пагинация в 5.3
- #5 08.11.2016 12:36:31
- Re: Не работает пагинация в 5.3
- #6 08.11.2016 12:42:43
- Re: Не работает пагинация в 5.3
- #7 08.11.2016 21:12:28
- Re: Не работает пагинация в 5.3
- #8 08.11.2016 21:22:19
- Re: Не работает пагинация в 5.3
- #9 08.11.2016 22:10:37
- Re: Не работает пагинация в 5.3
- #10 08.11.2016 23:18:43
- Re: Не работает пагинация в 5.3
- #11 09.11.2016 06:38:04
- Re: Не работает пагинация в 5.3
- #12 09.11.2016 16:26:13
- Re: Не работает пагинация в 5.3
- #13 09.11.2016 16:36:11
- Re: Не работает пагинация в 5.3
- #14 09.11.2016 22:40:18
- Re: Не работает пагинация в 5.3
- #15 10.11.2016 10:30:25
- Re: Не работает пагинация в 5.3
- #16 10.11.2016 12:19:09
- Re: Не работает пагинация в 5.3
- Laravel Framework Russian Community
- Введение
- Использование
- Постраничный вывод выборки из БД
- Создание пагинатора вручную
- Постраничный вывод моделей Eloquent
- «Упрощённая пагинация»
- Настройка URL для вывода ссылок
- Параметры в ссылках
- Конвертация в JSON
- Laravel Framework Russian Community
- Пролог
- Начало работы
- Архитектурные концепции
- Основное
- Погружение
- Безопасность
- База данных
- Eloquent ORM
- Тестирование
- Пакеты
- База данных · Постраничная навигация
- Введение
- Основы использования
- Разбиение результатов построителя запросов
- Простая пагинация
- Разбиение результатов Eloquent
- Самостоятельное создание пагинатора
- Настройка URL-адресов постраничной навигации
- Добавление значений в строку запроса
- Добавление фрагментов хеша
- Отображение результатов постраничной навигации
- Регулирование количества отображаемых ссылок
- Преобразование результатов в JSON
- Настройка вида пагинации
- Использование Bootstrap
- Методы экземпляра пагинатора
Laravel по-русски
Русское сообщество разработки на PHP-фреймворке Laravel.
#1 07.11.2016 21:08:32
Не работает пагинация в 5.3
Здравствуйте.
Получаю данные из модели:
Вывожу их во view:
Но при переходи по страницам всегда открыта первая страница. В чем может быть проблема?
Не в сети 08.08.2016
#2 08.11.2016 01:06:23
Re: Не работает пагинация в 5.3
Вы не знаете SQL и не знаете Eloquent/
Так нельзя
либо ничего не указывайте.
Во вторых либо используйите встроенный пагинатор
Который описан В ДОКУМЕНТАЦИИ: https://laravel.ru/docs/v5/pagination
либо к своим ссылкам добавляйте ?page=X, где Х = номер страницы, который можно понять из вычислений, компоненты которых есть в объекте $companies
Не в сети 27.01.2015
#3 08.11.2016 07:05:31
Re: Не работает пагинация в 5.3
Во вторых либо используйите встроенный пагинатор
Он уже использует его:
links() — это синоним render() и он не делает ничего, кроме того, что вызывает render():
Не в сети 03.03.2016
#4 08.11.2016 08:34:16
Re: Не работает пагинация в 5.3
Он уже использует его:
Прошу простить дилетантский вопрос, а в 5.3 это работает?
Не в сети 23.06.2015
#5 08.11.2016 12:36:31
Re: Не работает пагинация в 5.3
Прошу простить дилетантский вопрос, а в 5.3 это работает?
Да. Более того, links() метод deprecated еще с 5.0 и рекомендуется использовать render(). Это означает, что в одной из версий links() уберут, как убрали ::controller, например. Посмотри исходный код и все станет ясно. Если в двух словах, то весь функционал живет в render(), а links() только вызывает render().
Изменено AlexeyMezenin (08.11.2016 12:37:52)
Не в сети 03.03.2016
#6 08.11.2016 12:42:43
Re: Не работает пагинация в 5.3
Понял, спасибо, буду знать.
Не в сети 23.06.2015
#7 08.11.2016 21:12:28
Re: Не работает пагинация в 5.3
Вы не знаете SQL и не знаете Eloquent/
Так нельзя
либо ничего не указывайте.
эта конструкция работает, возвращает все поля и так принято в SQL (SELECT * FROM . )
Я поменял на $companies = Company::paginate(5); но все равно возвращает только первую страницу на пагинацию не обращает внимания
Не в сети 08.08.2016
#8 08.11.2016 21:22:19
Re: Не работает пагинация в 5.3
#9 08.11.2016 22:10:37
Re: Не работает пагинация в 5.3
Так на первой странице пять компаний, так? А в пагинаторе сколько страниц? Сами ссылки в пагинаторе присутствуют, только не работают, или их вообще нет?
Не в сети 23.06.2015
#10 08.11.2016 23:18:43
Re: Не работает пагинация в 5.3
Так на первой странице пять компаний, так? А в пагинаторе сколько страниц? Сами ссылки в пагинаторе присутствуют, только не работают, или их вообще нет?
Всего в БД около 100 компаний, в пагинации настроена 20 и на странице выводится 20 (5 — это я опечатался), в пагинации есть ссылки на все 5 страниц, при переходе по пагинации в в url добавляется ?page=4 , но страница всегда остается открытая первая
Не в сети 08.08.2016
#11 09.11.2016 06:38:04
Re: Не работает пагинация в 5.3
А не пробовали повторить в точности, как в документации, и без разметки? Работает?
Не в сети 23.06.2015
#12 09.11.2016 16:26:13
Re: Не работает пагинация в 5.3
А не пробовали повторить в точности, как в документации, и без разметки? Работает?
у меня и сделано как в документации
Но разметку не убирал, не вижу смысла, как разметка может повлиять?
Не в сети 08.08.2016
#13 09.11.2016 16:36:11
Re: Не работает пагинация в 5.3
И я не вижу, если честно. Просто такой у меня способ, свести все к эталону, если не пойми что происходит. Мало ли 🙂
Не в сети 23.06.2015
#14 09.11.2016 22:40:18
Re: Не работает пагинация в 5.3
ссылки вида link?page=1 , link?page=2 работают?
Не в сети 27.01.2015
#15 10.11.2016 10:30:25
Re: Не работает пагинация в 5.3
ссылки вида link?page=1 , link?page=2 работают?
Да, по ним переходишь нормально, но контент всегда выводится c ?page=1
Не в сети 08.08.2016
#16 10.11.2016 12:19:09
Re: Не работает пагинация в 5.3
Да. Более того, links() метод deprecated еще с 5.0 и рекомендуется использовать render(). Это означает, что в одной из версий links() уберут, как убрали ::controller, например. Посмотри исходный код и все станет ясно. Если в двух словах, то весь функционал живет в render(), а links() только вызывает render().
А где посмотреть, что метод deprecated?
Просто непонятно тогда, почему в документации примеры до сих пор с << $users->links() >>
Вопрос больше риторический конечно.
Источник
Laravel Framework Russian Community
Введение
В других фрейморках пагинация (постраничный вывод данных) может быть большой проблемой. Laravel же делает этот процесс безболезненным. Фреймворк способен сам генерировать диапазон ссылок относительно текущей страницы. Сгенерированная разметка совместима с фреймворком Twitter Bootstrap.
Использование
Есть несколько способов разделения данных на страницы. Самый простой — используя метод paginate объекта-построителя запросов или в связке с моделями Eloquent.
Постраничный вывод выборки из БД
Примечание: Если вы используете groupBy в запросе, то встроенная пагинация Laravel будет работать неэффективно. В этом случае вам нужно создать пагинатор вручную.
Создание пагинатора вручную
Иногда возникает потребность создать пагинатор вручную, передав ему массив элементов. Сделать это можно, создав объект Illuminate\Pagination\Paginator или Illuminate\Pagination\LengthAwarePaginator , в зависимости от задачи.
Постраничный вывод моделей Eloquent
Аргумент, передаваемый методу paginate — число строк, которые вы хотите видеть на одной странице. Блок пагинации в шаблоне отображаются методом render :
Это всё, что нужно для создания страничного вывода! Заметьте, что нам не понадобилось уведомлять фреймворк о номере текущей страницы — Laravel определит его сам. Номер страницы добавляется к URL в виде параметра запроса: ?page=N .
Вы можете получить информацию о текущем положении с помощью этих методов:
«Упрощённая пагинация»
Если вам нужно выводить только ссылки «Следующая страница» и «Предыдущая страница», то вы можете использовать метод simplePaginate . В таком случае запрос в БД будет более простым. Это полезно на очень больших объемах данных и там, где пользователю нужны первые несколько страниц и нет необходимости переходить в самую глубину.
Настройка URL для вывода ссылок
Пример выше создаст ссылки наподобие такой: http://example.com/custom/url?page=2
Параметры в ссылках
Вы можете добавить параметры запросов к ссылкам страниц с помощью метода appends страничного объекта:
Чтобы добавить к URL хэш-параметр («#xyz»), используйте метод fragment :
Конвертация в JSON
Класс Paginator реализует (implements) Illuminate\Contracts\Support\JsonableInterface , следовательно, у него есть метод toJson , который используется для вывода пагинируемой информации в формате json. Помимо пагинируемых данных, которые располагаются в data , этот метод добавляет мета-информацию, а именно: total , current_page и last_page .
Источник
Laravel Framework Russian Community
Пролог
Начало работы
Архитектурные концепции
Основное
Погружение
Безопасность
База данных
Eloquent ORM
Тестирование
Пакеты
База данных · Постраничная навигация
Введение
В других фреймворках постраничная навигация может быть очень болезненной. Мы надеемся, что подход Laravel к разбиению на страницы станет глотком свежего воздуха. Пагинатор Laravel интегрирован с построителем запросов и Eloquent ORM и обеспечивает удобную, простую в использовании разбивку на страницы записей базы данных с нулевой конфигурацией.
По умолчанию HTML, генерируемый пагинатором, совместим с фреймворком Tailwind CSS; однако, также доступна поддержка разбивки на страницы с использованием Bootstrap.
Основы использования
Разбиение результатов построителя запросов
Есть несколько способов разбить элементы на страницы. Самый простой – использовать метод paginate построителя запросов или в запросе Eloquent. Метод paginate автоматически устанавливает «предел» и «смещение» в запросе на основе текущей страницы, просматриваемой пользователем. По умолчанию текущая страница определяется значением аргумента page строки HTTP-запроса. Это значение автоматически определяется Laravel, а также автоматически вставляется в ссылки, генерируемые пагинатором.
В этом примере единственный аргумент, переданный методу paginate – это количество элементов, которые вы хотите отображать «на каждой странице». В этом случае давайте укажем, что мы хотели бы отображать 15 элементов на странице:
Простая пагинация
Метод paginate подсчитывает общее количество записей, соответствующих запросу, перед извлечением записей из базы данных. Это сделано для того, чтобы пагинатор знал, сколько всего страниц с записями необходимо сформировать. Однако, если вы не планируете отображать общее количество страниц в пользовательском интерфейсе вашего приложения, запрос количества записей не нужен.
Следовательно, если вам нужно отображать только простые ссылки «Далее» и «Назад» в пользовательском интерфейсе вашего приложения, вы можете использовать метод simplePaginate для выполнения одного рационального запроса:
Разбиение результатов Eloquent
Вы также можете разбивать запросы Eloquent на страницы. В этом примере мы разобьем модель App\Models\User на страницы и укажем, что мы планируем отображать 15 записей на странице. Как видите, синтаксис почти идентичен разбивке на страницы результатов построителя запросов:
Конечно, вы можете вызвать метод paginate после указания других ограничений для запроса, таких как выражения where :
Вы также можете использовать метод simplePaginate при разбиении на страницы моделей Eloquent:
Самостоятельное создание пагинатора
По желанию можно вручную создать экземпляр пагинатора, передав ему массив элементов, которые у вас уже есть в памяти. Вы можете сделать это, создав экземпляр Illuminate\Pagination\Paginator или Illuminate\Pagination\LengthAwarePaginator , в зависимости от ваших потребностей.
Классу Paginator не требуется знать общее количество элементов в результирующем наборе; однако, из-за этого у класса нет методов для получения индекса последней страницы. LengthAwarePaginator принимает почти те же аргументы, что и Paginator ; однако, для этого требуется подсчет общего количества элементов в результирующем наборе.
Другими словами, Paginator соответствует методу simplePaginate построителя запросов, а LengthAwarePaginator соответствует методу paginate .
При ручном создании экземпляра пагинатора вы должны самостоятельно «разрезать» массив результатов, который вы передаете в пагинатор. Если вы не знаете, как это сделать, ознакомьтесь с функцией PHP array_slice .
Настройка URL-адресов постраничной навигации
По умолчанию ссылки, созданные пагинатором, будут соответствовать URI текущего запроса. Однако метод withPath пагинатора позволяет вам скорректировать URI, используемый пагинатором при генерации ссылок. Например, если вы хотите, чтобы пагинатор генерировал ссылки типа http://example.com/admin/users?page=N , вы должны передать /admin/users withPath :
Добавление значений в строку запроса
Вы можете добавить параметр в строку запроса навигационных ссылок с помощью метода appends . Например, чтобы добавить sort=votes к каждой ссылке пагинации, вы должны сделать следующий вызов appends :
Вы можете использовать метод withQueryString , если хотите добавить все значения строки текущего запроса к ссылкам постраничной навигации:
Добавление фрагментов хеша
Если вам нужно добавить «хеш-фрагмент» к URL-адресам, сгенерированным пагинатором, вы можете использовать метод fragment . Например, чтобы добавить #users в конец каждой навигационной ссылки, вы должны вызвать метод fragment следующим образом:
Отображение результатов постраничной навигации
При вызове метода paginate вы получите экземпляр Illuminate\Pagination\LengthAwarePaginator . При вызове метода simplePaginate вы получите экземпляр Illuminate\Pagination\Paginator . Эти объекты содержат несколько методов, описывающих результирующий набор. В дополнение к этим вспомогательным методам, экземпляры пагинатора являются итераторами и могут быть перебраны как массив. Итак, как только вы получили результаты, вы можете отобразить результаты и отрисовать ссылки на страницы, используя Blade:
Метод links отрисует ссылки на остальные страницы в результирующем наборе. Каждая из этих ссылок уже будет содержать соответствующую строковую переменную запроса page . Помните, что HTML, сгенерированный методом links , совместим с фреймворком Tailwind CSS.
Регулирование количества отображаемых ссылок
Когда пагинатор отображает навигационные ссылки, включающие номер текущей страницы, а также ссылки для трех страниц до и после текущей. При необходимости вы можете контролировать количество дополнительных ссылок, отображаемых с каждой стороны текущей страницы, используя метод onEachSide :
Преобразование результатов в JSON
Классы пагинатора Laravel реализуют контракт интерфейса Illuminate\Contracts\Support\Jsonable и содержат метод toJson , поэтому очень легко преобразовать результаты в JSON. Вы также можете преобразовать экземпляр пагинатора в JSON, вернув его из маршрута или действия контроллера:
JSON из пагинатора будет включать метаинформацию, такую как total , current_page , last_page и другие. Записи результатов доступны через ключ data в массиве JSON. Вот пример JSON, созданного путем возврата экземпляра пагинатора из маршрута:
Настройка вида пагинации
По умолчанию сгенерированные шаблоны для отображения навигационных ссылок, совместимы со структурой фреймворка Tailwind CSS. Однако, если вы не используете Tailwind, вы можете определять свои собственные шаблоны для отображения этих ссылок. При вызове метода links в экземпляре пагинатора вы можете передать имя шаблона в качестве первого аргумента метода:
Однако, самый простой способ отредактировать шаблоны постраничной навигации – это экспортировать их в каталог resources/views/vendor с помощью команды vendor:publish :
Эта команда поместит шаблоны в каталог resources/views/vendor/pagination вашего приложения. Файл tailwind.blade.php в этом каталоге соответствует шаблону постраничной навигации по умолчанию. Вы можете отредактировать этот файл для изменения HTML-кода навигации.
Если вы хотите назначить другой файл в качестве шаблона постраничной навигации по умолчанию, вы можете вызвать методы defaultView и defaultSimpleView пагинатора в методе boot вашего класса App\Providers\AppServiceProvider :
Использование Bootstrap
Laravel содержит шаблоны постраничной навигации, созданные с использованием Bootstrap CSS. Чтобы использовать эти шаблоны вместо шаблонов Tailwind по умолчанию, вы можете вызвать метод пагинатора useBootstrap в методе boot класса App\Providers\AppServiceProvider :
Методы экземпляра пагинатора
Каждый экземпляр пагинатора содержит дополнительную информацию о постраничной навигации, с помощью следующих методов:
Источник