Здравствуйте.
У меня на некоторой странице(контроллере) выводится информация из созданной мной таблицы БД.
На этой странице мне нужно создать пагинацию (постраничную навигацию) средствами Друпал, уже готовым pager, например, что бы выводилось по 10 записей на странице.
Подскажите, пожалуйста, каким образом это можно сделать?
Комментарии
<?php
...
$connection = \Drupal::service('database');
$query = $connection->select('MY_TABLE', 'MY_TABLE_ALIAS')->fields('MY_TABLE_ALIAS');
...
$query->orderBy('MY_FIELD', 'DESC');
...
// Здесь limit(40) - кол-во рядов на страницу.
$pager = $query->extend('Drupal\Core\Database\Query\PagerSelectExtender')->limit(40);
$result = $pager->execute()->fetchAll(\PDO::FETCH_ASSOC);
foreach (
$result as $index => $row) {// Что-то делаем с полученными рядами...
} // Магия, добавляем в $build пейджер. Может быть и $form.
// Короче - используемый рендер-массив.
$build['pager'] = [
'#type' => 'pager',
'#weight' => 100,
];
...
return $build;
...
?>
Спасибо!
Сработало, если ввожу в адресную строку , например, page=1, выводится вторая часть лимита данных. Все хорошо.
Но как создать визуальную навигацию страниц?
Я же написал выше:
<?php
...
// Магия, добавляем в $build пейджер. Может быть и $form.
// Короче - используемый рендер-массив.
$build['pager'] = [
'#type' => 'pager',
'#weight' => 100,
];
...
?>
Больше ничего не нужно. Формируемый таким образом стандартный пейджер сам распознаёт текущую страницу и общее кол-во страниц. Возможно, только $build нужно заменить на переменную с вашим рендер-массивом. И обязательно, разумеется, нужно вернуть этот массив из вашего метода контроллера или формы.
PS. Вот ещё в помощь:
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21...
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Pager%21P...
Все, разобрался. Глупая ошибка была. Спасибо большое.
Средствами друпал?
Реализация средствами Друпал отдельных произвольных кусков сайта - это
говнокодингнеправильный путь. Правильный - вывести Вашу кастомную таблицу средствами Views с помощью, например, модуля Views database connector. Тогда не будут возникать вопросы как сделать пагинацию, как сделать сортировку, как сделать фильтрацию и т.д. и т.п.Ещё более правильный путь - не создавать свою таблицу мимо Друпал, а хранить Ваши данные в виде сущностей Друпал.
В данном случае создано вручную много взаимосвязаных таблиц в БД.
Моя задача сейчас - работать с записями таблиц не как с сущностями.
Поэтому приходится делать так.
И я не знаю, как вывести нумерацию страниц для перехода между ними.
Ну если уж так нравится всё делать вручную, то какая проблема вручную на php сформировать кнопочки с соответствующими ссылками на page=N?
Вот я интересуюсь, есть ли для этого соответствующие модули друпал или вручную прописать только в таком случае?