Любой простой способ ограничить, сколько ссылок показано с разбивкой по страницам Laravels?
В настоящее время он показывает не более 13 ссылок (Prev, 1 2 3 4 5 7 8 .. 78 79 next)
Это, однако, слишком много для мобильных устройств и становится двухлинейной навигацией … есть ли способ установить ссылки, например, только для отображения 10?
Я перепутал с презентатором, но ничто на самом деле не работало.
благодаря
Я создал новый пользовательский презентатор, чтобы показать только 10 ссылок. Он включает в себя 3 этапа:
Создайте свой собственный презентатор
use Illuminate\Pagination\BootstrapPresenter; class CustomPresenter extends BootstrapPresenter{ protected function getPageSlider() { // Changing the original value from 6 to 3 to reduce the link count $window = 3; // If the current page is very close to the beginning of the page range, we will // just render the beginning of the page range, followed by the last 2 of the // links in this list, since we will not have room to create a full slider. if ($this->currentPage <= $window) { $ending = $this->getFinish(); return $this->getPageRange(1, $window + 2).$ending; } // If the current page is close to the ending of the page range we will just get // this first couple pages, followed by a larger window of these ending pages // since we're too close to the end of the list to create a full on slider. elseif ($this->currentPage >= $this->lastPage - $window) { $start = $this->lastPage - 8; $content = $this->getPageRange($start, $this->lastPage); return $this->getStart().$content; } // If we have enough room on both sides of the current page to build a slider we // will surround it with both the beginning and ending caps, with this window // of pages in the middle providing a Google style sliding paginator setup. else { $content = $this->getAdjacentRange(); return $this->getStart().$content.$this->getFinish(); } } }
Создайте собственный просмотр страниц (например, custom-paginator.php), поместите в свою папку просмотра
<ul class="pagination"> <?php echo with(new CustomPresenter($paginator))->render(); ?> </ul>
Обновите приложение / config.view.php
'pagination' => 'custom-paginator',
Сделав следующие изменения, вы сможете получить 10 ссылок для ссылок.
Надеюсь, что эта помощь: D
Я знаю, что это старый вопрос, но до сих пор нет возможности установить параметры функции links (). Я сделал простой код jQuery, возможно, это поможет кому-то. Это намного проще, чем ответ Зеского. Я не имею в виду лучше, просто проще 🙂
JavaScript:
(function($) { $('ul.pagination li.active') .prev().addClass('show-mobile') .prev().addClass('show-mobile'); $('ul.pagination li.active') .next().addClass('show-mobile') .next().addClass('show-mobile'); $('ul.pagination') .find('li:first-child, li:last-child, li.active') .addClass('show-mobile'); })(jQuery);
.(function($) { $('ul.pagination li.active') .prev().addClass('show-mobile') .prev().addClass('show-mobile'); $('ul.pagination li.active') .next().addClass('show-mobile') .next().addClass('show-mobile'); $('ul.pagination') .find('li:first-child, li:last-child, li.active') .addClass('show-mobile'); })(jQuery);
CSS:
@media (max-width: /* write what you need, for me it's 560px */) { ul.pagination li:not(.show-mobile) { display: none; } }
Этот код отображает только несколько элементов li. Активен, два перед, два после, предыдущие / следующие стрелки. Это составляет всего 7 видимых элементов, а не 15.
Мой стол был слишком узким, поэтому я решил показать только первую и последнюю ли (стрелки Next и Back) разбивки на страницы с помощью jQuery filter (). Вы можете настроить это дальше.
$('ul.pagination li').hide().filter(':lt(1), :nth-last-child(1)').show();
Обязательно добавьте его до конца тега тела.
Старый способ определения пользовательского презентатора не работает с Laravel 5.3+, количество показанных ссылок, похоже, жестко закодировано в параметре $onEachSide
для Illuminate/Pagination/UrlWindow::make()
:
public static function make(PaginatorContract $paginator, $onEachSide = 3)
Я закончил тем, что просто написал свою собственную функцию render (), украв некоторый код из LengthAwarePaginator
/** * Stole come code from LengthAwarePaginator::render() and ::elements() to allow for a smaller UrlWindow * * @param LengthAwarePaginator $paginator * @param int $onEachSide * @return string */ public static function render(LengthAwarePaginator $paginator, $onEachSide = 2) { $window = UrlWindow::make($paginator, $onEachSide); $elements = array_filter([ $window['first'], is_array($window['slider']) ? '...' : null, $window['slider'], is_array($window['last']) ? '...' : null, $window['last'], ]); return LengthAwarePaginator::viewFactory()->make(LengthAwarePaginator::$defaultView, [ 'paginator' => $paginator, 'elements' => $elements, ])->render(); }
}
Мы используем Twig, поэтому я зарегистрировал это как фильтр Twig, я думаю, что для Blade можно сделать что-то подобное.