国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table of Contents
ThinkPHP分頁類的使用相關(guān)問題,thinkphp分頁
Home php教程 php手冊(cè) ThinkPHP分頁類的使用相關(guān)問題,thinkphp分頁

ThinkPHP分頁類的使用相關(guān)問題,thinkphp分頁

Jun 13, 2016 am 08:46 AM
thinkphp

ThinkPHP分頁類的使用相關(guān)問題,thinkphp分頁

ThinkPHP3.2.3<span>
Page</span>.<span>class</span>.<span>php文件源碼

</span><?<span>php
</span><span>//</span><span> +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 麥當(dāng)苗兒 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------</span>
<span>namespace Think;

</span><span>class</span><span> Page{
    </span><span>public</span> <span>$firstRow</span>; <span>//</span><span> 起始行數(shù)</span>
    <span>public</span> <span>$listRows</span>; <span>//</span><span> 列表每頁顯示行數(shù)</span>
    <span>public</span> <span>$parameter</span>; <span>//</span><span> 分頁跳轉(zhuǎn)時(shí)要帶的參數(shù)</span>
    <span>public</span> <span>$totalRows</span>; <span>//</span><span> 總行數(shù)</span>
    <span>public</span> <span>$totalPages</span>; <span>//</span><span> 分頁總頁面數(shù)</span>
    <span>public</span> <span>$rollPage</span>   = 11;<span>//</span><span> 分頁欄每頁顯示的頁數(shù)</span>
    <span>public</span> <span>$lastSuffix</span> = <span>true</span>; <span>//</span><span> 最后一頁是否顯示總頁數(shù)</span>

    <span>private</span> <span>$p</span>       = 'p'; <span>//</span><span>分頁參數(shù)名</span>
    <span>private</span> <span>$url</span>     = ''; <span>//</span><span>當(dāng)前鏈接URL</span>
    <span>private</span> <span>$nowPage</span> = 1<span>;

    </span><span>//</span><span> 分頁顯示定制</span>
    <span>private</span> <span>$config</span>  = <span>array</span><span>(
        </span>'header' => '<span class="rows">共 %TOTAL_ROW% 條記錄</span>',
        'prev'   => '<<',
        'next'   => '>>',
        'first'  => '1...',
        'last'   => '...%TOTAL_PAGE%',
        'theme'  => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%',<span>
    );

    </span><span>/*</span><span>*
     * 架構(gòu)函數(shù)
     * @param array $totalRows  總的記錄數(shù)
     * @param array $listRows  每頁顯示記錄數(shù)
     * @param array $parameter  分頁跳轉(zhuǎn)的參數(shù)
     </span><span>*/</span>
    <span>public</span> <span>function</span> __construct(<span>$totalRows</span>, <span>$listRows</span>=20, <span>$parameter</span> = <span>array</span><span>()) {
        C(</span>'VAR_PAGE') && <span>$this</span>->p = C('VAR_PAGE'); <span>//</span><span>設(shè)置分頁參數(shù)名稱</span>
        <span>/*</span><span> 基礎(chǔ)設(shè)置 </span><span>*/</span>
        <span>$this</span>->totalRows  = <span>$totalRows</span>; <span>//</span><span>設(shè)置總記錄數(shù)</span>
        <span>$this</span>->listRows   = <span>$listRows</span>;  <span>//</span><span>設(shè)置每頁顯示行數(shù)</span>
        <span>$this</span>->parameter  = <span>empty</span>(<span>$parameter</span>) ? <span>$_GET</span> : <span>$parameter</span><span>;
        </span><span>$this</span>->nowPage    = <span>empty</span>(<span>$_GET</span>[<span>$this</span>->p]) ? 1 : <span>intval</span>(<span>$_GET</span>[<span>$this</span>-><span>p]);
        </span><span>$this</span>->nowPage    = <span>$this</span>->nowPage>0 ? <span>$this</span>->nowPage : 1<span>;
        </span><span>$this</span>->firstRow   = <span>$this</span>->listRows * (<span>$this</span>->nowPage - 1<span>);
    }

    </span><span>/*</span><span>*
     * 定制分頁鏈接設(shè)置
     * @param string $name  設(shè)置名稱
     * @param string $value 設(shè)置值
     </span><span>*/</span>
    <span>public</span> <span>function</span> setConfig(<span>$name</span>,<span>$value</span><span>) {
        </span><span>if</span>(<span>isset</span>(<span>$this</span>->config[<span>$name</span><span>])) {
            </span><span>$this</span>->config[<span>$name</span>] = <span>$value</span><span>;
        }
    }

    </span><span>/*</span><span>*
     * 生成鏈接URL
     * @param  integer $page 頁碼
     * @return string
     </span><span>*/</span>
    <span>private</span> <span>function</span> url(<span>$page</span><span>){
        </span><span>return</span> <span>str_replace</span>(<span>urlencode</span>('[PAGE]'), <span>$page</span>, <span>$this</span>-><span>url);
    }

    </span><span>/*</span><span>*
     * 組裝分頁鏈接
     * @return string
     </span><span>*/</span>
    <span>public</span> <span>function</span><span> show() {
        </span><span>if</span>(0 == <span>$this</span>->totalRows) <span>return</span> ''<span>;

        </span><span>/*</span><span> 生成URL </span><span>*/</span>
        <span>$this</span>->parameter[<span>$this</span>->p] = '[PAGE]'<span>;
        </span><span>$this</span>->url = U(ACTION_NAME, <span>$this</span>-><span>parameter);
        </span><span>/*</span><span> 計(jì)算分頁信息 </span><span>*/</span>
        <span>$this</span>->totalPages = <span>ceil</span>(<span>$this</span>->totalRows / <span>$this</span>->listRows); <span>//</span><span>總頁數(shù)</span>
        <span>if</span>(!<span>empty</span>(<span>$this</span>->totalPages) && <span>$this</span>->nowPage > <span>$this</span>-><span>totalPages) {
            </span><span>$this</span>->nowPage = <span>$this</span>-><span>totalPages;
        }

        </span><span>/*</span><span> 計(jì)算分頁臨時(shí)變量 </span><span>*/</span>
        <span>$now_cool_page</span>      = <span>$this</span>->rollPage/2<span>;
        </span><span>$now_cool_page_ceil</span> = <span>ceil</span>(<span>$now_cool_page</span><span>);
        </span><span>$this</span>->lastSuffix && <span>$this</span>->config['last'] = <span>$this</span>-><span>totalPages;

        </span><span>//</span><span>上一頁</span>
        <span>$up_row</span>  = <span>$this</span>->nowPage - 1<span>;
        </span><span>$up_page</span> = <span>$up_row</span> > 0 ? '<a class="prev" href="' . <span>$this</span>->url(<span>$up_row</span>) . '">' . <span>$this</span>->config['prev'] . '</a>' : ''<span>;

        </span><span>//</span><span>下一頁</span>
        <span>$down_row</span>  = <span>$this</span>->nowPage + 1<span>;
        </span><span>$down_page</span> = (<span>$down_row</span> <= <span>$this</span>->totalPages) ? '<a class="next" href="' . <span>$this</span>->url(<span>$down_row</span>) . '">' . <span>$this</span>->config['next'] . '</a>' : ''<span>;

        </span><span>//</span><span>第一頁</span>
        <span>$the_first</span> = ''<span>;
        </span><span>if</span>(<span>$this</span>->totalPages > <span>$this</span>->rollPage && (<span>$this</span>->nowPage - <span>$now_cool_page</span>) >= 1<span>){
            </span><span>$the_first</span> = '<a class="first" href="' . <span>$this</span>->url(1) . '">' . <span>$this</span>->config['first'] . '</a>'<span>;
        }

        </span><span>//</span><span>最后一頁</span>
        <span>$the_end</span> = ''<span>;
        </span><span>if</span>(<span>$this</span>->totalPages > <span>$this</span>->rollPage && (<span>$this</span>->nowPage + <span>$now_cool_page</span>) < <span>$this</span>-><span>totalPages){
            </span><span>$the_end</span> = '<a class="end" href="' . <span>$this</span>->url(<span>$this</span>->totalPages) . '">' . <span>$this</span>->config['last'] . '</a>'<span>;
        }

        </span><span>//</span><span>數(shù)字連接</span>
        <span>$link_page</span> = ""<span>;
        </span><span>for</span>(<span>$i</span> = 1; <span>$i</span> <= <span>$this</span>->rollPage; <span>$i</span>++<span>){
            </span><span>if</span>((<span>$this</span>->nowPage - <span>$now_cool_page</span>) <= 0<span> ){
                </span><span>$page</span> = <span>$i</span><span>;
            }</span><span>elseif</span>((<span>$this</span>->nowPage + <span>$now_cool_page</span> - 1) >= <span>$this</span>-><span>totalPages){
                </span><span>$page</span> = <span>$this</span>->totalPages - <span>$this</span>->rollPage + <span>$i</span><span>;
            }</span><span>else</span><span>{
                </span><span>$page</span> = <span>$this</span>->nowPage - <span>$now_cool_page_ceil</span> + <span>$i</span><span>;
            }
            </span><span>if</span>(<span>$page</span> > 0 && <span>$page</span> != <span>$this</span>-><span>nowPage){

                </span><span>if</span>(<span>$page</span> <= <span>$this</span>-><span>totalPages){
                    </span><span>$link_page</span> .= '<a class="num" href="' . <span>$this</span>->url(<span>$page</span>) . '">' . <span>$page</span> . '</a>'<span>;
                }</span><span>else</span><span>{
                    </span><span>break</span><span>;
                }
            }</span><span>else</span><span>{
                </span><span>if</span>(<span>$page</span> > 0 && <span>$this</span>->totalPages != 1<span>){
                    </span><span>$link_page</span> .= '<span class="current">' . <span>$page</span> . '</span>'<span>;
                }
            }
        }

        </span><span>//</span><span>替換分頁內(nèi)容</span>
        <span>$page_str</span> = <span>str_replace</span><span>(
            </span><span>array</span>('%HEADER%', '%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%', '%TOTAL_PAGE%'),
            <span>array</span>(<span>$this</span>->config['header'], <span>$this</span>->nowPage, <span>$up_page</span>, <span>$down_page</span>, <span>$the_first</span>, <span>$link_page</span>, <span>$the_end</span>, <span>$this</span>->totalRows, <span>$this</span>->totalPages),
            <span>$this</span>->config['theme'<span>]);
        </span><span>return</span> "<div>{<span>$page_str</span>}</div>"<span>;
    }
}</span>

通常在數(shù)據(jù)查詢后都會(huì)對(duì)數(shù)據(jù)集進(jìn)行分頁操作,ThinkPHP也提供了分頁類來對(duì)數(shù)據(jù)分頁提供支持。 下面是數(shù)據(jù)分頁的兩種示例。

第一種:利用Page類和limit方法

<span>$User</span> = M('User'); <span>//</span><span> 實(shí)例化User對(duì)象</span>
<span>$count</span>      = <span>$User</span>->where('status=1')-><span>count</span>();<span>//</span><span> 查詢滿足要求的總記錄數(shù)</span>
<span>$Page</span>       = <span>new</span> \Think\Page(<span>$count</span>,25);<span>//</span><span> 實(shí)例化分頁類 傳入總記錄數(shù)和每頁顯示的記錄數(shù)(25)</span>
<span>$show</span>       = <span>$Page</span>->show();<span>//</span><span> 分頁顯示輸出
// 進(jìn)行分頁數(shù)據(jù)查詢 注意limit方法的參數(shù)要使用Page類的屬性</span>
<span>$list</span> = <span>$User</span>->where('status=1')->order('create_time')->limit(<span>$Page</span>->firstRow.','.<span>$Page</span>->listRows)-><span>select();
</span><span>$this</span>->assign('list',<span>$list</span>);<span>//</span><span> 賦值數(shù)據(jù)集</span>
<span>$this</span>->assign('page',<span>$show</span>);<span>//</span><span> 賦值分頁輸出</span>
<span>$this</span>->display(); <span>//</span><span> 輸出模板</span>

第二種:分頁類和page方法的實(shí)現(xiàn)

<span>$User</span> = M('User'); <span>//</span><span> 實(shí)例化User對(duì)象
// 進(jìn)行分頁數(shù)據(jù)查詢 注意page方法的參數(shù)的前面部分是當(dāng)前的頁數(shù)使用 $_GET[p]獲取</span>
<span>$list</span> = <span>$User</span>->where('status=1')->order('create_time')->page(<span>$_GET</span>['p'].',25')-><span>select();
</span><span>$this</span>->assign('list',<span>$list</span>);<span>//</span><span> 賦值數(shù)據(jù)集</span>
<span>$count</span>      = <span>$User</span>->where('status=1')-><span>count</span>();<span>//</span><span> 查詢滿足要求的總記錄數(shù)</span>
<span>$Page</span>       = <span>new</span> \Think\Page(<span>$count</span>,25);<span>//</span><span> 實(shí)例化分頁類 傳入總記錄數(shù)和每頁顯示的記錄數(shù)</span>
<span>$show</span>       = <span>$Page</span>->show();<span>//</span><span> 分頁顯示輸出</span>
<span>$this</span>->assign('page',<span>$show</span>);<span>//</span><span> 賦值分頁輸出</span>
<span>$this</span>->display(); <span>//</span><span> 輸出模板</span>

帶入查詢條件
如果是POST方式查詢,如何確保分頁之后能夠保持原先的查詢條件呢,我們可以給分頁類傳入?yún)?shù),方法是給分頁類的parameter屬性賦值

<span>$count</span>      = <span>$User</span>->where(<span>$map</span>)-><span>count</span>();<span>//</span><span> 查詢滿足要求的總記錄數(shù)</span>
<span>$Page</span>       = <span>new</span> \Think\Page(<span>$count</span>,25);<span>//</span><span> 實(shí)例化分頁類 傳入總記錄數(shù)和每頁顯示的記錄數(shù)
//分頁跳轉(zhuǎn)的時(shí)候保證查詢條件</span>
<span>foreach</span>(<span>$map</span> <span>as</span> <span>$key</span>=><span>$val</span><span>) {
    </span><span>$Page</span>->parameter[<span>$key</span>]   =   <span>urlencode</span>(<span>$val</span><span>);
}
</span><span>$show</span>       = <span>$Page</span>->show();<span>//</span><span> 分頁顯示輸出</span>

分頁樣式定制
我們可以對(duì)輸出的分頁樣式進(jìn)行定制,分頁類Page提供了一個(gè)setConfig方法來修改默認(rèn)的一些設(shè)置。例如:

<span>$page</span>->setConfig('header','<li class="rows">共<b>%TOTAL_ROW%</b>條記錄  第<b>%NOW_PAGE%</b>頁/共<b>%TOTAL_PAGE%</b>頁</li>'<span>);
            </span><span>$page</span>->setConfig('prev', '上一頁'<span>);
            </span><span>$page</span>->setConfig('next', '下一頁'<span>);
            </span><span>$page</span>->setConfig('first', '首頁'<span>);
            </span><span>$page</span>->setConfig('last', '尾頁'<span>);    
            </span><span>$page</span>->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');

setConfig方法支持的屬性包括:
header:頭部描述信息,默認(rèn)值 “共 %TOTAL_ROW% 條記錄”
next:下一頁描述信息,默認(rèn)值 “>>”
first:第一頁描述信息,默認(rèn)值 “1…”
last:最后一頁描述信息,默認(rèn)值 “…%TOTAL_PAGE%”
theme :分頁主題描述信息,包括了上面所有元素的組合 ,設(shè)置該屬性可以改變分頁的各個(gè)單元的顯示位置,默認(rèn)值是 “%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%”

其中,顯示位置的對(duì)應(yīng)的關(guān)系為:
位置 說明
%FIRST% 表示第一頁的鏈接顯示
%UP_PAGE% 表示上一頁的鏈接顯示
%LINK_PAGE% 表示分頁的鏈接顯示
%DOWN_PAGE% 表示下一頁的鏈接顯示
%END% 表示最后一頁的鏈接顯示
除了改變顯示信息外,你還可以使用樣式來定義分頁的顯示效果。 這些樣式class包括:first(第一頁)、prev(上一頁)、next(下一頁)、end(最后一頁)、num(其他頁的數(shù)字)、current(當(dāng)前頁)。

ThinkPHP系統(tǒng)分頁類寫的已經(jīng)很完善只要花幾分鐘時(shí)間研究一下源代碼即可,官方注釋也很清晰。這里注解一下使用中的問題。系統(tǒng)默認(rèn)設(shè)置了

<code class="hljs cs has-numbering"><span class="hljs-keyword">public $rollPage   = <span class="hljs-number">11;<span class="hljs-comment">// 分頁欄每頁顯示的頁數(shù)
<span class="hljs-keyword">public $lastSuffix = <span class="hljs-keyword">true; <span class="hljs-comment">// 最后一頁是否顯示總頁數(shù)</span></span></span></span></span></span></code><br /><br />

  一開始看注釋還不是很清楚,其實(shí)第一個(gè)參數(shù)是控制顯示多少頁數(shù),如果默認(rèn)顯示11個(gè)頁碼一般太長,個(gè)人喜歡設(shè)置為5,當(dāng)然修改這些參數(shù)不要在系統(tǒng)源文件中修改,而是在使用的時(shí)候設(shè)置$page->rollPage=5即可。

  而第二個(gè)參數(shù)就比較坑人了,我們?cè)趥€(gè)性化分頁顯示的時(shí)候通常會(huì)采用setConfig('last','尾頁'); 用來設(shè)置最后一頁顯示為“尾頁”,但是在show方法中可以看到tp在$this->lastSuffix 為真的時(shí)候重置該$this->config['last']的值為總頁數(shù)這樣導(dǎo)致無論你怎么設(shè)置最后一業(yè)都顯示為數(shù)字。也不知道官方為什么這么設(shè)置,解決辦法依然是重新設(shè)置$page->lastSuffix = false; 即可。

?

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to run thinkphp project How to run thinkphp project Apr 09, 2024 pm 05:33 PM

To run the ThinkPHP project, you need to: install Composer; use Composer to create the project; enter the project directory and execute php bin/console serve; visit http://localhost:8000 to view the welcome page.

There are several versions of thinkphp There are several versions of thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP has multiple versions designed for different PHP versions. Major versions include 3.2, 5.0, 5.1, and 6.0, while minor versions are used to fix bugs and provide new features. The latest stable version is ThinkPHP 6.0.16. When choosing a version, consider the PHP version, feature requirements, and community support. It is recommended to use the latest stable version for best performance and support.

How to run thinkphp How to run thinkphp Apr 09, 2024 pm 05:39 PM

Steps to run ThinkPHP Framework locally: Download and unzip ThinkPHP Framework to a local directory. Create a virtual host (optional) pointing to the ThinkPHP root directory. Configure database connection parameters. Start the web server. Initialize the ThinkPHP application. Access the ThinkPHP application URL and run it.

Which one is better, laravel or thinkphp? Which one is better, laravel or thinkphp? Apr 09, 2024 pm 03:18 PM

Performance comparison of Laravel and ThinkPHP frameworks: ThinkPHP generally performs better than Laravel, focusing on optimization and caching. Laravel performs well, but for complex applications, ThinkPHP may be a better fit.

How to install thinkphp How to install thinkphp Apr 09, 2024 pm 05:42 PM

ThinkPHP installation steps: Prepare PHP, Composer, and MySQL environments. Create projects using Composer. Install the ThinkPHP framework and dependencies. Configure database connection. Generate application code. Launch the application and visit http://localhost:8000.

How is the performance of thinkphp? How is the performance of thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP is a high-performance PHP framework with advantages such as caching mechanism, code optimization, parallel processing and database optimization. Official performance tests show that it can handle more than 10,000 requests per second and is widely used in large-scale websites and enterprise systems such as JD.com and Ctrip in actual applications.

Development suggestions: How to use the ThinkPHP framework for API development Development suggestions: How to use the ThinkPHP framework for API development Nov 22, 2023 pm 05:18 PM

Development suggestions: How to use the ThinkPHP framework for API development. With the continuous development of the Internet, the importance of API (Application Programming Interface) has become increasingly prominent. API is a bridge for communication between different applications. It can realize data sharing, function calling and other operations, and provides developers with a relatively simple and fast development method. As an excellent PHP development framework, the ThinkPHP framework is efficient, scalable and easy to use.

Development suggestions: How to use the ThinkPHP framework to implement asynchronous tasks Development suggestions: How to use the ThinkPHP framework to implement asynchronous tasks Nov 22, 2023 pm 12:01 PM

"Development Suggestions: How to Use the ThinkPHP Framework to Implement Asynchronous Tasks" With the rapid development of Internet technology, Web applications have increasingly higher requirements for handling a large number of concurrent requests and complex business logic. In order to improve system performance and user experience, developers often consider using asynchronous tasks to perform some time-consuming operations, such as sending emails, processing file uploads, generating reports, etc. In the field of PHP, the ThinkPHP framework, as a popular development framework, provides some convenient ways to implement asynchronous tasks.

See all articles