- 论坛徽章:
- 0
|
网站开发,必先利其器。mysql分页很方便,但是程序如何翻页呢?可能大家都有自己的解决方案,我也把我的方法共享出来,大家一起讨论吧。该myPager类继承自PEAR/Pager类,自动保留提交过来的GET和POST参数,并以url参数传递:
- <?php
- // --------------------------------------------------------------------------
- // 文件名 : myPager.class.php
- // 描述 : 继承自Pear/Pager/Pager.php,为其加上页码跳转
- // 菜单,注意若要自动保留查询参数,则表单数据需要用
- // GET方法提交
- // 需求 : PHP4 ([url]http://www.php.net[/url])
- // Copyright(C), [url]www.cnfdc.com.cn[/url], 2005, All Rights Reserved.
- // 作者 : lonestone ([email]wangyong.yichang@gmail.com[/email])
- // --------------------------------------------------------------------------
- require_once( "Pager/Pager.php" );
- class myPager
- {
- var $pager;
- var $urlParms;
- var $pagesize;
-
- function myPager( $mode = "Sliding", $perPage = 10, $delta = 5, $totalItems = 0 ,$startPageSize=10,$numlinks=true)
- {
- $params = array( 'mode' => $mode,
- 'perPage' => $perPage,
- 'delta' => $delta,
- 'totalItems' => $totalItems,
- 'separator' => "",
- 'spacesBeforeSeparator' => 1,
- 'spacesAfterSeparator' => 1,
- 'altPrev' => '翻到上一页',
- 'altNext' => '翻到下一页',
- 'altPage' => "翻至该页",
- 'altFirst' => "翻到第一页",
- 'altLast' => "翻到最后一页",
- 'firstPageText' => "首页",
- 'lastPageText' => "末页",
- 'prevImg' => "上一页",
- 'nextImg' => "下一页",
- 'firstPagePre' => "",
- 'firstPagePost' => "",
- 'lastPagePre' => "",
- 'lastPagePost' => "",
- 'urlVar' => "page",
- 'expanded'=>$numlinks,
- );
- $this->pager = Pager::factory( $params );
- $this->urlParms = $this->ParseUrl() ;
- $this->pagesize = $startPageSize;
- return $this->pager;
- }
- function BuildJumpMenu()
- {
- $totalPageNum = $this->pager->numPages();
- $currentPage = $this->pager->getCurrentPageID();
- //echo($currentPage);
- $html = '跳至<select name="page" onchange="window.location.href=\'' . $this->urlParms . 'page=\'+this.value">';
- for( $i = 1;$i <= $totalPageNum;$i++ )
- {
- if ( $currentPage == $i )
- {
- $html .= '<option selected="selected" value="' . $i . '">' . $i . '</option>';
- }
- else
- {
- $html .= '<option value="' . $i . '">' . $i . '</option>';
- }
- }
- $html .= '</select>';
- return $html;
- }
- function getLinks()
- {
- $linksArray = $this->pager->getLinks();
- $links = "共" . $this->pager->numItems() . "项" . $this->pager->numPages() . "页 " . $linksArray['all'] . ' ' . $this->BuildJumpMenu() . " " . $this->getPerPageSelectBox();
- return $links;
- }
- function getPerPageSelectBox()
- {
- $html = '每页<select name="pagesize" onchange="window.location.href=\'' . str_replace('&pagesize='.$_GET['pagesize'],'',$this->urlParms) . 'pagesize=\'+this.value">';
- for( $i = 1;$i <= 10;$i++ )
- {
- if ( $_GET['pagesize'] == $i * $this->pagesize )
- {
- $html .= '<option selected="selected" value="' . $i * $this->pagesize . '">' . $i * $this->pagesize . '</option>';
- }
- else
- {
- $html .= '<option value="' . $i * $this->pagesize . '">' . $i * $this->pagesize . '</option>';
- }
- }
- $html .= '</select>';
- return $html;
- }
- /**
- * 处理URL参数
- */
- function ParseUrl()
- {
- $querystring = array();
- while ( list($key, $val) = each( $_GET ) )
- {
- if ( strtolower( $key ) != "page" )
- {
- $querystring[$key] = $val;
- }
- }
- while ( list($key, $val) = each( $_POST ) )
- {
- if ( strtolower( $key ) != "page" )
- {
- $querystring[$key] = $val;
- }
- }
- //print_r($querystring);
- $queryStr = $this->my_http_build_query( $querystring );
- if ( strlen( $queryStr ) > 0 )
- {
- $queryStr .= "&";
- }
- return basename( $_SERVER['PHP_SELF'] ) . "?" . $queryStr;
- }
- // http_build_query在php5才支持
- function my_http_build_query( $data )
- {
- $str = '';
- foreach( $data as $key => $value )
- {
- foreach( $this->child_str( $value ) as $v )
- {
- $str .= "$key$v&";
- }
- }
- return substr( $str, 0, strlen( $str )-1 );
- }
- function child_str( $data )
- {
- $str = array();
- if ( is_array( $data ) )
- {
- foreach( $data as $key => $value )
- {
- foreach( $this->child_str( $value ) as $v )
- {
- $str[] = "[$key]$v";
- }
- }
- }
- else
- {
- // do url encoding here
- $data = str_replace( '&', '%26', '=' . $data );
- $str[] = $data;
- }
- return $str;
- }
- };
- ?>
复制代码
需要你的php的include_path中有PEAR包的地址。然后开发时候,搜索条件最好采用GET方法提交,这样就可以自动传递参数了。
- //参数含义:翻页方式,页大小,显示几个数字链接(实际上为2倍+1个数字),总记录数,是否显示数字按钮
- $pager = new myPager("Sliding", $pageSize,0, $totalItem,30,false);
- $links = $pager->GetLinks();
复制代码
然后把$links赋值给模板就可以了
实际应用于 http://oldhouse.cnfdc.com.cn/commonlist.php,使用这个类,你就不必考虑参数传递问题了。
[ 本帖最后由 lonestone 于 2007-6-19 15:15 编辑 ] |
|