Laravel分页

Laravel使用的进度中,某个效益把前端页面的抒发“写死了”,比如分页的翻页按钮!

理所当然你会说Laravel的Bootstrap样式也很难堪啊,不过实际项目中,翻页按钮日常须要满足的客户的内需,尤其在支付一款援助手机适配的Web
APP,更是必要动用自定义的样式。

由此,学习一样东西无法管窥蠡测,而是究其原理。

先来看看Laravel是怎么分页的,生成分页按钮的代码终归写在了哪个地方?

Laravel目录\vendor\laravel\framework\src\Illuminate\Pagination下

先理一下类的继承关系

PresenterContract(父类)

┗BootstrapThreePresenter(子类)<-SimpleBootstrapThreePresenter

┗BootstrapFourPresenter(子类)<-SimpleBootstrapFourPresenter

从小编对类的命名上看,必有分别,大家从代码上讨论

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">'.$text.'</li>';
    }
    /**
     * Get HTML wrapper for active text.
     *
     * @param  string  $text
     * @return string
     */
    protected function getActivePageWrapper($text)
    {
        return '<li class="active">'.$text.'</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,他们都有2个如出一辙已毕的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生成的分页按钮是尚未“页码”的,唯有“上一页”和“下一页”按钮。

 

相关文章