Intereting Posts
Избегайте / удалять веб-промежуточное ПО в маршрутах для Laravel> = 5.2.31 PHP API Google Calendar: одновременное добавление нескольких событий Ошибка при загрузке изображения Yii Вызов API Google Адреса медленный в PHP / cURL по сравнению с браузером выборки, как ускорить работу? Путь к файлу для скрипта AJAX (в WordPress) Regex приводит к тому, что «Разделитель не должен быть буквенно-цифровым или обратным слэшем» Получить видео с прямой ссылкой из Vimeo в PHP Изменение глобального пути композитора (Windows) Получить месяц с определенной датой Каков наилучший способ создания файла XLS в PHP? Логика для уже существующей проверки записи, но только в случае обновленных значений формы Symfony2 создает собственный кодер для хранения пароля HTML-экспорт в Excel с использованием JavaScript, работа в FIREFOX, но не в IE и CHROME Как получить часовой пояс клиента? Удаление дубликатов из массива

Ограничить количество ссылок, показанных с разбиением на страницы Laravel

Любой простой способ ограничить, сколько ссылок показано с разбивкой по страницам 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 можно сделать что-то подобное.