如何脱离Laravel(v5.3+)独立使用illuminate/pagination分页组件

Eddy 发布于2017-4-22 9:26:19 分类: 技术心得 已浏览loading 网友评论0条 我要评论

这个过程有点意思,网络上基本都是5.3以前版本的解决方案,5.3及以后的版本都不好使了,在此记录下~


备注:需要结合illuminate/database组件一起使用


1.安装组件


composer require illuminate/database
composer require illuminate/pagination

2.Laravel的Eloquent的paginate或simplePaginate方法会返回pagination实例对象,因此直接拿来用就可以了。



// 数据获取
$items = KeywordModel::orderBy($order, 'desc')->paginate(100);

// 分页url
$items->setPath('keywords');

// 分页url带上查询参数
$items->appends('order', $order);

// 分页导航数据获取
$window = UrlWindow::make($items);

$elements = [
    $window['first'],
    is_array($window['slider']) ? '...' : null,
    $window['slider'],
    is_array($window['last']) ? '...' : null,
    $window['last'],
];

// 此处我用的是twig模板引擎,其它模板引擎类似。关键是 paginator 和 elements 两个变量
echo $this->twig->render(
    'seo/keyword.html',
    ['paginator' => $items, 'order' => $order, 'elements' => array_filter($elements)]
);

3.然后看看模板中怎么弄(供参考,可参考对应修改)。这里没有直接调用分页组件的links方法(这个与laravel自身的视图组件耦合,我们就不用了)


{% if paginator.hasPages %}
    {% if paginator.onFirstPage %}
  • «
  • {% else %}
  • {% endif %} {% for element in elements %} {% if is_string(element) %}
  • {{ element }}
  • {% endif %} {% if is_array(element) %} {% for page, url in element %} {% if paginator.currentPage == page %}
  • {{ page }}
  • {% else %}
  • {{ page }}
  • {% endif %} {% endfor %} {% endif %} {% endfor %} {% if paginator.hasMorePages %}
  • {% else %}
  • »
  • {% endif %}
{% endif %}

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/technique/912.html     欢迎订阅Eddy Blog

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言