Laravel 中如何自定义分页 Blade 视图模板

注:本代码片段适用于Laravel 4.x,Laravel 5.x请自行类比调整

有时候你可能想要自定义Laravel自带的分页:修改标记或者新增类名或属性以便更好的控制样式,以及ajax等等。

首先,为分页创建一个新的视图,我选择app/views/partials/pagination.blade.php,你也也可以将其放在任何你想要放置的地方,然后更新Laravel的配置项来告诉Laravel使用哪一个视图来展示分页,该配置项位于app/config/view.php

下面我提供了两种实现方式的代码:

第一种方式使用了Laravel默认的Presenter(BootstrapPresenter),适用于只是添加一个div容器而并不想要调整分页输出的场景。当然,你可以在视图中任何使用分页的地方加一个div将其包裹起来,但这是索然无味的,为什么不将这种包裹存放在一个地方,方便以后修改同时保持视图的干净呢?

第二种方式允许你完全控制分页输出,这种方式适用于你想要在分页列表/链接上添加类名或属性,或者你想要输出完整的页码列表的场景。

下面列出代码:

### 第一步:
### 修改视图配置

#
# app/config/view.php
#

将:
'pagination' => 'pagination::slider-3',
修改为:
'pagination' => 'partials/pagination' //自定义分页视图路径
### 第二步
### 创建一个新的分页Blade模板
# 方式1:使用添加div容器的Laravel Presenter
#
# app/views/partials/pagination.blade.php
#

<div class="pagination-container">

<?php
    $presenter = new Illuminate\Pagination\BootstrapPresenter($paginator);
?>

<?php if ($paginator->getLastPage() > 1): ?>
    <ul class="pagination">
        <?php echo $presenter->render(); ?>
    </ul>
<?php endif; ?>

</div>
#
# 方式2:自定义标记并输出所有页码
#
# app/views/partials/pagination.blade.php
#

@if ($paginator->getLastPage() > 1)

<ul class="ui pagination menu">
    <li>
        <a href="{{ $paginator->getUrl(1) }}" class="item{{ ($paginator->getCurrentPage() == 1) ? ' disabled' : '' }}">
            <i class="icon left arrow"></i> 
            首页
        </a>
    </li>
    @for ($i = 1; $i <= $paginator->getLastPage(); $i++)
        <a href="{{ $paginator->getUrl($i) }}" class="item{{ ($paginator->getCurrentPage() == $i) ? ' active' : '' }}">
            {{ $i }}
        </a>
    @endfor
    <li>
        <a href="{{ $paginator->getUrl($paginator->getLastPage()) }}" class="item{{ ($paginator->getCurrentPage() == $paginator->getLastPage()) ? ' disabled' : '' }}"> 
            末页 
            <i class="icon right arrow"></i>
        </a>
    </li>
</ul>

@endif

学院君

学院君 has written 548 articles

资深PHP工程师,Laravel学院院长