它山之石可以攻玉

键盘上的生活
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

fleaphp常用方法分页之Pager

Posted on 2011-04-23 12:07  陈达辉  阅读(655)  评论(0编辑  收藏  举报

Pager 分页函数

  1. /**  
  2.      * 构造函数  
  3.      *  
  4.      * 如果 $source 参数是一个 TableDataGateway 对象,则 FLEA_Helper_Pager 会调用  
  5.      * 该 TDG 对象的 findCount() 和 findAll() 来确定记录总数并返回记录集。  
  6.      *  
  7.      * 如果 $source 参数是一个字符串,则假定为 SQL 语句。这时,FLEA_Helper_Pager  
  8.      * 不会自动调用计算各项分页参数。必须通过 setCount() 方法来设置作为分页计算  
  9.      * 基础的记录总数。  
  10.      *  
  11.      * 同时,如果 $source 参数为一个字符串,则不需要 $conditions 和 $sortby 参数。  
  12.      * 而且可以通过 setDBO() 方法设置要使用的数据库访问对象。否则 FLEA_Helper_Pager  
  13.      * 将尝试获取一个默认的数据库访问对象。  
  14.      *  
  15.      * @param TableDataGateway|string $source  
  16.      * @param int $currentPage  
  17.      * @param int $pageSize  
  18.      * @param mixed $conditions  
  19.      * @param string $sortby  
  20.      * @param int $basePageIndex  
  21.      *  
  22.      * @return FLEA_Helper_Pager  
  23.      */  
  24. function FLEA_Helper_Pager(& $source$currentPage$pageSize = 20, $conditions = null, $sortby = null, $basePageIndex = 0)   
  25.     {   
  26.         $this->_basePageIndex = $basePageIndex;   
  27.         $this->_currentPage = $this->currentPage = $currentPage;   
  28.         $this->pageSize = $pageSize;   
  29.   
  30.         if (is_object($source)) {   
  31.             $this->source =& $source;   
  32.             $this->_conditions = $conditions;   
  33.             $this->_sortby = $sortby;   
  34.             $this->totalCount = $this->count = (int)$this->source->findCount($conditions);   
  35.             $this->computingPage();   
  36.         } elseif (!emptyempty($source)) {   
  37.             $this->source = $source;   
  38.             $sql = "SELECT COUNT(*) FROM ( $source ) as _count_table";   
  39.             $this->dbo =& FLEA::getDBO();   
  40.             $this->totalCount = $this->count = (int)$this->dbo->getOne($sql);   
  41.             $this->computingPage();   
  42.         }   
  43.     }  

Pager 参数说明
$source 数据库操作类
$currentPage 当前页
$pageSize 每页显示记录数量
$conditions 查询条件
$sortby 排序方式
$basePageIndex 页码基数

 

实例:

 

  1. $dirname = dirname(__FILE__);   
  2. define('APP_DIR'$dirname . '/APP');   
  3. define('NO_LEGACY_FLEAPHP', true);   
  4. require($dirname.'/FleaPHP/FLEA/FLEA.php');   
  5.   
  6. //设置缓存目录   
  7. FLEA::setAppInf('internalCacheDir',$dirname.'/_Cache');   
  8.   
  9. //链接数据库   
  10.   
  11. $dsn = array(   
  12.         'driver'    => 'mysql',   
  13.         'host'      => 'localhost',   
  14.         'login'     => 'root',   
  15.         'password'  => '',   
  16.         'database'  => 'wordpress'  
  17. );   
  18.   
  19. FLEA::setAppInf('dbDSN',$dsn);   
  20.   
  21. //读取wp_posts的内容   
  22. FLEA::loadClass('FLEA_Db_TableDataGateway');   
  23. FLEA::loadClass('FLEA_Helper_Pager');
  24. $page_size='10';       //每页记录数
       $page = (isset($_GET['page']))?(int)$_GET['page']:1;
       $conditions = array(
        'ss_state'=>0,
       );
       $pager = new FLEA_Helper_Pager($this->_shuoshuo,$page,$page_size,$conditions,'created DESC',1);
       $rows =$pager->findAll();
       $pager->setBasePageIndex(1);  // 起始页码设为1
       $this->smarty->assign('rowset',$rows);
       $this->smarty->assign('newsNavbar', $pager->getNavbarIndexs($page, 8));
       $this->smarty->assign('newsPager', $pager->getPagerData());
       $url = array('ctl'=>'default','act'=>'helpinfo&act=shuoshuo');
       $this->smarty->assign('url',$url);

 

<a href="{{url controller=$url.ctl action=$url.act page=$newsPager.firstPageNumber}}" title='首页'><<</a>{{section name=page loop=$newsNavbar}}{{if $newsNavbar[page].index == $newsPager.currentPage}}<b><font color='red'>[{{$newsNavbar[page].number}}]</font></b>{{else}}<a href="{{url controller=$url.ctl action=$url.act page=$newsNavbar[page].index}}">{{$newsNavbar[page].number}}</a>{{/if}}{{/section}}<a href="{{url controller=$url.ctl action=$url.act page=$newsPager.lastPageNumber}}" title='末页'>>></a><!--    共有 <font color="Red">{{$newsPager.count}}</font> 条记录,分为 <font color="Red">{{$newsPager.pageCount}}</font> 页显示,每页 <font color="Red">{{$newsPager.pageSize}}</font> 条-->