• Laravel分页


    Laravel使用的过程中,有些功能把前端页面的表达“写死了”,比如分页的翻页按钮!

    当然你会说Laravel的Bootstrap样式也很好看啊,但是实际项目中,翻页按钮常常需要满足的客户的需要,特别在开发一款支持手机适配的Web APP,更是需要使用自定义的样式。

    所以,学习一样东西不能一知半解,而是究其原理。

    先来看看Laravel是怎么分页的,生成分页按钮的代码究竟写在了哪里?

    Laravel目录vendorlaravelframeworksrcIlluminatePagination下

    先理一下类的继承关系

    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"><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 IlluminateSupportHtmlString
         */
        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 IlluminateSupportHtmlString
         */
        public function render()
        {
            if ($this->hasPages()) {
                return new HtmlString(sprintf(
                    '<ul class="pager">%s %s</ul>',
                    $this->getPreviousButton(),
                    $this->getNextButton()
                ));
            }
            return '';
        }
    

    也就是说,SimpleThreePresenter和SimpleFourPresenter生成的分页按钮是没有“页码”的,只有“上一页”和“下一页”按钮。

     

    本文为博主原创文章,转载请在明显位置注明出处: http://www.cnblogs.com/sweng

    本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。

  • 相关阅读:
    随笔为什么还要想标题
    [GXYCTF2019]BabySQli
    [CISCN2019 华北赛区 Day2 Web1]Hack World
    20年美亚杯个人赛-ALICE_USB部分WRITE UP
    20年美亚杯个人赛-Alice LG Phone部分WRITE UP
    20年美亚杯个人赛-Alice_Laptop部分WRITE UP
    20年美亚杯WRITE UP
    18年美亚杯团体赛-C部分 WRITE UP
    v&n赛 ML 第一步(python解决)
    CTFHub web技能树 RCE
  • 原文地址:https://www.cnblogs.com/sweng/p/6359654.html
Copyright © 2020-2023  润新知