Может войдёшь?
Черновики Написать статью Профиль

Страничный вывод

перевод документация 4.x

  1. 1. Настройка
  2. 2. Использование
  3. 3. Параметры в ссылках
  4. 4. Преобразование в JSON
  5. 5. Пользовательские представители
    1. 5.1. Наследование абстрактного представителя
    2. 5.2. Использование пользовательского представителя
Этот перевод актуален для англоязычной документации на (ветка 4.2) , (ветка 4.1) и (ветка 4.0). Опечатка? Выдели и нажми Ctrl+Enter.

Настройка

В других фреймворках страничный вывод может быть большой проблемой. Laravel же делает этот процесс безболезненным. В файле настроек app/config/view.php есть единственный параметр: pagination — который указывает, какой шаблон нужно использовать при создании навигации по страницам. Изначально Laravel включает в себя два таких шаблона.

Шаблон pagination::slider выведет «умный» список страниц в зависимости от текущего положения, а шаблон pagination::simple просто создаст ссылки «Назад» и «Вперёд» для простой навигации. Оба шаблона изначально совместимы с Twitter Bootstrap.

Использование

Есть несколько способов разделения данных на страницы. Самый простой — используя метод PHPpaginate() объекта-строителя запросов или на модели Eloquent.

Страничный вывод выборки из БД

PHP
$users DB::table('users')->paginate(15);

На данный момент операции страничного вывода, которые используют оператор PHPgroupBy, не могут эффективно выполняться в Laravel. Если вам необходимо использовать PHPgroupBy для постраничного набора результатов, рекомендуется делать запрос в БД вручную и использовать PHPPaginator::make().

Страничный вывод запроса Eloquent

PHP
$allUsers User::paginate(15);

$someUsers User::where('votes''>'100)->paginate(15);

Аргумент, передаваемый методу PHPpaginate() — число строк, которые вы хотите видеть на одной странице. Как только вы получили результаты вы можете показать их с помощью шаблона и создать ссылки на страницы методом PHPlinks():

PHP
<div class="container">
  <?php foreach ($users as $user): ?>
    <?php echo $user->name?>
  <?php endforeach; ?>
</div>

<?php echo $users->links(); ?>

Это всё, что нужно для создания страничного вывода! Заметьте, что нам не понадобилось уведомлять фреймворк о номере текущей страницы — Laravel определит его сам.

+ 4.1

добавлено в 4.1 ()

Если вы хотите указать своё представление для страничного вывода, то можете передать представление в метод PHPlinks():

PHP
<?php echo $users->links('view.name'); ?>

Вы можете получить информацию о текущем положении с помощью этих методов:

  • PHPgetCurrentPage()
  • PHPgetLastPage()
  • PHPgetPerPage()
  • PHPgetTotal()
  • PHPgetFrom()
  • PHPgetTo()
  • PHPcount()
+ 4.2

добавлено в 4.2 ()

Простой страничный вывод

Если в вашем страничном представлении вы показываете только ссылки «Далее» и «Назад», тогда у вас есть вариант использовать метод PHPsimplePaginate() для выполнения более эффективного запроса. Это полезно для больших наборов данных, когда вам не требуется показывать точное количество страниц в вашем представлении:

PHP
$someUsers User::where('votes''>'100)->simplePaginate(15);

Создание страничного вывода вручную

Иногда вам может потребоваться создать объект страничного вывода вручную. Вы можете сделать это методом PHPPaginator::make():

PHP
$paginator Paginator::make($items$totalItems$perPage);

Настройка URI для вывода ссылок

PHP
$users User::paginate();

$users->setBaseUrl('custom/url');

Пример выше создаст ссылки наподобие:
http://example.com/custom/url?page=2.

Параметры в ссылках

Вы можете добавить параметры запросов к ссылкам страниц с помощью метода PHPappends() страничного объекта:

PHP
<?php echo $users->appends(array('sort' => 'votes'))->links(); ?>

Код выше создаст ссылки наподобие:
http://example.com/something?page=2&sort=votes.

+ 4.1

добавлено в 4.1 ()

Если вы хотите добавить «хэш-фрагмент» в URL-адреса страничного вывода, вы можете использовать метод PHPfragment():

PHP
<?php echo $users->fragment('foo')->links(); ?>

Вызов этого метода сгенерирует URL-адреса наподобие:

PHP
http://example.com/something?page=2#foo

Преобразование в JSON

Класс PHPPaginator реализует соглашение Illuminate\Support\Contracts\JsonableInterface и предоставляет метод PHPtoJson(). Вы также можете преобразовать экземпляр PHPPaginator в JSON, вернув его из маршрута. JSON-форма экземпляра будет включать некоторые «мета-данные», такие как total, current_page, last_page, from и to. Данные экземпляра будут доступны через ключ data в массиве JSON.

Пользовательские представители

Представитель (presenter) страничного вывода по умолчанию совместим с автозагрузкой «из коробки», но вы можете настроить его по вашему выбору.

Наследование абстрактного представителя

Наследуйте класс PHPIlluminate\Pagination\Presenter и реализуйте его абстрактные методы. Например, PHPPresenter для Zurb Foundation может выглядеть так:

PHP
class ZurbPresenter extends Illuminate\Pagination\Presenter {

  public function 
getActivePageWrapper($text)
  {
    return 
'<li class="current"><a href="">'.$text.'</a></li>';
  }

  public function 
getDisabledTextWrapper($text)
  {
    return 
'<li class="unavailable"><a href="">'.$text.'</a></li>';
  }

  public function 
getPageLinkWrapper($url$page$rel null)
  {
    return 
'<li><a href="'.$url.'">'.$page.'</a></li>';
  }

}

Использование пользовательского представителя

Сначала создайте представление в вашей папке app/views, которое будет служить в качестве пользовательского представителя. Затем замените значение параметра confpagination в конфигурационном файле app/config/view.php на имя нового представления. И наконец поместите следующий код в представление вашего пользовательского представителя:

PHP
<ul class="pagination">
  <?php echo with(new ZurbPresenter($paginator))->render(); ?>
</ul>

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.