ThinkPHP分页类的使用相关问题
ThinkPHP3.2.3<span style="color: #000000">Page</span>.<span style="color: #0000ff">class</span>.<span style="color: #000000">php文件源码</span><?<span style="color: #000000">php</span><span style="color: #008000">//</span><span style="color: #008000"> +----------------------------------------------------------------------// | 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: 麦当苗儿 // +----------------------------------------------------------------------</span><span style="color: #000000">namespace Think;</span><span style="color: #0000ff">class</span><span style="color: #000000"> Page{ </span><span style="color: #0000ff">public</span> <span style="color: #800080">$firstRow</span>; <span style="color: #008000">//</span><span style="color: #008000"> 起始行数</span> <span style="color: #0000ff">public</span> <span style="color: #800080">$listRows</span>; <span style="color: #008000">//</span><span style="color: #008000"> 列表每页显示行数</span> <span style="color: #0000ff">public</span> <span style="color: #800080">$parameter</span>; <span style="color: #008000">//</span><span style="color: #008000"> 分页跳转时要带的参数</span> <span style="color: #0000ff">public</span> <span style="color: #800080">$totalRows</span>; <span style="color: #008000">//</span><span style="color: #008000"> 总行数</span> <span style="color: #0000ff">public</span> <span style="color: #800080">$totalPages</span>; <span style="color: #008000">//</span><span style="color: #008000"> 分页总页面数</span> <span style="color: #0000ff">public</span> <span style="color: #800080">$rollPage</span> = 11;<span style="color: #008000">//</span><span style="color: #008000"> 分页栏每页显示的页数</span> <span style="color: #0000ff">public</span> <span style="color: #800080">$lastSuffix</span> = <span style="color: #0000ff">true</span>; <span style="color: #008000">//</span><span style="color: #008000"> 最后一页是否显示总页数</span> <span style="color: #0000ff">private</span> <span style="color: #800080">$p</span> = 'p'; <span style="color: #008000">//</span><span style="color: #008000">分页参数名</span> <span style="color: #0000ff">private</span> <span style="color: #800080">$url</span> = ''; <span style="color: #008000">//</span><span style="color: #008000">当前链接URL</span> <span style="color: #0000ff">private</span> <span style="color: #800080">$nowPage</span> = 1<span style="color: #000000">; </span><span style="color: #008000">//</span><span style="color: #008000"> 分页显示定制</span> <span style="color: #0000ff">private</span> <span style="color: #800080">$config</span> = <span style="color: #0000ff">array</span><span style="color: #000000">( </span>'header' => '<span class="rows">共 %TOTAL_ROW% 条记录</span>', 'prev' => '< '>>', 'first' => '1...', 'last' => '...%TOTAL_PAGE%', 'theme' => '%FIRST% %UP<span style="color:transparent">本文来源gaodai#ma#com搞*!代#%^码$网!</span><strong>搞代gaodaima码</strong>_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%',<span style="color: #000000"> ); </span><span style="color: #008000">/*</span><span style="color: #008000">* * 架构函数 * @param array $totalRows 总的记录数 * @param array $listRows 每页显示记录数 * @param array $parameter 分页跳转的参数 </span><span style="color: #008000">*/</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span> __construct(<span style="color: #800080">$totalRows</span>, <span style="color: #800080">$listRows</span>=20, <span style="color: #800080">$parameter</span> = <span style="color: #0000ff">array</span><span style="color: #000000">()) { C(</span>'VAR_PAGE') && <span style="color: #800080">$this</span>->p = C('VAR_PAGE'); <span style="color: #008000">//</span><span style="color: #008000">设置分页参数名称</span> <span style="color: #008000">/*</span><span style="color: #008000"> 基础设置 </span><span style="color: #008000">*/</span> <span style="color: #800080">$this</span>->totalRows = <span style="color: #800080">$totalRows</span>; <span style="color: #008000">//</span><span style="color: #008000">设置总记录数</span> <span style="color: #800080">$this</span>->listRows = <span style="color: #800080">$listRows</span>; <span style="color: #008000">//</span><span style="color: #008000">设置每页显示行数</span> <span style="color: #800080">$this</span>->parameter = <span style="color: #0000ff">empty</span>(<span style="color: #800080">$parameter</span>) ? <span style="color: #800080">$_GET</span> : <span style="color: #800080">$parameter</span><span style="color: #000000">; </span><span style="color: #800080">$this</span>->nowPage = <span style="color: #0000ff">empty</span>(<span style="color: #800080">$_GET</span>[<span style="color: #800080">$this</span>->p]) ? 1 : <span style="color: #008080">intval</span>(<span style="color: #800080">$_GET</span>[<span style="color: #800080">$this</span>-><span style="color: #000000">p]); </span><span style="color: #800080">$this</span>->nowPage = <span style="color: #800080">$this</span>->nowPage>0 ? <span style="color: #800080">$this</span>->nowPage : 1<span style="color: #000000">; </span><span style="color: #800080">$this</span>->firstRow = <span style="color: #800080">$this</span>->listRows * (<span style="color: #800080">$this</span>->nowPage - 1<span style="color: #000000">); } </span><span style="color: #008000">/*</span><span style="color: #008000">* * 定制分页链接设置 * @param string $name 设置名称 * @param string $value 设置值 </span><span style="color: #008000">*/</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span> setConfig(<span style="color: #800080">$name</span>,<span style="color: #800080">$value</span><span style="color: #000000">) { </span><span style="color: #0000ff">if</span>(<span style="color: #0000ff">isset</span>(<span style="color: #800080">$this</span>->config[<span style="color: #800080">$name</span><span style="color: #000000">])) { </span><span style="color: #800080">$this</span>->config[<span style="color: #800080">$name</span>] = <span style="color: #800080">$value</span><span style="color: #000000">; } } </span><span style="color: #008000">/*</span><span style="color: #008000">* * 生成链接URL * @param integer $page 页码 * @return string </span><span style="color: #008000">*/</span> <span style="color: #0000ff">private</span> <span style="color: #0000ff">function</span> url(<span style="color: #800080">$page</span><span style="color: #000000">){ </span><span style="color: #0000ff">return</span> <span style="color: #008080">str_replace</span>(<span style="color: #008080">urlencode</span>('[PAGE]'), <span style="color: #800080">$page</span>, <span style="color: #800080">$this</span>-><span style="color: #000000">url); } </span><span style="color: #008000">/*</span><span style="color: #008000">* * 组装分页链接 * @return string </span><span style="color: #008000">*/</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span><span style="color: #000000"> show() { </span><span style="color: #0000ff">if</span>(0 == <span style="color: #800080">$this</span>->totalRows) <span style="color: #0000ff">return</span> ''<span style="color: #000000">; </span><span style="color: #008000">/*</span><span style="color: #008000"> 生成URL </span><span style="color: #008000">*/</span> <span style="color: #800080">$this</span>->parameter[<span style="color: #800080">$this</span>->p] = '[PAGE]'<span style="color: #000000">; </span><span style="color: #800080">$this</span>->url = U(ACTION_NAME, <span style="color: #800080">$this</span>-><span style="color: #000000">parameter); </span><span style="color: #008000">/*</span><span style="color: #008000"> 计算分页信息 </span><span style="color: #008000">*/</span> <span style="color: #800080">$this</span>->totalPages = <span style="color: #008080">ceil</span>(<span style="color: #800080">$this</span>->totalRows / <span style="color: #800080">$this</span>->listRows); <span style="color: #008000">//</span><span style="color: #008000">总页数</span> <span style="color: #0000ff">if</span>(!<span style="color: #0000ff">empty</span>(<span style="color: #800080">$this</span>->totalPages) && <span style="color: #800080">$this</span>->nowPage > <span style="color: #800080">$this</span>-><span style="color: #000000">totalPages) { </span><span style="color: #800080">$this</span>->nowPage = <span style="color: #800080">$this</span>-><span style="color: #000000">totalPages; } </span><span style="color: #008000">/*</span><span style="color: #008000"> 计算分页临时变量 </span><span style="color: #008000">*/</span> <span style="color: #800080">$now_cool_page</span> = <span style="color: #800080">$this</span>->rollPage/2<span style="color: #000000">; </span><span style="color: #800080">$now_cool_page_ceil</span> = <span style="color: #008080">ceil</span>(<span style="color: #800080">$now_cool_page</span><span style="color: #000000">); </span><span style="color: #800080">$this</span>->lastSuffix && <span style="color: #800080">$this</span>->config['last'] = <span style="color: #800080">$this</span>-><span style="color: #000000">totalPages; </span><span style="color: #008000">//</span><span style="color: #008000">上一页</span> <span style="color: #800080">$up_row</span> = <span style="color: #800080">$this</span>->nowPage - 1<span style="color: #000000">; </span><span style="color: #800080">$up_page</span> = <span style="color: #800080">$up_row</span> > 0 ? '$this</span>->url(<span style="color: #800080">$up_row</span>) . '">' . <span style="color: #800080">$this</span>->config['prev'] . '' : ''<span style="color: #000000">; </span><span style="color: #008000">//</span><span style="color: #008000">下一页</span> <span style="color: #800080">$down_row</span> = <span style="color: #800080">$this</span>->nowPage + 1<span style="color: #000000">; </span><span style="color: #800080">$down_page</span> = (<span style="color: #800080">$down_row</span> <= <span style="color: #800080">$this</span>->totalPages) ? '$this</span>->url(<span style="color: #800080">$down_row</span>) . '">' . <span style="color: #800080">$this</span>->config['next'] . '' : ''<span style="color: #000000">; </span><span style="color: #008000">//</span><span style="color: #008000">第一页</span> <span style="color: #800080">$the_first</span> = ''<span style="color: #000000">; </span><span style="color: #0000ff">if</span>(<span style="color: #800080">$this</span>->totalPages > <span style="color: #800080">$this</span>->rollPage && (<span style="color: #800080">$this</span>->nowPage - <span style="color: #800080">$now_cool_page</span>) >= 1<span style="color: #000000">){ </span><span style="color: #800080">$the_first</span> = '$this</span>->url(1) . '">' . <span style="color: #800080">$this</span>->config['first'] . ''<span style="color: #000000">; } </span><span style="color: #008000">//</span><span style="color: #008000">最后一页</span> <span style="color: #800080">$the_end</span> = ''<span style="color: #000000">; </span><span style="color: #0000ff">if</span>(<span style="color: #800080">$this</span>->totalPages > <span style="color: #800080">$this</span>->rollPage && (<span style="color: #800080">$this</span>->nowPage + <span style="color: #800080">$now_cool_page</span>) < <span style="color: #800080">$this</span>-><span style="color: #000000">totalPages){ </span><span style="color: #800080">$the_end</span> = '$this</span>->url(<span style="color: #800080">$this</span>->totalPages) . '">' . <span style="color: #800080">$this</span>->config['last'] . ''<span style="color: #000000">; } </span><span style="color: #008000">//</span><span style="color: #008000">数字连接</span> <span style="color: #800080">$link_page</span> = ""<span style="color: #000000">; </span><span style="color: #0000ff">for</span>(<span style="color: #800080">$i</span> = 1; <span style="color: #800080">$i</span> <= <span style="color: #800080">$this</span>->rollPage; <span style="color: #800080">$i</span>++<span style="color: #000000">){ </span><span style="color: #0000ff">if</span>((<span style="color: #800080">$this</span>->nowPage - <span style="color: #800080">$now_cool_page</span>) <= 0<span style="color: #000000"> ){ </span><span style="color: #800080">$page</span> = <span style="color: #800080">$i</span><span style="color: #000000">; }</span><span style="color: #0000ff">elseif</span>((<span style="color: #800080">$this</span>->nowPage + <span style="color: #800080">$now_cool_page</span> - 1) >= <span style="color: #800080">$this</span>-><span style="color: #000000">totalPages){ </span><span style="color: #800080">$page</span> = <span style="color: #800080">$this</span>->totalPages - <span style="color: #800080">$this</span>->rollPage + <span style="color: #800080">$i</span><span style="color: #000000">; }</span><span style="color: #0000ff">else</span><span style="color: #000000">{ </span><span style="color: #800080">$page</span> = <span style="color: #800080">$this</span>->nowPage - <span style="color: #800080">$now_cool_page_ceil</span> + <span style="color: #800080">$i</span><span style="color: #000000">; } </span><span style="color: #0000ff">if</span>(<span style="color: #800080">$page</span> > 0 && <span style="color: #800080">$page</span> != <span style="color: #800080">$this</span>-><span style="color: #000000">nowPage){ </span><span style="color: #0000ff">if</span>(<span style="color: #800080">$page</span> <= <span style="color: #800080">$this</span>-><span style="color: #000000">totalPages){ </span><span style="color: #800080">$link_page</span> .= '$this</span>->url(<span style="color: #800080">$page</span>) . '">' . <span style="color: #800080">$page</span> . ''<span style="color: #000000">; }</span><span style="color: #0000ff">else</span><span style="color: #000000">{ </span><span style="color: #0000ff">break</span><span style="color: #000000">; } }</span><span style="color: #0000ff">else</span><span style="color: #000000">{ </span><span style="color: #0000ff">if</span>(<span style="color: #800080">$page</span> > 0 && <span style="color: #800080">$this</span>->totalPages != 1<span style="color: #000000">){ </span><span style="color: #800080">$link_page</span> .= '<span class="current">' . <span style="color: #800080">$page</span> . '</span>'<span style="color: #000000">; } } } </span><span style="color: #008000">//</span><span style="color: #008000">替换分页内容</span> <span style="color: #800080">$page_str</span> = <span style="color: #008080">str_replace</span><span style="color: #000000">( </span><span style="color: #0000ff">array</span>('%HEADER%', '%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%', '%TOTAL_PAGE%'), <span style="color: #0000ff">array</span>(<span style="color: #800080">$this</span>->config['header'], <span style="color: #800080">$this</span>->nowPage, <span style="color: #800080">$up_page</span>, <span style="color: #800080">$down_page</span>, <span style="color: #800080">$the_first</span>, <span style="color: #800080">$link_page</span>, <span style="color: #800080">$the_end</span>, <span style="color: #800080">$this</span>->totalRows, <span style="color: #800080">$this</span>->totalPages), <span style="color: #800080">$this</span>->config['theme'<span style="color: #000000">]); </span><span style="color: #0000ff">return</span> "<div>{<span style="color: #800080">$page_str</span>}</div>"<span style="color: #000000">; }}</span>