2015-02-09 56 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;'); 
    } 
} 
相關問題