如何减少Laravel分页中的链接数量

问题描述 投票:0回答:1

如何减少 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">&lsaquo;</span>
                </li>
            @else
                <li class="page-item">
                    <a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</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')">&rsaquo;</a>
                </li>
            @else
                <li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
                    <span class="page-link" aria-hidden="true">&rsaquo;</span>
                </li>
            @endif
        </ul>
    </nav>
@endif
php laravel pagination laravel-blade
1个回答
0
投票

这是我从头开始编写的分页函数,以实现这种紧凑模式。您可以将逻辑调整为您的模板格式。我按原样提供,希望有帮助。

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>

© www.soinside.com 2019 - 2024. All rights reserved.