[置顶] 修正FLEA_Helper_Pager,让其支持source为sql时的多数据库操作
来源:互联网 发布:linux lvm配置文件 编辑:程序博客网 时间:2024/05/17 13:09
<?php/////////////////////////////////////////////////////////////////////////////// FleaPHP Framework//// Copyright (c) 2005 - 2008 QeeYuan China Inc. (http://www.qeeyuan.com)//// 许可协议,请查看源代码中附带的 LICENSE.txt 文件,// 或者访问 http://www.fleaphp.org/ 获得详细信息。//////////////////////////////////////////////////////////////////////////////** * 定义 FLEA_Helper_Pager 类 * * @copyright Copyright (c) 2005 - 2008 QeeYuan China Inc. (http://www.qeeyuan.com) * @author 起源科技 (www.qeeyuan.com) * @package Core * @version $Id: Pager.php 1016 2007-11-21 13:53:59Z qeeyuan $ *//** * FLEA_Helper_Pager 类提供数据查询分页功能 * * FLEA_Helper_Pager 使用很简单,只需要构造时传入 FLEA_Db_TableDataGateway 实例以及查询条件即可。 * * @package Core * @author 起源科技 (www.qeeyuan.com) * @version 1.0 */class FLEA_Helper_Pager{ /** * 如果 $this->source 是一个 FLEA_Db_TableDataGateway 对象,则调用 * $this->source->findAll() 来获取记录集。 * * 否则通过 $this->dbo->selectLimit() 来获取记录集。 * * @var FLEA_Db_TableDataGateway|string */ var $source; /** * 数据库访问对象,当 $this->source 参数为 SQL 语句时,必须调用 * $this->setDBO() 设置查询时要使用的数据库访问对象。 * * @var FLEA_Db_Driver_Abstract */ var $dbo; /** * 查询条件 * * @var mixed */ var $_conditions; /** * 排序 * * @var string */ var $_sortby; /** * 计算实际页码时的基数 * * @var int */ var $_basePageIndex = 0; /** * 每页记录数 * * @var int */ var $pageSize = -1; /** * 数据表中符合查询条件的记录总数 * * @var int */ var $totalCount = -1; /** * 数据表中符合查询条件的记录总数 * * @var int */ var $count = -1; /** * 符合条件的记录页数 * * @var int */ var $pageCount = -1; /** * 第一页的索引,从 0 开始 * * @var int */ var $firstPage = -1; /** * 第一页的页码 * * @var int */ var $firstPageNumber = -1; /** * 最后一页的索引,从 0 开始 * * @var int */ var $lastPage = -1; /** * 最后一页的页码 * * @var int */ var $lastPageNumber = -1; /** * 上一页的索引 * * @var int */ var $prevPage = -1; /** * 上一页的页码 * * @var int */ var $prevPageNumber = -1; /** * 下一页的索引 * * @var int */ var $nextPage = -1; /** * 下一页的页码 * * @var int */ var $nextPageNumber = -1; /** * 当前页的索引 * * @var int */ var $currentPage = -1; /** * 构造函数中提供的当前页索引,用于 setBasePageIndex() 后重新计算页码 * * @var int */ var $_currentPage = -1; /** * 当前页的页码 * * @var int */ var $currentPageNumber = -1; /** * 构造函数 * * 如果 $source 参数是一个 TableDataGateway 对象,则 FLEA_Helper_Pager 会调用 * 该 TDG 对象的 findCount() 和 findAll() 来确定记录总数并返回记录集。 * * 如果 $source 参数是一个字符串,则假定为 SQL 语句。这时,FLEA_Helper_Pager * 不会自动调用计算各项分页参数。必须通过 calcAllCount() 方法来设置作为分页计算 * 基础的记录总数。 * * 同时,如果 $source 参数为一个字符串,则不需要 $conditions 和 $sortby 参数。 * 而且可以通过 setDBO() 方法设置要使用的数据库访问对象。否则 FLEA_Helper_Pager * 将尝试获取一个默认的数据库访问对象。 * * @param TableDataGateway|string $source * @param int $currentPage * @param int $pageSize * @param mixed $conditions * @param string $sortby * @param int $basePageIndex * * @return FLEA_Helper_Pager */ function FLEA_Helper_Pager(& $source, $currentPage, $pageSize = 20, $conditions = null, $sortby = null, $basePageIndex = 0) { $this->_basePageIndex = $basePageIndex; $this->_currentPage = $this->currentPage = $currentPage; $this->pageSize = $pageSize; if (is_object($source)) { $this->source =& $source; $this->_conditions = $conditions; $this->_sortby = $sortby; $this->calcAllCount(); } elseif (!empty($source)) { $this->source = $source; } } /** * 设置分页索引第一页的基数 * * @param int $index */ function setBasePageIndex($index) { $this->_basePageIndex = $index; $this->currentPage = $this->_currentPage; $this->computingPage(); } /** * 设置当前页码,以便用 findAll() 获得其他页的数据 * * @param int $page */ function setPage($page) { $this->_currentPage = $page; $this->currentPage = $page; $this->computingPage(); } /** * 计算记录总数,从而更新分页参数 * */ function calcAllCount(){ if (is_object($this->source)){ $this->totalCount = $this->count = (int)$this->source->findCount($this->_conditions); $this->computingPage(); }elseif (!empty($this->source)) { $sql = "SELECT COUNT(*) FROM ( $this->source ) as _count_table"; if (is_null($this->dbo)) { $this->dbo =& FLEA::getDBO(false); } $this->totalCount = $this->count = (int)$this->dbo->getOne($sql); $this->computingPage(); } } /** * 设置数据库访问对象 * * @param FLEA_Db_Driver_Abstract $dbo */ function setDBO(& $dbo) { $this->dbo =& $dbo; } /** * 返回当前页对应的记录集 * * @param string $fields * @param boolean $queryLinks * * @return array */ function & findAll($fields = '*', $queryLinks = true) { if ($this->count == -1) { $this->count = 20; } $offset = ($this->currentPage - $this->_basePageIndex) * $this->pageSize; if (is_object($this->source)) { $limit = array($this->pageSize, $offset); $rowset = $this->source->findAll($this->_conditions, $this->_sortby, $limit, $fields, $queryLinks); } else { if (is_null($this->dbo)) { $this->dbo =& FLEA::getDBO(false); } $rs = $this->dbo->selectLimit($this->source, $this->pageSize, $offset); $rowset = $this->dbo->getAll($rs); } return $rowset; } /** * 返回分页信息,方便在模版中使用 * * @param boolean $returnPageNumbers * * @return array */ function getPagerData($returnPageNumbers = true) { $data = array( 'pageSize' => $this->pageSize, 'totalCount' => $this->totalCount, 'count' => $this->count, 'pageCount' => $this->pageCount, 'firstPage' => $this->firstPage, 'firstPageNumber' => $this->firstPageNumber, 'lastPage' => $this->lastPage, 'lastPageNumber' => $this->lastPageNumber, 'prevPage' => $this->prevPage, 'prevPageNumber' => $this->prevPageNumber, 'nextPage' => $this->nextPage, 'nextPageNumber' => $this->nextPageNumber, 'currentPage' => $this->currentPage, 'currentPageNumber' => $this->currentPageNumber, ); if ($returnPageNumbers) { $data['pagesNumber'] = array(); for ($i = 0; $i < $this->pageCount; $i++) { $data['pagesNumber'][$i] = $i + 1; } } return $data; } /** * 产生指定范围内的页面索引和页号 * * @param int $currentPage * @param int $navbarLen * * @return array */ function getNavbarIndexs($currentPage = 0, $navbarLen = 8) { $mid = intval($navbarLen / 2); if ($currentPage < $this->firstPage) { $currentPage = $this->firstPage; } if ($currentPage > $this->lastPage) { $currentPage = $this->lastPage; } $begin = $currentPage - $mid; if ($begin < $this->firstPage) { $begin = $this->firstPage; } $end = $begin + $navbarLen - 1; if ($end >= $this->lastPage) { $end = $this->lastPage; $begin = $end - $navbarLen + 1; if ($begin < $this->firstPage) { $begin = $this->firstPage; } } $data = array(); for ($i = $begin; $i <= $end; $i++) { $data[] = array('index' => $i, 'number' => ($i + 1 - $this->_basePageIndex)); } return $data; } /** * 生成一个页面选择跳转控件 * * @param string $caption * @param string $jsfunc */ function renderPageJumper($caption = '%u', $jsfunc = 'fnOnPageChanged') { $out = "<select name=\"PageJumper\" onchange=\"{$jsfunc}(this.value);\">\n"; for ($i = $this->firstPage; $i <= $this->lastPage; $i++) { $out .= "<option value=\"{$i}\""; if ($i == $this->currentPage) { $out .= " selected"; } $out .=">"; $out .= sprintf($caption, $i + 1 - $this->_basePageIndex); $out .= "</option>\n"; } $out .= "</select>\n"; echo $out; } /** * 计算各项分页参数 */ function computingPage() { $this->pageCount = ceil($this->count / $this->pageSize); $this->firstPage = $this->_basePageIndex; $this->lastPage = $this->pageCount + $this->_basePageIndex - 1; if ($this->lastPage < $this->firstPage) { $this->lastPage = $this->firstPage; } if ($this->lastPage < $this->_basePageIndex) { $this->lastPage = $this->_basePageIndex; } if ($this->currentPage >= $this->pageCount + $this->_basePageIndex) { $this->currentPage = $this->lastPage; } if ($this->currentPage < $this->_basePageIndex) { $this->currentPage = $this->firstPage; } if ($this->currentPage < $this->lastPage - 1) { $this->nextPage = $this->currentPage + 1; } else { $this->nextPage = $this->lastPage; } if ($this->currentPage > $this->_basePageIndex) { $this->prevPage = $this->currentPage - 1; } else { $this->prevPage = $this->_basePageIndex; } $this->firstPageNumber = $this->firstPage + 1 - $this->_basePageIndex; $this->lastPageNumber = $this->lastPage + 1 - $this->_basePageIndex; $this->nextPageNumber = $this->nextPage + 1 - $this->_basePageIndex; $this->prevPageNumber = $this->prevPage + 1 - $this->_basePageIndex; $this->currentPageNumber = $this->currentPage + 1 - $this->_basePageIndex; }}
<?phpclass Application extends FLEA_Controller_Action {/** * 后台首页 */ function actionIndex() {FLEA::loadHelper('pager');$sql = 'select * from nodes';$pager = & new FLEA_Helper_Pager($sql,1);$pager->calcAllCount();//$rows = & $pager->findAll();trace($pager);////FLEA::loadClass('Nodes');//$nodes = & new Nodes();//$pager = & new FLEA_Helper_Pager($nodes,1);//trace($pager); }}
0 0
- [置顶] 修正FLEA_Helper_Pager,让其支持source为sql时的多数据库操作
- 支持多数据库
- 多数据库支持的应用程序设计
- 多数据库支持的应用程序设计
- 多数据库支持的应用程序设计
- mybatis的多数据库支持
- 自己动手写ORM框架(二):AdoHelper支持多数据库操作的封装(1)
- 自己动手写ORM框架(二):AdoHelper支持多数据库操作的封装(2)
- 手把手教你:让EF动态支持新增表、动态支持多数据库
- 手把手教你:让EF动态支持新增表、动态支持多数据库
- Hibernate支持多数据库
- Mybatis多数据库支持
- 多数据库操作
- 让source insight更好的支持中文
- 让source insight更好的支持中文
- [置顶] 让FLEAPHP支持简易的命名空间
- [EF]让一个模型支持多数据库存储
- 【备用】非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等
- [置顶] 考考你们的JS 我只作对了一半 你们试试
- [置顶] 为自己的JS库 moogens 增加 简易矩形 组件 -- 改进版本
- EMPLOG到SLF4J日志框架切换
- Centos6.6部署Mysql+nginx+php环境
- java 开发设计 小游戏 英雄 怪物 武器 关键代码
- [置顶] 修正FLEA_Helper_Pager,让其支持source为sql时的多数据库操作
- 音乐播放记录查询
- [置顶] FLEAPHP 数据库查询 in 的用法
- mapreduce中的压缩
- [置顶] 自定义类自动加载类
- http接口请求参数签名工具类的实现和测试代码
- ListView中getView()的原理
- R 画图之ggplot(1)
- Web 开发工具类(5) | DateUtils