Laravel分頁

Laravel使用的過程當中,有些功能把前端頁面的表達「寫死了」,好比分頁的翻頁按鈕!php

固然你會說Laravel的Bootstrap樣式也很好看啊,可是實際項目中,翻頁按鈕經常須要知足的客戶的須要,特別在開發一款支持手機適配的Web APP,更是須要使用自定義的樣式。html

因此,學習同樣東西不能只知其一;不知其二,而是究其原理。前端

先來看看Laravel是怎麼分頁的,生成分頁按鈕的代碼究竟寫在了哪裏?laravel

Laravel目錄\vendor\laravel\framework\src\Illuminate\Pagination下app

先理一下類的繼承關係函數

PresenterContract(父類)學習

┗BootstrapThreePresenter(子類)<-SimpleBootstrapThreePresenterthis

┗BootstrapFourPresenter(子類)<-SimpleBootstrapFourPresenterurl

從做者對類的命名上看,必有區別,咱們從代碼上研究spa

BootstrapThreePresenter.php和BootstrapFourPresenter.php主要區別在下列函數

BootstrapThreePresenter.php代碼:

 /**
     * Get HTML wrapper for an available page link.
     *
     * @param  string  $url
     * @param  int  $page
     * @param  string|null  $rel
     * @return string
     */
    protected function getAvailablePageWrapper($url, $page, $rel = null)
    {
        $rel = is_null($rel) ? '' : ' rel="'.$rel.'"';
        return '<li><a href="'.htmlentities($url).'"'.$rel.'>'.$page.'</a></li>';
    }
    /**
     * Get HTML wrapper for disabled text.
     *
     * @param  string  $text
     * @return string
     */
    protected function getDisabledTextWrapper($text)
    {
        return '<li class="disabled"><span>'.$text.'</span></li>';
    }
    /**
     * Get HTML wrapper for active text.
     *
     * @param  string  $text
     * @return string
     */
    protected function getActivePageWrapper($text)
    {
        return '<li class="active"><span>'.$text.'</span></li>';
    }

BootstrapFourPresenter.php代碼:

/**
     * Get HTML wrapper for an available page link.
     *
     * @param  string  $url
     * @param  int  $page
     * @param  string|null  $rel
     * @return string
     */
    protected function getAvailablePageWrapper($url, $page, $rel = null)
    {
        $rel = is_null($rel) ? '' : ' rel="'.$rel.'"';
        return '<li class="page-item"><a class="page-link" href="'.htmlentities($url).'"'.$rel.'>'.$page.'</a></li>';
    }
    /**
     * Get HTML wrapper for disabled text.
     *
     * @param  string  $text
     * @return string
     */
    protected function getDisabledTextWrapper($text)
    {
        return '<li class="page-item disabled"><a class="page-link">'.$text.'</a></li>';
    }
    /**
     * Get HTML wrapper for active text.
     *
     * @param  string  $text
     * @return string
     */
    protected function getActivePageWrapper($text)
    {
        return '<li class="page-item active"><a class="page-link">'.$text.'</a></li>';
    }

咱們發現最大的區別在ThreePresenter幾乎是「裸」HTML標籤,而FourPresenter生成的是帶class的HTML標籤。

不管是ThreePresenter仍是FourPresenter,他們都有一個相同實現的render()函數

 /**
     * Convert the URL window into Bootstrap HTML.
     *
     * @return \Illuminate\Support\HtmlString
     */
    public function render()
    {
        if ($this->hasPages()) {
            return new HtmlString(sprintf(
                '<ul class="pagination">%s %s %s</ul>',
                $this->getPreviousButton(),
                $this->getLinks(),
                $this->getNextButton()
            ));
        }
        return '';
    }

細心的讀者已經發覺,還有兩個繼承類,分別是SimpleThreePresenter和SimpleFourPresenter,既然是Simple(簡單),區別就在他們的render()函數

/**
     * Convert the URL window into Bootstrap HTML.
     *
     * @return \Illuminate\Support\HtmlString
     */
    public function render()
    {
        if ($this->hasPages()) {
            return new HtmlString(sprintf(
                '<ul class="pager">%s %s</ul>',
                $this->getPreviousButton(),
                $this->getNextButton()
            ));
        }
        return '';
    }

也就是說,SimpleThreePresenter和SimpleFourPresenter生成的分頁按鈕是沒有「頁碼」的,只有「上一頁」和「下一頁」按鈕。

相關文章
相關標籤/搜索