国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel5.1+ 分頁P(yáng)agination解析以及擴(kuò)展

LancerComet / 1919人閱讀

摘要:文檔告訴我們對應(yīng)于查詢語句構(gòu)造器和的方法,而則等同于方法。那我們還是來看下源碼,具體這個(gè)是如何實(shí)現(xiàn)的中傳入的是一個(gè)的實(shí)例,并調(diào)用這個(gè)實(shí)例化的方法來實(shí)現(xiàn)分頁的顯示的。首先就來簡單的實(shí)現(xiàn)一個(gè),顯示出來上一頁和下一頁,中間是分頁數(shù)字的例子。

本文最早發(fā)表于本人博客: Laravel5.1+ 分頁P(yáng)agination解析以及擴(kuò)展

Laravel 的分頁很方便,其實(shí)擴(kuò)展起來也挺容易的,下面就來做個(gè)示例,擴(kuò)展一下paginate() simplePaginate()方法,來實(shí)現(xiàn)我們自定義分頁樣式,比如顯示"上一頁""下一頁",而不是"《""》",當(dāng)然擴(kuò)展的方法掌握了你就可以肆無忌憚的擴(kuò)展一個(gè)你想要的分頁了,比如跳轉(zhuǎn)到某一頁,分頁顯示一共多少記錄,當(dāng)前顯示的記錄范圍等等巴拉巴拉的。。。

5.1和5.2應(yīng)該是同樣的方法,我這里用的是5.2的版本。文檔告訴我們Paginator?對應(yīng)于查詢語句構(gòu)造器和 Eloquent 的?simplePaginate?方法,而?LengthAwarePaginator則等同于?paginate?方法。那我們還是來看下源碼,具體這個(gè)?paginate?是如何實(shí)現(xiàn)render()的,

Illuminate/Pagination/LengthAwarePaginator.php

render();
    }
......
}

render()中傳入的是一個(gè)Presenter的實(shí)例,并調(diào)用這個(gè)實(shí)例化的render方法來實(shí)現(xiàn)分頁的顯示的。如果沒有則調(diào)用BootstrapThreePresenterrender()的,來看看BootstrapThreePresenter是干嘛的

Illuminate/Pagination/BootstrapThreePresenter.php

paginator = $paginator;
        $this->window = is_null($window) ? UrlWindow::make($paginator) : $window->get();
    }

    /**
     * Determine if the underlying paginator being presented has pages to show.
     *
     * @return bool
     */
    public function hasPages()
    {
        return $this->paginator->hasPages();
    }

    /**
     * Convert the URL window into Bootstrap HTML.
     *
     * @return IlluminateSupportHtmlString
     */
    public function render()
    {
        if ($this->hasPages()) {
            return new HtmlString(sprintf(
                "
    %s %s %s
", $this->getPreviousButton(), $this->getLinks(), $this->getNextButton() )); } return ""; } ...... }

這里可以看到BootstrapThreePresenter實(shí)現(xiàn)了PresenterContract 的接口,render() 才是分頁顯示的真正實(shí)現(xiàn),構(gòu)造方法中的第一個(gè)參數(shù)PaginatorContract 其實(shí)就是一個(gè)Paginator我們繼續(xù)看下PresenterContract也就是Presenter接口中定義了什么方法需要實(shí)現(xiàn)

illuminate/contracts/Pagination/Presenter.php


其中定義了renderhasPages方法需要實(shí)現(xiàn)

好了,那我們現(xiàn)在已經(jīng)很清晰了,我們要自定義分頁的顯示,那么就要寫一個(gè)我們自己的Presenter來實(shí)現(xiàn)接口中的render()hasPages()就可以了。

首先就來簡單的實(shí)現(xiàn)一個(gè)paginate(),顯示出來"上一頁"和"下一頁",中間是分頁數(shù)字的例子。

新建文件如下(個(gè)人習(xí)慣)app/Foundations/Pagination/CustomerPresenter.php

paginator = $paginator;
        $this->window = is_null($window) ? UrlWindow::make($paginator) : $window->get();
    }

    /**
     * Determine if the underlying paginator being presented has pages to show.
     *
     * @return bool
     */
    public function hasPages()
    {
        return $this->paginator->hasPages();
    }

    /**
     * Convert the URL window into Bootstrap HTML.
     *
     * @return IlluminateSupportHtmlString
     */
    public function render()
    {
        if ($this->hasPages()) {
            return new HtmlString(sprintf(
                "
    %s %s %s
", $this->getPreviousButton("上一頁"),//具體實(shí)現(xiàn)可以查看該方法 $this->getLinks(), $this->getNextButton("下一頁")//具體實(shí)現(xiàn)可以查看該方法 )); } return ""; } /** * 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 "
  • " . $page . "
  • "; } /** * Get HTML wrapper for disabled text. * * @param string $text * @return string */ protected function getDisabledTextWrapper($text) { return "
  • " . $text . "
  • "; } /** * Get HTML wrapper for active text. * * @param string $text * @return string */ protected function getActivePageWrapper($text) { return "
  • " . $text . "
  • "; } /** * Get a pagination "dot" element. * * @return string */ protected function getDots() { return $this->getDisabledTextWrapper("..."); } /** * Get the current page from the paginator. * * @return int */ protected function currentPage() { return $this->paginator->currentPage(); } /** * Get the last page from the paginator. * * @return int */ protected function lastPage() { return $this->paginator->lastPage(); } }

    就這么簡單,主要就是render()方法,如果項(xiàng)目中需要修改分頁樣式,或者添加分頁跳轉(zhuǎn)之類的需求只要重寫其中的各項(xiàng)顯示的方法中的html元素就可以了,很靈活,在blade模板中也需要修該,比如我們的Paginator$users,默認(rèn)的分頁顯示是這樣的:

    {!! $users->render() !!}

    修改成我們自定義后的分頁顯示:

    {!! with(new AppFoundationsPaginationCustomerPresenter($categories))->render() !!}

    好了,這樣在頁面應(yīng)該就可以看到分頁鏈接中含有 "上一頁"和"下一頁"加數(shù)字的樣式了。

    那么如果擴(kuò)展simplePaginate?其實(shí)很簡單,只要繼承剛才的CustomerPresenter,實(shí)現(xiàn)hasPagesrender,至于為什么可以按照我上面查看源碼的方式看一下就知道了,比如我們改成"上一篇"和"下一篇"

    新建AppFoundationsPaginationCustomerSimplePresenter.php

    paginator = $paginator;
        }
    
        /**
         * Determine if the underlying paginator being presented has pages to show.
         *
         * @return bool
         */
        public function hasPages()
        {
            return $this->paginator->hasPages() && count($this->paginator->items()) > 0;
        }
    
        /**
         * Convert the URL window into Bootstrap HTML.
         *
         * @return IlluminateSupportHtmlString
         */
        public function render()
        {
            if ($this->hasPages()) {
                return new HtmlString(sprintf(
                    "
      %s %s
    ", $this->getPreviousButton("上一篇"), $this->getNextButton("下一篇") )); } return ""; } }

    分頁顯示:

    {!! with(new AppFoundationsPaginationCustomerSimplePresenter($categories))->render() !!}

    方法就是這個(gè)方法,具體修改按照自己需求重寫其中對應(yīng)的顯示html元素的方法就可以了。

    如果覺得本篇文章對您十分有益,何不 打賞一下

    文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21556.html

    相關(guān)文章

    • 常用列表頁常見hook封裝解析

        我們今天來講講關(guān)于ahooks 源碼,我們目標(biāo)主要有以下幾點(diǎn):  深入了解 React hooks。  明白如何抽象自定義 hooks,且可以構(gòu)建屬于自己的 React hooks 工具庫。  小建議:培養(yǎng)閱讀學(xué)習(xí)源碼的習(xí)慣,工具庫是一個(gè)對源碼閱讀不錯(cuò)的選擇。  列表頁常見元素  后臺管理系統(tǒng)中常見典型列表頁包括篩選表單項(xiàng)、Table表格、Pagination分頁這三部分。  針對使用 Ant...

      3403771864 評論0 收藏0
    • 全棧通用分頁查詢

      摘要:前言給大家講解全棧通用分頁查詢碼字不易,點(diǎn)個(gè)關(guān)注轉(zhuǎn)載請說明開發(fā)工具思維導(dǎo)圖目錄一所需要的包二后端數(shù)據(jù)庫幫助類通用查詢分頁父類書籍層類分頁工具類三前端文件助手類前端界面四一所需要的包二后端數(shù)據(jù)庫 前言:給大家講解全棧通用分頁查詢 碼字不易,點(diǎn)個(gè)關(guān)注 轉(zhuǎn)載請說明! 開發(fā)工具:eclipse 思維...

      Ashin 評論0 收藏0
    • 小程序分頁實(shí)踐:編寫可復(fù)用分頁組件

      摘要:項(xiàng)目中遇到切換列表,每個(gè)都需要分頁的需求,分頁流程具有相似性,于是想將分頁封裝為組件,方便應(yīng)用。組件的復(fù)用完成了以上組件,在對其他分頁的頁面,可以直接復(fù)用。 項(xiàng)目中遇到 tab切換列表,每個(gè)tab都需要分頁的需求,分頁流程具有相似性,于是想將分頁封裝為組件,方便應(yīng)用。 組件的應(yīng)用已寫成一個(gè)小demo,效果如下圖所示(數(shù)據(jù)用mock模擬): showImg(https://segment...

      crelaber 評論0 收藏0
    • 重寫yii2的數(shù)據(jù)提供器ArrayDataProvider類

      摘要:再看看另一個(gè)方法,的提供的數(shù)據(jù)統(tǒng)計(jì)總條數(shù)的方法是的,默認(rèn)計(jì)算分頁總數(shù)是根據(jù)數(shù)組計(jì)算的,而的數(shù)據(jù)就是我們查詢賦值給提供器的。統(tǒng)計(jì)總數(shù)預(yù)處理函數(shù)直接獲取通過函數(shù)獲取傳遞給數(shù)據(jù)提供器的數(shù)據(jù)總和。 首先看看ArrayDataProvider官方的doc: ArrayDataProvider implements a data provider based on a data array.Ar...

      xiaokai 評論0 收藏0

    發(fā)表評論

    0條評論

    最新活動
    閱讀需要支付1元查看
    <