1. 程式人生 > >thinkphp5實現自定義分頁類

thinkphp5實現自定義分頁類

為什麼修改系統自帶樣式?

thinnkphp5系統自帶的樣式過於簡單,只是把頁數和點選某頁跳轉功能。當我們也是較多,想跳轉到具體的某頁都只能一頁一頁的跳轉。

修改系統檔案需要做什麼準備?

找到該目錄thinkphp5/framework/library/think/paginator/driver

如何修改?

複製一份 Bootstrap.php,將檔名稱修改為其他檔名稱。將檔案內容修改為如下內容,建議直接複製全部修改。

namespace think\paginator\driver;
use think\Paginator;
class BootstrapDetailed extends Paginator

{


    /**

     * 上一頁按鈕

     * @param string $text

     * @return string

     */

    protected function getPreviousButton($text = "上一頁")

    {


        if ($this->currentPage() getDisabledTextWrapper($text);

        }


        $url = $this->url(

            $this->currentPage() - 1

        );


        return $this->getPageLinkWrapper($url, $text);

    }




    //總數標籤

    protected  function totalshow()

    {


        $totalhtml="共".$this->total."條記錄  第".$this->currentPage()."頁/共".$this->lastPage()."頁";

        return $totalhtml;


    }


    //尾頁標籤


    protected  function showlastpage($text = '尾頁')

    {


        if($this->currentPage()==$this->lastPage())

        {

            return $this->getDisabledTextWrapper($text);


        }


        $url = $this->url($this->lastPage());

        return $this->getPageLinkWrapper($url, $text);

    }


    //首頁標籤


    protected  function showfirstpage($text = '首頁')

    {


        if($this->currentPage()==1)

        {

            return $this->getDisabledTextWrapper($text);


        }


        $url = $this->url(1);

        return $this->getPageLinkWrapper($url, $text);

    }

    //後五頁

    protected  function afivepage($text = '後五頁')

    {



        if($this->lastPage()currentPage()+5)

        {

            return $this->getDisabledTextWrapper($text);


        }

        $url = $this->url($this->currentPage()+5);



        return $this->getPageLinkWrapper($url, $text);

    }


    //前五頁

    protected  function bfivepage($text = '前五頁')

    {



        if($this->currentPage()getDisabledTextWrapper($text);


        }

        $url = $this->url($this->currentPage()-5);



        return $this->getPageLinkWrapper($url, $text);

    }



    /**

     * 下一頁按鈕

     * @param string $text

     * @return string

     */

    protected function getNextButton($text = '下一頁')

    {

        if (!$this->hasMore) {

            return $this->getDisabledTextWrapper($text);

        }


        $url = $this->url($this->currentPage() + 1);


        return $this->getPageLinkWrapper($url, $text);

    }


    //跳轉到哪頁

    protected  function gopage()

    {



        return $gotohtml="  ";

        // return $totalhtml;;


    }


    /**

     * 頁碼按鈕

     * @return string

     */

    protected function getLinks()

    {

        if ($this->simple)

            return '';


        $block = [

            'first'  => null,

            'slider' => null,

            'last'   => null

        ];


        $side   = 2;

        $window = $side * 2;


        if ($this->lastPage getUrlRange(1, $this->lastPage);


        } elseif ($this->currentPage getUrlRange(1, $window + 1);

        } elseif ($this->currentPage > ($this->lastPage - $window+1)) {

            $block['slider']  = $this->getUrlRange($this->lastPage - ($window), $this->lastPage);


        } else {


            $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side);

        }


        $html = '';


        if (is_array($block['first'])) {

            $html .= $this->getUrlLinks($block['first']);

        }


        if (is_array($block['slider'])) {


            $html .= $this->getUrlLinks($block['slider']);

        }


        if (is_array($block['last'])) {

            $html .= $this->getUrlLinks($block['last']);

        }


        return $html;

    }


    /**

     * 渲染分頁html

     * @return mixed

     */

    public function render()

    {

        if ($this->hasPages()) {

            if ($this->simple) {

                return sprintf(

                    '%s %s %s',


                    $this->getPreviousButton(),

                    $this->getNextButton()

                );

            } else {

                return sprintf(

                    ' %s %s %s %s %s %s %s %s ',

                    //顯示數量頁碼資訊

                    $this->totalshow(),

                    //第一頁

                    $this->showfirstpage(),

                    //上一頁

                    $this->getPreviousButton(),

                    //前五頁

                    $this->bfivepage(),

                    //頁碼

                    $this->getLinks(),

                    //後五頁

                    //$this->afivepage(),

                    //下一頁

                    $this->getNextButton(),

                    //最後一頁

                    $this->showlastpage(),

                //最後再加個引數 %s 可以顯示跳轉到哪頁

                    $this->gopage()

                );

            }

        }

    }


    /**

     * 生成一個可點選的按鈕

     *

     * @param  string $url

     * @param  int    $page

     * @return string

     */

    protected function getAvailablePageWrapper($url, $page)

    {

        return '' . $page . '';

    }


    /**

     * 生成一個禁用的按鈕

     *

     * @param  string $text

     * @return string

     */

    protected function getDisabledTextWrapper($text)

    {

        return '' . $text . '';

    }


    /**

     * 生成一個啟用的按鈕

     *

     * @param  string $text

     * @return string

     */

    protected function getActivePageWrapper($text)

    {

        return '' . $text . '';

    }


    /**

     * 生成省略號按鈕

     *

     * @return string

     */

    protected function getDots($text = '...')

    {


        //$url = $this->url($this->currentPage() + 1);


        //  return $this->getPageLinkWrapper($url, $text);

        return $this->getDisabledTextWrapper('...');

    }


    /**

     * 批量生成頁碼按鈕.

     *

     * @param  array $urls

     * @return string

     */

    protected function getUrlLinks(array $urls)

    {

        $html = '';


        foreach ($urls as $page => $url) {

            $html .= $this->getPageLinkWrapper($url, $page);

        }


        return $html;

    }


    /**

     * 生成普通頁碼按鈕

     *

     * @param  string $url

     * @param  int    $page

     * @return string

     */

    protected function getPageLinkWrapper($url, $page)

    {

        if ($page == $this->currentPage()) {

            return $this->getActivePageWrapper($page);

        }


        return $this->getAvailablePageWrapper($url, $page);

    }

}
如何使用?

在配置檔案中,新增如下配置。預設的配置檔案已經載入了分頁類,這裡修改一下就行了。

       'paginate'               => [
           'type'      => 'BootstrapDetailed',
           'var_page'  => 'page',
           'list_rows' => 15,
       ],
// 在模型層中使用Db類獲取資料
      $result = Db::table('core')->paginate(3);
      return view('index', [
        'page' => $result
      ]);
{$page->render()}// 模板進行輸出

修改之後的效果?

TIM截圖20180131164728.png

原文連結:http://www.qqdeveloper.com/a/70.html