2015-02-09 51 views

回答

1

在Laravel 5定制分页是基于演示(类),而不是视图。

假设在你的路由代码,你有

$users = Users::paginate(15); 

在L4你用来做这样的事情在你的看法:

$users->appends(['sort' => 'votes'])->links(); 

在L5你这样做,而不是:

$users->appends(['sort' => 'votes'])->render(); 

render()方法接受一个Illuminate\Contracts\Pagination\Presenter实例。您可以创建一个实现该合同的自定义类,并将其传递给render()方法。

或者,您可以扩展Laravel paginator(以使用其分页逻辑),然后将现有分页实例($users->...)传递给扩展类构造函数。这确实是我为创建基于Laravel提供的Bootstrap演示者的自定义Zurb Foundation演示者所做的。它使用所有的Laravel分页逻辑并仅覆盖呈现方法。

随着我的自定义演示我的看法是这样的:

with(new \Stolz\Laravel\Pagination($users->appends(['sort' => 'votes'])))->render(); 

而且我定制分页主持人是:

<?php namespace Stolz\Laravel; 

use Illuminate\Pagination\BootstrapThreePresenter; 

class Pagination extends BootstrapThreePresenter 
{ 
    /** 
    * Convert the URL window into Zurb Foundation HTML. 
    * 
    * @return string 
    */ 
    public function render() 
    { 
     if(! $this->hasPages()) 
      return ''; 

     return sprintf(
      '<ul class="pagination" aria-label="Pagination">%s %s %s</ul></div>', 
      $this->getPreviousButton(), 
      $this->getLinks(), 
      $this->getNextButton() 
     ); 
    } 

    /** 
    * Get HTML wrapper for disabled text. 
    * 
    * @param string $text 
    * @return string 
    */ 
    protected function getDisabledTextWrapper($text) 
    { 
     return '<li class="unavailable" aria-disabled="true"><a href="javascript:void(0)">'.$text.'</a></li>'; 
    } 

    /** 
    * Get HTML wrapper for active text. 
    * 
    * @param string $text 
    * @return string 
    */ 
    protected function getActivePageWrapper($text) 
    { 
     return '<li class="current"><a href="javascript:void(0)">'.$text.'</a></li>'; 
    } 

    /** 
    * Get a pagination "dot" element. 
    * 
    * @return string 
    */ 
    protected function getDots() 
    { 
     return $this->getDisabledTextWrapper('&hellip;'); 
    } 
} 
相关问题