1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. FAQ

Пагинация

Главные вкладки

Здравствуйте.
У меня на некоторой странице(контроллере) выводится информация из созданной мной таблицы БД.
На этой странице мне нужно создать пагинацию (постраничную навигацию) средствами Друпал, уже готовым pager, например, что бы выводилось по 10 записей на странице.
Подскажите, пожалуйста, каким образом это можно сделать?

Комментарии

Аватар пользователя OldWarrior OldWarrior 31 марта 2022 в 17:55
1
<?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;
...
?>
Аватар пользователя OldWarrior OldWarrior 1 апреля 2022 в 12:49
1

usms6@yandex.ru wrote: Но как создать визуальную навигацию страниц?

Я же написал выше:

<?php
...
// Магия, добавляем в $build пейджер. Может быть и $form.
// Короче - используемый рендер-массив.
$build['pager'] = [
'#type' => 'pager',
'#weight' => 100,
];
...
?>

Больше ничего не нужно. Формируемый таким образом стандартный пейджер сам распознаёт текущую страницу и общее кол-во страниц. Возможно, только $build нужно заменить на переменную с вашим рендер-массивом. И обязательно, разумеется, нужно вернуть этот массив из вашего метода контроллера или формы.

Аватар пользователя marassa marassa 1 апреля 2022 в 7:34

Реализация средствами Друпал отдельных произвольных кусков сайта - это (削除) говнокодинг (削除ここまで) неправильный путь. Правильный - вывести Вашу кастомную таблицу средствами Views с помощью, например, модуля Views database connector. Тогда не будут возникать вопросы как сделать пагинацию, как сделать сортировку, как сделать фильтрацию и т.д. и т.п.
Ещё более правильный путь - не создавать свою таблицу мимо Друпал, а хранить Ваши данные в виде сущностей Друпал.

Аватар пользователя mmjmm mmjmm 1 апреля 2022 в 11:56

В данном случае создано вручную много взаимосвязаных таблиц в БД.
Моя задача сейчас - работать с записями таблиц не как с сущностями.
Поэтому приходится делать так.
И я не знаю, как вывести нумерацию страниц для перехода между ними.

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /