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,他们还发出一个一律实现的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生成的分页按钮是绝非“页码”的,只有“上一致页”和“下同样页”按钮。

 

相关文章