{{TOC}} {{DOCVER 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 5:19:26, 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03, 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15}} == Настройка == В других фреймворках страничный вывод может быть большой проблемой. Laravel же делает этот процесс безболезненным. В файле настроек %%(t)app/config/view.php%% есть единственный параметр: **pagination** - который указывает, какой ((docs/v4/templates шаблон)) нужно использовать при создании навигации по страницам. Изначально Laravel включает в себя два таких шаблона. Шаблон %%(t)pagination::slider%% выведет "умный" список страниц в зависимости от текущего положения, а шаблон %%(t)pagination::simple%% просто создаст ссылки "Назад" и "Вперёд" для простой навигации. **Оба шаблона изначально совместимы с ((http://getbootstrap.com Twitter Bootstrap)).** == Использование == Есть несколько способов разделения данных на страницы. Самый простой - используя метод %%paginate()%% объекта-((docs/v4/queries строителя запросов)) или на модели ((docs/v4/eloquent Eloquent)). **Страничный вывод выборки из БД** %% $users = DB::table('users')->paginate(15); %% .(alert) На данный момент операции страничного вывода, которые используют оператор %%groupBy%%, не могут эффективно выполняться в Laravel. Если вам необходимо использовать %%groupBy%% для постраничного набора результатов, рекомендуется делать запрос в БД вручную и использовать %%Paginator::make()%%. **Страничный вывод запроса Eloquent** %% $allUsers = User::paginate(15); $someUsers = User::where('votes', '>', 100)->paginate(15); %% Аргумент, передаваемый методу %%paginate()%% - число строк, которые вы хотите видеть на одной странице. Как только вы получили результаты вы можете показать их с помощью шаблона и создать ссылки на страницы методом %%links()%%: %%
name; ?>
links(); ?> %% Это всё, что нужно для создания страничного вывода! Заметьте, что нам не понадобилось уведомлять фреймворк о номере текущей страницы - Laravel определит его сам. %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) Если вы хотите указать своё представление для страничного вывода, то можете передать представление в метод %%links()%%: ~%% links('view.name'); ?> ~%% %% Вы можете получить информацию о текущем положении с помощью этих методов: * %%getCurrentPage()%% * %%getLastPage()%% * %%getPerPage()%% * %%getTotal()%% * %%getFrom()%% * %%getTo()%% * %%count()%% %%(DOCNEW 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15) **Простой страничный вывод** Если в вашем страничном представлении вы показываете только ссылки "Далее" и "Назад", тогда у вас есть вариант использовать метод %%simplePaginate()%% для выполнения более эффективного запроса. Это полезно для больших наборов данных, когда вам не требуется показывать точное количество страниц в вашем представлении: ~%% $someUsers = User::where('votes', '>', 100)->simplePaginate(15); ~%% %% **Создание страничного вывода вручную** Иногда вам может потребоваться создать объект страничного вывода вручную. Вы можете сделать это методом %%Paginator::make()%%: %% $paginator = Paginator::make($items, $totalItems, $perPage); %% **Настройка URI для вывода ссылок** %% $users = User::paginate(); $users->setBaseUrl('custom/url'); %% Пример выше создаст ссылки наподобие: %%(t)http://example.com/custom/url?page=2%%. == Параметры в ссылках == Вы можете добавить параметры запросов к ссылкам страниц с помощью метода %%appends()%% страничного объекта: %% appends(array('sort' => 'votes'))->links(); ?> %% Код выше создаст ссылки наподобие: %%(t)http://example.com/something?page=2&sort=votes%%. %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) Если вы хотите добавить "хэш-фрагмент" в URL-адреса страничного вывода, вы можете использовать метод %%fragment()%%: ~%% fragment('foo')->links(); ?> ~%% Вызов этого метода сгенерирует URL-адреса наподобие: ~%% http://example.com/something?page=2#foo ~%% == Преобразование в JSON == Класс %%Paginator%% реализует соглашение %%(t)Illuminate\Support\Contracts\JsonableInterface%% и предоставляет метод %%toJson()%%. Вы также можете преобразовать экземпляр %%Paginator%% в JSON, вернув его из маршрута. JSON-форма экземпляра будет включать некоторые "мета-данные", такие как %%(t)total%%, %%(t)current_page%%, %%(t)last_page%%, %%(t)from%% и %%(t)to%%. Данные экземпляра будут доступны через ключ %%(t)data%% в массиве JSON. == Пользовательские представители == Представитель (//presenter//) страничного вывода по умолчанию совместим с автозагрузкой "из коробки", но вы можете настроить его по вашему выбору. === Наследование абстрактного представителя === Наследуйте класс %%Illuminate\Pagination\Presenter%% и реализуйте его абстрактные методы. Например, %%Presenter%% для Zurb Foundation может выглядеть так: ~%% class ZurbPresenter extends Illuminate\Pagination\Presenter { public function getActivePageWrapper($text) { return '
  • '.$text.'
  • '; } public function getDisabledTextWrapper($text) { return '
  • '.$text.'
  • '; } public function getPageLinkWrapper($url, $page, $rel = null) { return '
  • '.$page.'
  • '; } } ~%% === Использование пользовательского представителя === Сначала создайте представление в вашей папке %%(t)app/views%%, которое будет служить в качестве пользовательского представителя. Затем замените значение параметра %%(conf)pagination%% в конфигурационном файле %%(t)app/config/view.php%% на имя нового представления. И наконец поместите следующий код в представление вашего пользовательского представителя: ~%% ~%% %%