【问题标题】:Laravel Pagination "Three Dots" Separator customizationLaravel 分页“三点”分隔符定制
【发布时间】:2017-01-24 01:16:55
【问题描述】:

我目前使用 Laravel 5.3,想知道是否有自定义三点 deperator 的选项。 (跳过第 9-10 页,为时已晚)

Example

目前,如果页面超过 11 个,则三个点会启动...如果您的网站具有响应性,那么这没什么用处。如果页面太多,则分为 2 行。

Example2

我找不到任何关于 $resource->links() 的选项。但是如果有请告诉我!非常感谢。

编辑:它与以下功能有关: 供应商/laravel/framework/src/Illuminate/Pagination/LengthAwarePaginator.php(第 128 页,render())。当前函数不支持第二个变量。所以我想我必须重建它?

【问题讨论】:

  • 你可以在php artisan vendor:publish中创建文件resources\views\vendors\paginations这样你就可以自定义你需要的页面(bootstrap、bootstrap4等)进行分页
  • 是的,但遗憾的是这只是前端。它不安静让我说哪个页面将被点缀出来。由于分页不允许第二个参数。

标签: php laravel twitter-bootstrap-3 laravel-5.3


【解决方案1】:

选项 1: 您可以自定义默认文件,但不要直接更改供应商文件。发布它们,然后对其进行修改。

php artisan vendor:publish --tag=laravel-pagination

此命令将自动创建文件夹 /resources/views/vendor/pagination 并且你有你的文件供修改。 您可以在这里获取更多信息:laravel pagination

选项 2:

也许您想摆脱默认生成的文件。或者,也许您想分配另一个文件来负责您的默认分页视图。

所有这些都是可能的,但是您需要通过在 boot() 方法中调用新的分页视图来通知 AppServiceProvider 执行此操作:

use Illuminate\Pagination\Paginator;

public function boot(){
    Paginator::defaultView('your-pagination-view-file-name');

    Paginator::defaultSimpleView('your-pagination-view-file-name');
}

在此处获取 defaultView 和 defaultSimpleView 的信息:laravel pagination

我为分页创建了新文件并添加到 AppServiceProvider 中。

@if ($paginator->hasPages())
<ul class="blog-pagenation">
    {{-- Previous Page Link --}}
    @if ($paginator->onFirstPage())
        <li class="disabled"><a>«</a></li>
    @else
        <li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">«</a></li>
    @endif

    @if($paginator->currentPage() > 3)
        <li class="hidden-xs"><a href="{{ $paginator->url(1) }}">1</a></li>
    @endif
    @if($paginator->currentPage() > 4)
        <li><a>...</a></li>
    @endif
    @foreach(range(1, $paginator->lastPage()) as $i)
        @if($i >= $paginator->currentPage() - 2 && $i <= $paginator->currentPage() + 2)
            @if ($i == $paginator->currentPage())
                <li class="active"><a class="active">{{ $i }}</a></li>
            @else
                <li><a href="{{ $paginator->url($i) }}">{{ $i }}</a></li>
            @endif
        @endif
    @endforeach
    @if($paginator->currentPage() < $paginator->lastPage() - 3)
        <li><a>...</a></li>
    @endif
    @if($paginator->currentPage() < $paginator->lastPage() - 2)
        <li class="hidden-xs"><a href="{{ $paginator->url($paginator->lastPage()) }}">{{ $paginator->lastPage() }}</a></li>
    @endif

    {{-- Next Page Link --}}
    @if ($paginator->hasMorePages())
        <li><a href="{{ $paginator->nextPageUrl() }}" rel="next">»</a></li>
    @else
        <li class="disabled"><a>»</a></li>
    @endif
</ul>
@endif

通过使用它,我可以在开始和结束时获得 3 个点,您必须根据您的主题自定义类。

【讨论】:

    【解决方案2】:

    这是 Laravel 5.5+ 的解决方案。它的作用如下:

    • 显示第一页和最后一页。
    • 显示当前页面的前两页和后两页。
    • 只有在当前页面大于 4 之后,左边才会出现三个点。
    • 仅在当前页数小于 4 -(页数)后,右侧才会出现三个点。
    <!-- Pagination Elements -->
    @foreach ($elements as $element)
        <!-- Array Of Links -->
        @foreach ($element as $page => $url)
            <!--  Use three dots when current page is greater than 4.  -->
            @if ($paginator->currentPage() > 4 && $page === 2)
                <li class="page-item disabled"><span class="page-link">...</span></li>
            @endif
    
            <!--  Show active page else show the first and last two pages from current page.  -->
            @if ($page == $paginator->currentPage())
                <li class="page-item active"><span class="page-link">{{ $page }}</span></li>
            @elseif ($page === $paginator->currentPage() + 1 || $page === $paginator->currentPage() + 2 || $page === $paginator->currentPage() - 1 || $page === $paginator->currentPage() - 2 || $page === $paginator->lastPage() || $page === 1)
                <li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
            @endif
    
            <!--  Use three dots when current page is away from end.  -->
            @if ($paginator->currentPage() < $paginator->lastPage() - 3 && $page === $paginator->lastPage() - 1)
                <li class="page-item disabled"><span class="page-link">...</span></li>
            @endif
        @endforeach
    @endforeach
    

    输出:

    Page 1 (first page)

    Page 3

    Page 10 (last page)

    【讨论】:

      【解决方案3】:

      添加到上一个响应中,一旦您使用 artisan 命令 php artisan vendor:publish 生成供应商视图文件,您可以在该文件夹中创建一个新文件并调用它,例如 custom .blade.php 并输入以下代码:

      @if ($paginator->hasPages())
      <ul class="custom-pagination">
          {{-- Previous Page Link --}}
          @if ($paginator->onFirstPage())
              <li class="disabled pageNumber"><span>&laquo; Prev</span></li>
          @else
              <li><a class="pageNumber" href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
          @endif
      
          {{-- Pagination Elements --}}
          @foreach ($elements as $element)
              {{-- Array Of Links --}}
              @if (is_array($element))
                  @foreach ($element as $page => $url)
                      @if ($page === $paginator->currentPage())
                          <li class="active pageNumber"><span>{{ $page }}</span></li>
                      @elseif (($page === $paginator->currentPage() + 1 || $page === $paginator->currentPage() + 2)
                       || $page === $paginator->lastPage())
                          <li><a class="pageNumber" href="{{ $url }}">{{ $page }}</a></li>
                      @elseif ($page === $paginator->lastPage()-1)
                          <li class="disabled"><span>...</span></li>
                      @endif
                  @endforeach
              @endif
          @endforeach
      
          {{-- Next Page Link --}}
          @if ($paginator->hasMorePages())
              <li><a class="pageNumber" href="{{ $paginator->nextPageUrl() }}" rel="next">Next &raquo;</a></li>
          @else
              <li class="disabled pageNumber"><span>Next &raquo;</span></li>
          @endif
      </ul>@endif
      

      三个点的代码的重要部分在 {{-- Array Of Links --}} 部分。我认为这或多或少可以满足您的需要,但可能需要额外的调整。

      然后你可以像这样在你的视图中使用它:

      <div class="pagination">
          @if ($users instanceof \Illuminate\Pagination\LengthAwarePaginator)
              {{ $users->links('vendor.pagination.custom') }}
          @endif
      </div>
      

      【讨论】:

      • 与 Laravel 5.4 无关,其中 3 点文本是 $elements 集合中的实际元素,它与 Paginator 对象一起发送,并在刀片视图中识别为:@987654326 @,可以在the source on GitHub中看到
      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 2021-10-17
      • 2010-09-22
      • 2011-03-24
      相关资源
      最近更新 更多