`
lonestone
  • 浏览: 94246 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

PEAR_Pager的使用

阅读更多

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 也没什么关系,嘿嘿)的系统中的方法:

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

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

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

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 也没什么关系,嘿嘿)的系统中的方法:

  1. 在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。
  2. 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。
  3. 根据新闻总数以及 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 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

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

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 也没什么关系,嘿嘿)的系统中的方法:

  1. 在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。
  2. 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。
  3. 根据新闻总数以及 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 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

GET['pageID']) ? 1 :

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 也没什么关系,嘿嘿)的系统中的方法:

  1. 在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。
  2. 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。
  3. 根据新闻总数以及 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 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

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

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 也没什么关系,嘿嘿)的系统中的方法:

  1. 在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。
  2. 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。
  3. 根据新闻总数以及 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 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

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

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 也没什么关系,嘿嘿)的系统中的方法:

  1. 在获得新闻记录时,使用类封装,通过方法 getList 的参数中 $limit 参数取得当前页需要的新闻记录的范围。
  2. 如果当前 URL 中没有传递总记录数这个参数,则从数据库查询出总记录数。由于获得总记录数的查询条件(SQL 语句的 where 部分)跟 get_list 方法的查询条件是一样的,因此 Hick 的做法是在这个方法增加一个功能(参数),最后一个参数为引用传递,传递符合当前新闻列表条件的新闻总数。
  3. 根据新闻总数以及 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 的经验总结一下, 留作以后备用. 弄完了, 感觉应该分享出来. 既然要弄出来给别人看, 读者就不一样了, 需要考虑的就多了, 要分享出个东西来也不容易啊, 嘿嘿. 差不多是第一次比较正式的写这样的东西, 感觉有点点麻烦, 以后要少考虑一点.

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 样式名
分享到:
评论

相关推荐

    pear_2.3.5_D.apk

    pear_2.3.5_D.apk

    pear_manual_en.rar_PEAR Manu_pear_manual_en_pear_manual_en.chm_p

    这个压缩包"pear_manual_en.rar"包含了英文版的PEAR手册,是开发者理解和使用PEAR库的重要资源。 **PEAR类库** PEAR类库是一个庞大的集合,包含各种各样的模块,如数据库抽象层(DB),邮件发送(Mail),XML处理...

    pear_2.1.6(2).apk

    pear_2.1.6(2).apk

    php_pear_smarty_manual

    2. **pear_manual_zh.chm** - 这是中文版的PEAR手册,详细介绍了PEAR库的安装、使用方法和各个组件的功能,对于使用PEAR扩展的开发者非常有帮助。 3. **PHP_search_中文手册.CHM** - 可能是一个包含了PHP搜索功能的...

    pear_manual_en.chm

    php pear_manual_en

    基于Flask和Shell的pear_admin管理系统设计源码

    本源码提供了一个基于Flask和Shell的pear_admin管理系统设计。项目包含1194个文件,其中包括489个PNG图片、179个JavaScript文件、123个Python文件、90个CSS样式文件、81个HTML文件、77个GIF图片、38个SVG图像、24个...

    php用法pear_smtp发送邮件_.docx

    #### 三、使用PEAR_SMTP发送邮件 ##### 1. 基础用法 以下是一个简单的示例代码,展示如何使用PEAR的`Mail`类通过SMTP服务发送一封纯文本邮件: ```php require_once "vendor/autoload.php"; // 发件人邮箱地址 ...

    PEAR

    下载后在PHP安装目录下建立一个Pear目录,然后解压进去,再在PHP.ini中的include_path中加入这个路径,就可以使用了。这个包是我最近才更新的,因为Pear是实时更新的,所以并不保证是最新版,有能力自己安装的朋友...

    php使用pear_smtp发送邮件

    本文将详细介绍如何使用`PEAR_SMTP`发送邮件,以及其相关配置和注意事项。 首先,确保你的PHP环境中已经安装了PEAR库。如果没有,你需要通过pear命令行工具进行安装,执行`pear install Mail`和`pear install Mail_...

    PEAR.php源代码

    2. **错误处理**:通过`PEAR_Error`和`PEAR_Exception`,学习如何自定义错误处理策略,以及何时使用异常而不是错误。 3. **包管理**:理解如何注册和管理PHP包,包括安装、升级、卸载和依赖关系的解决。 4. **配置...

    Pear2Pear_DS2_Assignment2:使用Repast Symphony在Secure-Scuttlebutt实现中闲聊仅追加日志

    Pear2Pear_DS2_Assignment2 这是特伦托大学2020/2021年度分布式系统2 DISI的作业2。 在这里,您可以在Repast Simphony中的Secure-Scuttlebutt实现中找到带有附加日志的闲聊消息的Java源,以及包含已完成工作的描述...

    pear_document

    php之PEAR组件的帮助文档,主要用于扩充php的功能之为足.

    jsj_PHPpear的安装和使用.pdf

    此外,Pear还支持卸载不需要的包,使用"pear uninstall package-name"命令即可卸载名为"package-name"的包。 文档中还介绍了Pear远程包管理功能,例如通过"pear remote-list"命令可以列出所有可用的远程包,"pear ...

    php Document |Pear 安装、使用教程,包含go-pear.php

    如果你的项目已经使用了Composer,你可以通过在`composer.json`文件中添加以下依赖来安装PEAR: ```json "require": { "pear/pear-core-default": "1.10.*" } ``` 然后运行`composer install`进行安装。 **...

    pear包安装器go-pear

    5. **使用**:安装完成后,可以使用`pear`命令行工具来安装、更新和管理PEAR包。 `go-pear`的出现使得开发者能够在PHP环境中更方便地使用和管理各种PEAR包,从而提高开发效率和代码质量。它不仅简化了包的安装过程...

    PearPlayer_v2.5.6.7z

    在当今数字媒体领域,流媒体播放器已经成为了不可或缺的一部分。PearPlayer_v2.5.6作为一个专为此领域设计的工具,它以其高效稳定、功能丰富的特性,深受用户喜爱。这个版本的发布,无疑为多媒体爱好者和开发者提供...

    Windows安装Pear所需文件

    例如,安装一个新的pear包可以使用: ```bash pear install package_name ``` 更新已安装的包: ```bash pear upgrade package_name ``` 查看可用的包列表: ```bash pear list-all ``` 除了基础功能,PEAR还...

    安装pear和phpunit

    安装完成后,可以使用`pear list`命令查看已安装的PEAR扩展包。初始状态下可能会列出以下扩展包: - `Archive_Tar 1.3.2 stable` - `Console_Getopt 1.2.3 stable` - `Log 1.12.7 stable` - `image_graphviz ...

Global site tag (gtag.js) - Google Analytics