如何减少 Laravel 分页期间可见按钮的数量。我尝试了很多方法,但没有一个能正常工作
$onEachSide=1
方法不起作用
这就是现在分页的样子
这就是我需要的
这是分页代码
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">‹</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">‹</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">›</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">›</span>
</li>
@endif
</ul>
</nav>
@endif
这是我从头开始编写的分页函数,以实现这种紧凑模式。您可以将逻辑调整为您的模板格式。我按原样提供,希望有帮助。
public static function draw_pagination_as_html_compact($total, $page, $page_size, $prefix = "crud/list/table-name/", $suffix = "/&q=that", $before_non_one = "")
{
if ($total <= $page_size) {
return "";
}
$pages = ceil($total / $page_size);
$output = [];
$page = min($pages, $page);
$page = max(1, $page);
// previous
if ($page > 1) {
$output[] = '<li><a href="?path=' . ($prefix) . (intval($page - 1) > 1 ? ($before_non_one . intval($page - 1) . '') : '') . ($suffix) . '" data-hijack="click">«</a></li>';
} else {
$output[] = '<li class="disabled"><a>«</a></li>';
}
// page links
$did_first_ellipsis = false;
$did_last_ellipsis = false;
for ($i = 1; $i <= $pages; $i++) {
$active = ($i == $page) ? ' class="active"' : "";
if ($pages <= 7) {
// normal
$output[] = '<li' . $active . '><a href="?path=' . ($prefix) . (intval($i) > 1 ? ($before_non_one . intval($i)) . '' : '') . ($suffix) . '" data-hijack="click">' . $i . '</a></li>';
} else {
if ($page <= 4) {
// start
if ($i <= 5 || $i == $pages) {
$output[] = '<li' . $active . '><a href="?path=' . ($prefix) . (intval($i) > 1 ? ($before_non_one . intval($i)) . '' : '') . ($suffix) . '" data-hijack="click">' . $i . '</a></li>';
} else {
if (!$did_first_ellipsis) {
$output[] = '<li class="disabled"><a>...</a></li>';
}
$did_first_ellipsis = true;
}
} else if ($page >= $pages - 3) {
// end
if ($i == 1 || $i >= $pages - 4) {
$output[] = '<li' . $active . '><a href="?path=' . ($prefix) . (intval($i) > 1 ? ($before_non_one . intval($i)) . '' : '') . ($suffix) . '" data-hijack="click">' . $i . '</a></li>';
} else {
if (!$did_last_ellipsis) {
$output[] = '<li class="disabled"><a>...</a></li>';
}
$did_last_ellipsis = true;
}
} else {
// middle
if ($i == 1 || $i == $pages || abs($i - $page) <= 1) {
$output[] = '<li' . $active . '><a href="?path=' . ($prefix) . (intval($i) > 1 ? ($before_non_one . intval($i)) . '' : '') . ($suffix) . '" data-hijack="click">' . $i . '</a></li>';
} else {
if ($i < $page) {
if (!$did_first_ellipsis) {
$output[] = '<li class="disabled"><a>...</a></li>';
}
$did_first_ellipsis = true;
} else {
if (!$did_last_ellipsis) {
$output[] = '<li class="disabled"><a>...</a></li>';
}
$did_last_ellipsis = true;
}
}
}
}
}
// next
if ($page < $pages) {
$output[] = '<li><a href="?path=' . ($prefix . $before_non_one) . (intval($page) + 1) . ($suffix) . '" data-hijack="click">»</a></li>';
} else {
$output[] = '<li class="disabled"><a>»</a></li>';
}
$pages = implode("\n\t", $output);
$html = Project::get_template("tables/table-pagination.html", [
'$pages' => $pages,
]);
return $html;
}
这里是一些 HTML 输出
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<div class="pagination-container">
<ul class="pagination">
<li><a href="?path=entries/proxies/3" data-hijack="click" class="already-hijacked">«</a></li>
<li><a href="?path=entries/proxies" data-hijack="click" class="already-hijacked">1</a></li>
<li><a href="?path=entries/proxies/2" data-hijack="click" class="already-hijacked">2</a></li>
<li><a href="?path=entries/proxies/3" data-hijack="click" class="already-hijacked">3</a></li>
<li class="active"><a href="?path=entries/proxies/4" data-hijack="click" class="already-hijacked">4</a></li>
<li><a href="?path=entries/proxies/5" data-hijack="click" class="already-hijacked">5</a></li>
<li><a href="?path=entries/proxies/7" data-hijack="click" title="(5 + 9) * ½" class="already-hijacked">...</a></li>
<li><a href="?path=entries/proxies/9" data-hijack="click" class="already-hijacked">9</a></li>
<li><a href="?path=entries/proxies/5" data-hijack="click" class="already-hijacked">»</a></li>
</ul>
</div>
<div class="pagination-container">
<ul class="pagination">
<li><a href="?path=entries/proxies/4" data-hijack="click" class="already-hijacked">«</a></li>
<li><a href="?path=entries/proxies" data-hijack="click" class="already-hijacked">1</a></li>
<li><a href="?path=entries/proxies/2" data-hijack="click" title="(1 + 4) * ½" class="already-hijacked">...</a></li>
<li><a href="?path=entries/proxies/4" data-hijack="click" class="already-hijacked">4</a></li>
<li class="active"><a href="?path=entries/proxies/5" data-hijack="click" class="already-hijacked">5</a></li>
<li><a href="?path=entries/proxies/6" data-hijack="click" class="already-hijacked">6</a></li>
<li><a href="?path=entries/proxies/7" data-hijack="click" title="(6 + 9) * ½" class="already-hijacked">...</a></li>
<li><a href="?path=entries/proxies/9" data-hijack="click" class="already-hijacked">9</a></li>
<li><a href="?path=entries/proxies/6" data-hijack="click" class="already-hijacked">»</a></li>
</ul>
</div>
<div class="pagination-container">
<ul class="pagination">
<li><a href="?path=entries/proxies/5" data-hijack="click" class="already-hijacked">«</a></li>
<li><a href="?path=entries/proxies" data-hijack="click" class="already-hijacked">1</a></li>
<li><a href="?path=entries/proxies/3" data-hijack="click" title="(1 + 5) * ½" class="already-hijacked">...</a></li>
<li><a href="?path=entries/proxies/5" data-hijack="click" class="already-hijacked">5</a></li>
<li class="active"><a href="?path=entries/proxies/6" data-hijack="click" class="already-hijacked">6</a></li>
<li><a href="?path=entries/proxies/7" data-hijack="click" class="already-hijacked">7</a></li>
<li><a href="?path=entries/proxies/8" data-hijack="click" class="already-hijacked">8</a></li>
<li><a href="?path=entries/proxies/9" data-hijack="click" class="already-hijacked">9</a></li>
<li><a href="?path=entries/proxies/7" data-hijack="click" class="already-hijacked">»</a></li>
</ul>
</div>