Я настраиваю проект Symfony, показывающий постраничные посты блога с интерфейсом администратора для управления всем этим.В этом администраторе также можно «выделить» один из этих общедоступных блогов, чтобы этот выделенный элемент отображался в первой позиции только на первой странице.
Мне нужно одинаковое количество элементов на каждой странице, и этопроблема, с которой я имею дело.
Я использую PagerFanta , поэтому я создал AbstractRepository с функцией "paginate".
protected function paginate(QueryBuilder $qb, $limit = 20, $offset = 0)
{
if ($limit == 0) {
throw new \LogicException('$limit must be greater than 0.');
}
//Instantiates the pagination object with the result of the query
$pager = new Pagerfanta(new DoctrineORMAdapter($qb));
//Sets max data per page
$pager->setMaxPerPage($limit);
//Sets the current page
$pager->setCurrentPage($offset);
return $pager;
}
В моем репозитории блоговЯ сделал построитель запросов, чтобы получить все общедоступные посты за исключением выделенного, потому что я могу получить его другим способом, чтобы отобразить его в верхней части первой страницы.
public function findAllVisible($id, $limit = 3, $offset = 1, $order = 'DESC')
{
$qb = $this
->createQueryBuilder('a')
->select('a')
->where('a.website = :website')
->setParameter('website', 'blog')
->andWhere('a.public = :public')
->setParameter('public', true)
->andWhere('a.id != :id')
->setParameter('id', $id)
->orderBy('a.dateInsert', $order)
;
return $this->paginate($qb, $limit, $offset);
}
Итак, сначала я попытался изменить ограничение исмещение в соответствии с текущей страницей, но я логически потерял один элемент между первой и второй страницей.
Затем я попытался включить подсвеченный блог в построителе запросов, но не знаю, как определить его как первый результатесли текущая страница является первой.
Любая идея о том, как заставить первый результат быть выделенным постом только на елина первой странице?Или другой чистый и подходящий способ отображения результатов, как и ожидалось?