PEAR

    技术2022-05-11  232

    索引

    1. 前言 2. 安装 3. 简单实例 4. 应用案例 5. 参数摘要 6. 方法摘要 7. 后记 8. 参考资料

    1. 前言

    本文中,Hick 先介绍一下 PEAR 的 Pager 包。然后谈谈分页的思路,再结合实际运用,最后对它的部分方法和属性作一下介绍。

    顺便提一下, Smarty 也有分页插件,比如 Smarty Pager ,看了一下,感觉在把简单的问题搞复杂化。

    [声明] 转载请保留原文信息:

    作者: hick<hick@163.com> 出处: http://www.hickwu.com/doc/pearPager.htm

    2. 安装

    如果已经安装好 PEAR 环境,常规的安装 PEAR 包的方法就可以安装最新版本:

    php5>pear install Pager

    之所以单独说一下安装,其实是想说 Pager 包可以单独使用,直接到官方下载到压缩包,解压缩到某目录, 并把目录名修改为 Pager, 最后把其父目录添加到 inlcude_path 中即可。

    注意:由于 linux 等环境下区分大小写,不要修改目录以及文件名等。

    3. 简单实例

    通常以静态方法 factory 创建 Pager 类的实例。创建实例时,需要以数组的形式传递参数,每个数组的元素是一个参数。默认情况下必须有一个参数: itemData 或者 totalItems,参见下面的实例::

    require_once("Pager/Pager.php"); // 参数数组 $params = array( // 分页模式,有两种显示模式,Jumping 和 Sliding 'mode' => 'Jumping', // 每页记录数 'perPage' => 3, // Jumping 模式下为可选页数,Sliding 模式下为当前页前后可选页数 'delta' => 5, 'itemData' => array( 'record01', 'record02', 'record03', 'record04', 'record05', 'record06', 'record07', 'record08', 'record09', 'record10', 'record11', 'record12', 'record13', 'record14', 'record15', 'record15', 'record15', 'record16' ) ); // 创建 Pager 对象 $pager = Pager::factory($params); // 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等 $links = $pager->getLinks(); echo $links['all'];

    其中 itemData 元素是要分页的数据,通常它也是一个多元数组。其他参数请参考 官方参考文档

    4. 应用案例

    通过上面的 简单实例 的学习,会有这么一个想法:使用 PEAR Pager 来对一个新闻列表分页,可以把所有新闻的基本信息保存成一个二维数组作为 itemData ,其实还可以把新闻总数作为 totalItems 传递。考虑到当前页一般只需要显示若干条新闻,而不是全部,所以能够只查询出当前页需要显示的若干条当然更高效率。

    这里顺便说一下两种分页的思路,一种是从数据库查询出所有记录,然后选择当前需要显示的若干记录;另外一种就是先算出当前页需要显示的记录范围,结合 mysql 的 limit 或者其他数据库的类似语法,查询出当前需要显示的若干记录。看上去后者比较快,但是从数据库查询的角度来说,实现后一种方法往往需要进行两次查询数据库,第一次查询总的记录数,第二次查询需要的若干条记录。第一种查询方法在处理记录数多时,会比较耗资源。一般来说,考虑到数据量的增加,用第二种方法会比较好。对查询两次数据库的劣势,可以通过在 URL 传递记录总数进行一定程度上的弥补(数据库记录变动快时不太好)。

    下面介绍一下应用 PEAR Pager 于使用了 Smarty (其实跟 Smarty 也没什么关系,嘿嘿)的系统中的方法:

    在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。 根据新闻总数以及 URL 传递过来的当前页等确定分页器的相关参数。

    下面的使用比较原始,还可以进一步对 Pager 进行封装::

    // 获得总的新闻数 $totalItems =

    索引

    1. 前言 2. 安装 3. 简单实例 4. 应用案例 5. 参数摘要 6. 方法摘要 7. 后记 8. 参考资料

    1. 前言

    本文中,Hick 先介绍一下 PEAR 的 Pager 包。然后谈谈分页的思路,再结合实际运用,最后对它的部分方法和属性作一下介绍。

    顺便提一下, Smarty 也有分页插件,比如 Smarty Pager ,看了一下,感觉在把简单的问题搞复杂化。

    [声明] 转载请保留原文信息:

    作者: hick<hick@163.com> 出处: http://www.hickwu.com/doc/pearPager.htm

    2. 安装

    如果已经安装好 PEAR 环境,常规的安装 PEAR 包的方法就可以安装最新版本:

    php5>pear install Pager

    之所以单独说一下安装,其实是想说 Pager 包可以单独使用,直接到官方下载到压缩包,解压缩到某目录, 并把目录名修改为 Pager, 最后把其父目录添加到 inlcude_path 中即可。

    注意:由于 linux 等环境下区分大小写,不要修改目录以及文件名等。

    3. 简单实例

    通常以静态方法 factory 创建 Pager 类的实例。创建实例时,需要以数组的形式传递参数,每个数组的元素是一个参数。默认情况下必须有一个参数: itemData 或者 totalItems,参见下面的实例::

    require_once("Pager/Pager.php"); // 参数数组 $params = array( // 分页模式,有两种显示模式,Jumping 和 Sliding 'mode' => 'Jumping', // 每页记录数 'perPage' => 3, // Jumping 模式下为可选页数,Sliding 模式下为当前页前后可选页数 'delta' => 5, 'itemData' => array( 'record01', 'record02', 'record03', 'record04', 'record05', 'record06', 'record07', 'record08', 'record09', 'record10', 'record11', 'record12', 'record13', 'record14', 'record15', 'record15', 'record15', 'record16' ) ); // 创建 Pager 对象 $pager = Pager::factory($params); // 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等 $links = $pager->getLinks(); echo $links['all'];

    其中 itemData 元素是要分页的数据,通常它也是一个多元数组。其他参数请参考 官方参考文档

    4. 应用案例

    通过上面的 简单实例 的学习,会有这么一个想法:使用 PEAR Pager 来对一个新闻列表分页,可以把所有新闻的基本信息保存成一个二维数组作为 itemData ,其实还可以把新闻总数作为 totalItems 传递。考虑到当前页一般只需要显示若干条新闻,而不是全部,所以能够只查询出当前页需要显示的若干条当然更高效率。

    这里顺便说一下两种分页的思路,一种是从数据库查询出所有记录,然后选择当前需要显示的若干记录;另外一种就是先算出当前页需要显示的记录范围,结合 mysql 的 limit 或者其他数据库的类似语法,查询出当前需要显示的若干记录。看上去后者比较快,但是从数据库查询的角度来说,实现后一种方法往往需要进行两次查询数据库,第一次查询总的记录数,第二次查询需要的若干条记录。第一种查询方法在处理记录数多时,会比较耗资源。一般来说,考虑到数据量的增加,用第二种方法会比较好。对查询两次数据库的劣势,可以通过在 URL 传递记录总数进行一定程度上的弥补(数据库记录变动快时不太好)。

    下面介绍一下应用 PEAR Pager 于使用了 Smarty (其实跟 Smarty 也没什么关系,嘿嘿)的系统中的方法:

    在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。 根据新闻总数以及 URL 传递过来的当前页等确定分页器的相关参数。

    下面的使用比较原始,还可以进一步对 Pager 进行封装::

    ___FCKpd___2

    注意:以上代码修改自 Hick 在项目中实际应用的代码,跟 Hick 在实际运用中有些不同。

    5. 参数摘要

    这里说的参数主要是 Pager::factory 的参数,该函数的参数至少是 itemData 和 totalItem 中的一个。append 参数( 默认为 true)为 false 时,还需要指定 fileName 参数。

    itemData 用来分页的数据记录数组 totalItems 用来分页的记录总数 perPage 每页显示的记录数 delta 分页器当前页的前后显示的分页链接数 mode Jumping 和 Sliding 两中分页样式 httpMethod 允许 GET 和 POST 方式传递分页相关信息 currentPage 默认载入的页 linkClass 分页链接的 css 样式 separator 分页器之间的分隔符 spacesBeforeSeparator 和 spacesAfterSeparator 分隔符号前后的空格数 curPageLinkClassName 当前页的 css 样式名 useSessions 如果设置为 true ,则在 session 中保存每页显示的记录数

    6. 方法摘要

    Pager::factory() 创建一个分页器实例 Pager::getCurrentPageID() 当前页编号 Pager::getLinks 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等的数组 Pager::getNextPageID 下一页编号 Pager::getOffsetByPageId() Returns offsets for given pageID. Pager::getPageData() 以数组形式返回当前页的记录 Pager::getPageIdByOffset() Returns the page number for the given offset Pager::getPageRangeByPageId() Returns offsets for given pageID. Pager::getPreviousPageID() 返回前一页编号 Pager::getperpageselectbox() Returns a string with a XHTML SELECT menu, to choose how many items per page should be displayed. Pager::isFirstPage() 当前页是否第一页 Pager::isLastPage() 当前页是否最后一页 Pager::isLastPageComplete() 最后一页是否完整(complete) Pager::numItems() 总共的记录数 Pager::numPages() 返回总共的页数 Pager::Pager() 同 factory

    7. 后记

    我喜欢总结自己的学习并整理成文档. 开始也只是想把自己学习 PEAR Pager 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

    8. 参考资料

    8.1. 官方网站

    http://pear.php.net/package/Pager

    8.2. PEAR探奇之PEAR::Pager

    http://blog.csdn.net/haohappy2004/archive/2005/09/30/492857.aspx

    http://blog.csdn.net/haohappy2004/archive/2005/10/02/493922.aspx

    8.3. 官方参考文档

    http://pear.php.net/manual/en/package.html.pager.php

    8.4. Smarty Pager

    http://smarty.php.net/contribs/plugins/view.php/function.pager.php

      GET['totalItems']; // 每页显示的新闻数 $pageSize = 10; // 当前页编号 $pageID = empty(

    索引

    1. 前言 2. 安装 3. 简单实例 4. 应用案例 5. 参数摘要 6. 方法摘要 7. 后记 8. 参考资料

    1. 前言

    本文中,Hick 先介绍一下 PEAR 的 Pager 包。然后谈谈分页的思路,再结合实际运用,最后对它的部分方法和属性作一下介绍。

    顺便提一下, Smarty 也有分页插件,比如 Smarty Pager ,看了一下,感觉在把简单的问题搞复杂化。

    [声明] 转载请保留原文信息:

    作者: hick<hick@163.com> 出处: http://www.hickwu.com/doc/pearPager.htm

    2. 安装

    如果已经安装好 PEAR 环境,常规的安装 PEAR 包的方法就可以安装最新版本:

    php5>pear install Pager

    之所以单独说一下安装,其实是想说 Pager 包可以单独使用,直接到官方下载到压缩包,解压缩到某目录, 并把目录名修改为 Pager, 最后把其父目录添加到 inlcude_path 中即可。

    注意:由于 linux 等环境下区分大小写,不要修改目录以及文件名等。

    3. 简单实例

    通常以静态方法 factory 创建 Pager 类的实例。创建实例时,需要以数组的形式传递参数,每个数组的元素是一个参数。默认情况下必须有一个参数: itemData 或者 totalItems,参见下面的实例::

    require_once("Pager/Pager.php"); // 参数数组 $params = array( // 分页模式,有两种显示模式,Jumping 和 Sliding 'mode' => 'Jumping', // 每页记录数 'perPage' => 3, // Jumping 模式下为可选页数,Sliding 模式下为当前页前后可选页数 'delta' => 5, 'itemData' => array( 'record01', 'record02', 'record03', 'record04', 'record05', 'record06', 'record07', 'record08', 'record09', 'record10', 'record11', 'record12', 'record13', 'record14', 'record15', 'record15', 'record15', 'record16' ) ); // 创建 Pager 对象 $pager = Pager::factory($params); // 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等 $links = $pager->getLinks(); echo $links['all'];

    其中 itemData 元素是要分页的数据,通常它也是一个多元数组。其他参数请参考 官方参考文档

    4. 应用案例

    通过上面的 简单实例 的学习,会有这么一个想法:使用 PEAR Pager 来对一个新闻列表分页,可以把所有新闻的基本信息保存成一个二维数组作为 itemData ,其实还可以把新闻总数作为 totalItems 传递。考虑到当前页一般只需要显示若干条新闻,而不是全部,所以能够只查询出当前页需要显示的若干条当然更高效率。

    这里顺便说一下两种分页的思路,一种是从数据库查询出所有记录,然后选择当前需要显示的若干记录;另外一种就是先算出当前页需要显示的记录范围,结合 mysql 的 limit 或者其他数据库的类似语法,查询出当前需要显示的若干记录。看上去后者比较快,但是从数据库查询的角度来说,实现后一种方法往往需要进行两次查询数据库,第一次查询总的记录数,第二次查询需要的若干条记录。第一种查询方法在处理记录数多时,会比较耗资源。一般来说,考虑到数据量的增加,用第二种方法会比较好。对查询两次数据库的劣势,可以通过在 URL 传递记录总数进行一定程度上的弥补(数据库记录变动快时不太好)。

    下面介绍一下应用 PEAR Pager 于使用了 Smarty (其实跟 Smarty 也没什么关系,嘿嘿)的系统中的方法:

    在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。 根据新闻总数以及 URL 传递过来的当前页等确定分页器的相关参数。

    下面的使用比较原始,还可以进一步对 Pager 进行封装::

    ___FCKpd___2

    注意:以上代码修改自 Hick 在项目中实际应用的代码,跟 Hick 在实际运用中有些不同。

    5. 参数摘要

    这里说的参数主要是 Pager::factory 的参数,该函数的参数至少是 itemData 和 totalItem 中的一个。append 参数( 默认为 true)为 false 时,还需要指定 fileName 参数。

    itemData 用来分页的数据记录数组 totalItems 用来分页的记录总数 perPage 每页显示的记录数 delta 分页器当前页的前后显示的分页链接数 mode Jumping 和 Sliding 两中分页样式 httpMethod 允许 GET 和 POST 方式传递分页相关信息 currentPage 默认载入的页 linkClass 分页链接的 css 样式 separator 分页器之间的分隔符 spacesBeforeSeparator 和 spacesAfterSeparator 分隔符号前后的空格数 curPageLinkClassName 当前页的 css 样式名 useSessions 如果设置为 true ,则在 session 中保存每页显示的记录数

    6. 方法摘要

    Pager::factory() 创建一个分页器实例 Pager::getCurrentPageID() 当前页编号 Pager::getLinks 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等的数组 Pager::getNextPageID 下一页编号 Pager::getOffsetByPageId() Returns offsets for given pageID. Pager::getPageData() 以数组形式返回当前页的记录 Pager::getPageIdByOffset() Returns the page number for the given offset Pager::getPageRangeByPageId() Returns offsets for given pageID. Pager::getPreviousPageID() 返回前一页编号 Pager::getperpageselectbox() Returns a string with a XHTML SELECT menu, to choose how many items per page should be displayed. Pager::isFirstPage() 当前页是否第一页 Pager::isLastPage() 当前页是否最后一页 Pager::isLastPageComplete() 最后一页是否完整(complete) Pager::numItems() 总共的记录数 Pager::numPages() 返回总共的页数 Pager::Pager() 同 factory

    7. 后记

    我喜欢总结自己的学习并整理成文档. 开始也只是想把自己学习 PEAR Pager 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

    8. 参考资料

    8.1. 官方网站

    http://pear.php.net/package/Pager

    8.2. PEAR探奇之PEAR::Pager

    http://blog.csdn.net/haohappy2004/archive/2005/09/30/492857.aspx

    http://blog.csdn.net/haohappy2004/archive/2005/10/02/493922.aspx

    8.3. 官方参考文档

    http://pear.php.net/manual/en/package.html.pager.php

    8.4. Smarty Pager

    http://smarty.php.net/contribs/plugins/view.php/function.pager.php

      GET['pageID']) ? 1 :

    索引

    1. 前言 2. 安装 3. 简单实例 4. 应用案例 5. 参数摘要 6. 方法摘要 7. 后记 8. 参考资料

    1. 前言

    本文中,Hick 先介绍一下 PEAR 的 Pager 包。然后谈谈分页的思路,再结合实际运用,最后对它的部分方法和属性作一下介绍。

    顺便提一下, Smarty 也有分页插件,比如 Smarty Pager ,看了一下,感觉在把简单的问题搞复杂化。

    [声明] 转载请保留原文信息:

    作者: hick<hick@163.com> 出处: http://www.hickwu.com/doc/pearPager.htm

    2. 安装

    如果已经安装好 PEAR 环境,常规的安装 PEAR 包的方法就可以安装最新版本:

    php5>pear install Pager

    之所以单独说一下安装,其实是想说 Pager 包可以单独使用,直接到官方下载到压缩包,解压缩到某目录, 并把目录名修改为 Pager, 最后把其父目录添加到 inlcude_path 中即可。

    注意:由于 linux 等环境下区分大小写,不要修改目录以及文件名等。

    3. 简单实例

    通常以静态方法 factory 创建 Pager 类的实例。创建实例时,需要以数组的形式传递参数,每个数组的元素是一个参数。默认情况下必须有一个参数: itemData 或者 totalItems,参见下面的实例::

    require_once("Pager/Pager.php"); // 参数数组 $params = array( // 分页模式,有两种显示模式,Jumping 和 Sliding 'mode' => 'Jumping', // 每页记录数 'perPage' => 3, // Jumping 模式下为可选页数,Sliding 模式下为当前页前后可选页数 'delta' => 5, 'itemData' => array( 'record01', 'record02', 'record03', 'record04', 'record05', 'record06', 'record07', 'record08', 'record09', 'record10', 'record11', 'record12', 'record13', 'record14', 'record15', 'record15', 'record15', 'record16' ) ); // 创建 Pager 对象 $pager = Pager::factory($params); // 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等 $links = $pager->getLinks(); echo $links['all'];

    其中 itemData 元素是要分页的数据,通常它也是一个多元数组。其他参数请参考 官方参考文档

    4. 应用案例

    通过上面的 简单实例 的学习,会有这么一个想法:使用 PEAR Pager 来对一个新闻列表分页,可以把所有新闻的基本信息保存成一个二维数组作为 itemData ,其实还可以把新闻总数作为 totalItems 传递。考虑到当前页一般只需要显示若干条新闻,而不是全部,所以能够只查询出当前页需要显示的若干条当然更高效率。

    这里顺便说一下两种分页的思路,一种是从数据库查询出所有记录,然后选择当前需要显示的若干记录;另外一种就是先算出当前页需要显示的记录范围,结合 mysql 的 limit 或者其他数据库的类似语法,查询出当前需要显示的若干记录。看上去后者比较快,但是从数据库查询的角度来说,实现后一种方法往往需要进行两次查询数据库,第一次查询总的记录数,第二次查询需要的若干条记录。第一种查询方法在处理记录数多时,会比较耗资源。一般来说,考虑到数据量的增加,用第二种方法会比较好。对查询两次数据库的劣势,可以通过在 URL 传递记录总数进行一定程度上的弥补(数据库记录变动快时不太好)。

    下面介绍一下应用 PEAR Pager 于使用了 Smarty (其实跟 Smarty 也没什么关系,嘿嘿)的系统中的方法:

    在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。 根据新闻总数以及 URL 传递过来的当前页等确定分页器的相关参数。

    下面的使用比较原始,还可以进一步对 Pager 进行封装::

    ___FCKpd___2

    注意:以上代码修改自 Hick 在项目中实际应用的代码,跟 Hick 在实际运用中有些不同。

    5. 参数摘要

    这里说的参数主要是 Pager::factory 的参数,该函数的参数至少是 itemData 和 totalItem 中的一个。append 参数( 默认为 true)为 false 时,还需要指定 fileName 参数。

    itemData 用来分页的数据记录数组 totalItems 用来分页的记录总数 perPage 每页显示的记录数 delta 分页器当前页的前后显示的分页链接数 mode Jumping 和 Sliding 两中分页样式 httpMethod 允许 GET 和 POST 方式传递分页相关信息 currentPage 默认载入的页 linkClass 分页链接的 css 样式 separator 分页器之间的分隔符 spacesBeforeSeparator 和 spacesAfterSeparator 分隔符号前后的空格数 curPageLinkClassName 当前页的 css 样式名 useSessions 如果设置为 true ,则在 session 中保存每页显示的记录数

    6. 方法摘要

    Pager::factory() 创建一个分页器实例 Pager::getCurrentPageID() 当前页编号 Pager::getLinks 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等的数组 Pager::getNextPageID 下一页编号 Pager::getOffsetByPageId() Returns offsets for given pageID. Pager::getPageData() 以数组形式返回当前页的记录 Pager::getPageIdByOffset() Returns the page number for the given offset Pager::getPageRangeByPageId() Returns offsets for given pageID. Pager::getPreviousPageID() 返回前一页编号 Pager::getperpageselectbox() Returns a string with a XHTML SELECT menu, to choose how many items per page should be displayed. Pager::isFirstPage() 当前页是否第一页 Pager::isLastPage() 当前页是否最后一页 Pager::isLastPageComplete() 最后一页是否完整(complete) Pager::numItems() 总共的记录数 Pager::numPages() 返回总共的页数 Pager::Pager() 同 factory

    7. 后记

    我喜欢总结自己的学习并整理成文档. 开始也只是想把自己学习 PEAR Pager 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

    8. 参考资料

    8.1. 官方网站

    http://pear.php.net/package/Pager

    8.2. PEAR探奇之PEAR::Pager

    http://blog.csdn.net/haohappy2004/archive/2005/09/30/492857.aspx

    http://blog.csdn.net/haohappy2004/archive/2005/10/02/493922.aspx

    8.3. 官方参考文档

    http://pear.php.net/manual/en/package.html.pager.php

    8.4. Smarty Pager

    http://smarty.php.net/contribs/plugins/view.php/function.pager.php

      GET['pageID']; // limit 子句 $limit = ($pageID - 1) * $pageSize . ", $pageSize"; // 获得新闻列表 $newsList = $news->get_list('latest', $limit, $totalItems); // 再对

    索引

    1. 前言 2. 安装 3. 简单实例 4. 应用案例 5. 参数摘要 6. 方法摘要 7. 后记 8. 参考资料

    1. 前言

    本文中,Hick 先介绍一下 PEAR 的 Pager 包。然后谈谈分页的思路,再结合实际运用,最后对它的部分方法和属性作一下介绍。

    顺便提一下, Smarty 也有分页插件,比如 Smarty Pager ,看了一下,感觉在把简单的问题搞复杂化。

    [声明] 转载请保留原文信息:

    作者: hick<hick@163.com> 出处: http://www.hickwu.com/doc/pearPager.htm

    2. 安装

    如果已经安装好 PEAR 环境,常规的安装 PEAR 包的方法就可以安装最新版本:

    php5>pear install Pager

    之所以单独说一下安装,其实是想说 Pager 包可以单独使用,直接到官方下载到压缩包,解压缩到某目录, 并把目录名修改为 Pager, 最后把其父目录添加到 inlcude_path 中即可。

    注意:由于 linux 等环境下区分大小写,不要修改目录以及文件名等。

    3. 简单实例

    通常以静态方法 factory 创建 Pager 类的实例。创建实例时,需要以数组的形式传递参数,每个数组的元素是一个参数。默认情况下必须有一个参数: itemData 或者 totalItems,参见下面的实例::

    require_once("Pager/Pager.php"); // 参数数组 $params = array( // 分页模式,有两种显示模式,Jumping 和 Sliding 'mode' => 'Jumping', // 每页记录数 'perPage' => 3, // Jumping 模式下为可选页数,Sliding 模式下为当前页前后可选页数 'delta' => 5, 'itemData' => array( 'record01', 'record02', 'record03', 'record04', 'record05', 'record06', 'record07', 'record08', 'record09', 'record10', 'record11', 'record12', 'record13', 'record14', 'record15', 'record15', 'record15', 'record16' ) ); // 创建 Pager 对象 $pager = Pager::factory($params); // 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等 $links = $pager->getLinks(); echo $links['all'];

    其中 itemData 元素是要分页的数据,通常它也是一个多元数组。其他参数请参考 官方参考文档

    4. 应用案例

    通过上面的 简单实例 的学习,会有这么一个想法:使用 PEAR Pager 来对一个新闻列表分页,可以把所有新闻的基本信息保存成一个二维数组作为 itemData ,其实还可以把新闻总数作为 totalItems 传递。考虑到当前页一般只需要显示若干条新闻,而不是全部,所以能够只查询出当前页需要显示的若干条当然更高效率。

    这里顺便说一下两种分页的思路,一种是从数据库查询出所有记录,然后选择当前需要显示的若干记录;另外一种就是先算出当前页需要显示的记录范围,结合 mysql 的 limit 或者其他数据库的类似语法,查询出当前需要显示的若干记录。看上去后者比较快,但是从数据库查询的角度来说,实现后一种方法往往需要进行两次查询数据库,第一次查询总的记录数,第二次查询需要的若干条记录。第一种查询方法在处理记录数多时,会比较耗资源。一般来说,考虑到数据量的增加,用第二种方法会比较好。对查询两次数据库的劣势,可以通过在 URL 传递记录总数进行一定程度上的弥补(数据库记录变动快时不太好)。

    下面介绍一下应用 PEAR Pager 于使用了 Smarty (其实跟 Smarty 也没什么关系,嘿嘿)的系统中的方法:

    在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。 根据新闻总数以及 URL 传递过来的当前页等确定分页器的相关参数。

    下面的使用比较原始,还可以进一步对 Pager 进行封装::

    ___FCKpd___2

    注意:以上代码修改自 Hick 在项目中实际应用的代码,跟 Hick 在实际运用中有些不同。

    5. 参数摘要

    这里说的参数主要是 Pager::factory 的参数,该函数的参数至少是 itemData 和 totalItem 中的一个。append 参数( 默认为 true)为 false 时,还需要指定 fileName 参数。

    itemData 用来分页的数据记录数组 totalItems 用来分页的记录总数 perPage 每页显示的记录数 delta 分页器当前页的前后显示的分页链接数 mode Jumping 和 Sliding 两中分页样式 httpMethod 允许 GET 和 POST 方式传递分页相关信息 currentPage 默认载入的页 linkClass 分页链接的 css 样式 separator 分页器之间的分隔符 spacesBeforeSeparator 和 spacesAfterSeparator 分隔符号前后的空格数 curPageLinkClassName 当前页的 css 样式名 useSessions 如果设置为 true ,则在 session 中保存每页显示的记录数

    6. 方法摘要

    Pager::factory() 创建一个分页器实例 Pager::getCurrentPageID() 当前页编号 Pager::getLinks 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等的数组 Pager::getNextPageID 下一页编号 Pager::getOffsetByPageId() Returns offsets for given pageID. Pager::getPageData() 以数组形式返回当前页的记录 Pager::getPageIdByOffset() Returns the page number for the given offset Pager::getPageRangeByPageId() Returns offsets for given pageID. Pager::getPreviousPageID() 返回前一页编号 Pager::getperpageselectbox() Returns a string with a XHTML SELECT menu, to choose how many items per page should be displayed. Pager::isFirstPage() 当前页是否第一页 Pager::isLastPage() 当前页是否最后一页 Pager::isLastPageComplete() 最后一页是否完整(complete) Pager::numItems() 总共的记录数 Pager::numPages() 返回总共的页数 Pager::Pager() 同 factory

    7. 后记

    我喜欢总结自己的学习并整理成文档. 开始也只是想把自己学习 PEAR Pager 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

    8. 参考资料

    8.1. 官方网站

    http://pear.php.net/package/Pager

    8.2. PEAR探奇之PEAR::Pager

    http://blog.csdn.net/haohappy2004/archive/2005/09/30/492857.aspx

    http://blog.csdn.net/haohappy2004/archive/2005/10/02/493922.aspx

    8.3. 官方参考文档

    http://pear.php.net/manual/en/package.html.pager.php

    8.4. Smarty Pager

    http://smarty.php.net/contribs/plugins/view.php/function.pager.php

      GET['totalItems']赋值,也是Pager自定义URL GET参数的方法

    索引

    1. 前言 2. 安装 3. 简单实例 4. 应用案例 5. 参数摘要 6. 方法摘要 7. 后记 8. 参考资料

    1. 前言

    本文中,Hick 先介绍一下 PEAR 的 Pager 包。然后谈谈分页的思路,再结合实际运用,最后对它的部分方法和属性作一下介绍。

    顺便提一下, Smarty 也有分页插件,比如 Smarty Pager ,看了一下,感觉在把简单的问题搞复杂化。

    [声明] 转载请保留原文信息:

    作者: hick<hick@163.com> 出处: http://www.hickwu.com/doc/pearPager.htm

    2. 安装

    如果已经安装好 PEAR 环境,常规的安装 PEAR 包的方法就可以安装最新版本:

    php5>pear install Pager

    之所以单独说一下安装,其实是想说 Pager 包可以单独使用,直接到官方下载到压缩包,解压缩到某目录, 并把目录名修改为 Pager, 最后把其父目录添加到 inlcude_path 中即可。

    注意:由于 linux 等环境下区分大小写,不要修改目录以及文件名等。

    3. 简单实例

    通常以静态方法 factory 创建 Pager 类的实例。创建实例时,需要以数组的形式传递参数,每个数组的元素是一个参数。默认情况下必须有一个参数: itemData 或者 totalItems,参见下面的实例::

    require_once("Pager/Pager.php"); // 参数数组 $params = array( // 分页模式,有两种显示模式,Jumping 和 Sliding 'mode' => 'Jumping', // 每页记录数 'perPage' => 3, // Jumping 模式下为可选页数,Sliding 模式下为当前页前后可选页数 'delta' => 5, 'itemData' => array( 'record01', 'record02', 'record03', 'record04', 'record05', 'record06', 'record07', 'record08', 'record09', 'record10', 'record11', 'record12', 'record13', 'record14', 'record15', 'record15', 'record15', 'record16' ) ); // 创建 Pager 对象 $pager = Pager::factory($params); // 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等 $links = $pager->getLinks(); echo $links['all'];

    其中 itemData 元素是要分页的数据,通常它也是一个多元数组。其他参数请参考 官方参考文档

    4. 应用案例

    通过上面的 简单实例 的学习,会有这么一个想法:使用 PEAR Pager 来对一个新闻列表分页,可以把所有新闻的基本信息保存成一个二维数组作为 itemData ,其实还可以把新闻总数作为 totalItems 传递。考虑到当前页一般只需要显示若干条新闻,而不是全部,所以能够只查询出当前页需要显示的若干条当然更高效率。

    这里顺便说一下两种分页的思路,一种是从数据库查询出所有记录,然后选择当前需要显示的若干记录;另外一种就是先算出当前页需要显示的记录范围,结合 mysql 的 limit 或者其他数据库的类似语法,查询出当前需要显示的若干记录。看上去后者比较快,但是从数据库查询的角度来说,实现后一种方法往往需要进行两次查询数据库,第一次查询总的记录数,第二次查询需要的若干条记录。第一种查询方法在处理记录数多时,会比较耗资源。一般来说,考虑到数据量的增加,用第二种方法会比较好。对查询两次数据库的劣势,可以通过在 URL 传递记录总数进行一定程度上的弥补(数据库记录变动快时不太好)。

    下面介绍一下应用 PEAR Pager 于使用了 Smarty (其实跟 Smarty 也没什么关系,嘿嘿)的系统中的方法:

    在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。 根据新闻总数以及 URL 传递过来的当前页等确定分页器的相关参数。

    下面的使用比较原始,还可以进一步对 Pager 进行封装::

    ___FCKpd___2

    注意:以上代码修改自 Hick 在项目中实际应用的代码,跟 Hick 在实际运用中有些不同。

    5. 参数摘要

    这里说的参数主要是 Pager::factory 的参数,该函数的参数至少是 itemData 和 totalItem 中的一个。append 参数( 默认为 true)为 false 时,还需要指定 fileName 参数。

    itemData 用来分页的数据记录数组 totalItems 用来分页的记录总数 perPage 每页显示的记录数 delta 分页器当前页的前后显示的分页链接数 mode Jumping 和 Sliding 两中分页样式 httpMethod 允许 GET 和 POST 方式传递分页相关信息 currentPage 默认载入的页 linkClass 分页链接的 css 样式 separator 分页器之间的分隔符 spacesBeforeSeparator 和 spacesAfterSeparator 分隔符号前后的空格数 curPageLinkClassName 当前页的 css 样式名 useSessions 如果设置为 true ,则在 session 中保存每页显示的记录数

    6. 方法摘要

    Pager::factory() 创建一个分页器实例 Pager::getCurrentPageID() 当前页编号 Pager::getLinks 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等的数组 Pager::getNextPageID 下一页编号 Pager::getOffsetByPageId() Returns offsets for given pageID. Pager::getPageData() 以数组形式返回当前页的记录 Pager::getPageIdByOffset() Returns the page number for the given offset Pager::getPageRangeByPageId() Returns offsets for given pageID. Pager::getPreviousPageID() 返回前一页编号 Pager::getperpageselectbox() Returns a string with a XHTML SELECT menu, to choose how many items per page should be displayed. Pager::isFirstPage() 当前页是否第一页 Pager::isLastPage() 当前页是否最后一页 Pager::isLastPageComplete() 最后一页是否完整(complete) Pager::numItems() 总共的记录数 Pager::numPages() 返回总共的页数 Pager::Pager() 同 factory

    7. 后记

    我喜欢总结自己的学习并整理成文档. 开始也只是想把自己学习 PEAR Pager 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

    8. 参考资料

    8.1. 官方网站

    http://pear.php.net/package/Pager

    8.2. PEAR探奇之PEAR::Pager

    http://blog.csdn.net/haohappy2004/archive/2005/09/30/492857.aspx

    http://blog.csdn.net/haohappy2004/archive/2005/10/02/493922.aspx

    8.3. 官方参考文档

    http://pear.php.net/manual/en/package.html.pager.php

    8.4. Smarty Pager

    http://smarty.php.net/contribs/plugins/view.php/function.pager.php

      GET['totalItems'] = $totalItems; // 创建 Pager 对象 $params = array( 'mode' => 'Sliding', 'perPage' => $pageSize, 'delta' => 2, 'totalItems' => $totalItems, ); $pager = Pager::factory($params); // 获得当前页(默认为第一页)的各种相关页链接 $links = $pager->getLinks(); // 模板赋值 $tpl->assign("pager", $links);

    注意:以上代码修改自 Hick 在项目中实际应用的代码,跟 Hick 在实际运用中有些不同。

    5. 参数摘要

    这里说的参数主要是 Pager::factory 的参数,该函数的参数至少是 itemData 和 totalItem 中的一个。append 参数( 默认为 true)为 false 时,还需要指定 fileName 参数。

    itemData 用来分页的数据记录数组 totalItems 用来分页的记录总数 perPage 每页显示的记录数 delta 分页器当前页的前后显示的分页链接数 mode Jumping 和 Sliding 两中分页样式 httpMethod 允许 GET 和 POST 方式传递分页相关信息 currentPage 默认载入的页 linkClass 分页链接的 css 样式 separator 分页器之间的分隔符 spacesBeforeSeparator 和 spacesAfterSeparator 分隔符号前后的空格数 curPageLinkClassName 当前页的 css 样式名 useSessions 如果设置为 true ,则在 session 中保存每页显示的记录数

    6. 方法摘要

    Pager::factory() 创建一个分页器实例 Pager::getCurrentPageID() 当前页编号 Pager::getLinks 获得当前页(默认为第一页)的各种相关页链接: 前一页;后一页;所有页等等的数组 Pager::getNextPageID 下一页编号 Pager::getOffsetByPageId() Returns offsets for given pageID. Pager::getPageData() 以数组形式返回当前页的记录 Pager::getPageIdByOffset() Returns the page number for the given offset Pager::getPageRangeByPageId() Returns offsets for given pageID. Pager::getPreviousPageID() 返回前一页编号 Pager::getperpageselectbox() Returns a string with a XHTML SELECT menu, to choose how many items per page should be displayed. Pager::isFirstPage() 当前页是否第一页 Pager::isLastPage() 当前页是否最后一页 Pager::isLastPageComplete() 最后一页是否完整(complete) Pager::numItems() 总共的记录数 Pager::numPages() 返回总共的页数 Pager::Pager() 同 factory

    7. 后记

    我喜欢总结自己的学习并整理成文档. 开始也只是想把自己学习 PEAR Pager 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

    8. 参考资料

    8.1. 官方网站

    http://pear.php.net/package/Pager

    8.2. PEAR探奇之PEAR::Pager

    http://blog.csdn.net/haohappy2004/archive/2005/09/30/492857.aspx

    http://blog.csdn.net/haohappy2004/archive/2005/10/02/493922.aspx

    8.3. 官方参考文档

    http://pear.php.net/manual/en/package.html.pager.php

    8.4. Smarty Pager

    http://smarty.php.net/contribs/plugins/view.php/function.pager.php

     

    最新回复(0)