`
varsoft
  • 浏览: 2438138 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

PHP中模板分页的处理

阅读更多


PHP普通开发中php代码和html代码夹杂的情况中处理分页是比较简单的,也可以构建成函数的形式。最近开发中使用 Pear::DB + Smarty 的结构,于是考虑如果对模板进行分页,因为不能直接操作页面,所以就考虑生成分页字符串的形式。

因为是三层结构,类库-->PHP调用-->模板的形式,所有的数据处理是在类库里的,那么分页控制就在PHP调用中进行的,模板就复杂解析调用的结果。先直接看我们PHP调用中的分页代码:


<?php
/**
* 文件:Type.php
* 功能:显示类别下的书籍
* 作者:heiyeluren
**/

//包含公共文件,包括类库等
require_once("include.php");

//实例化操作对象
$Type = new CTypes();

//每页记录数
define("PAGE_SIZE", 10);

//获取GET提交的变量
$TypeID = $tid ? $tid : intval($_REQUEST['tid']);

//书籍总数
$BookTotal = $Type->getBookTotal($TypeID);

/* 分页显示核心 */
//获取总页数
$pageCount = ($BookTotal/PAGE_SIZE);
//当前页数
if (isset($_GET[page]) && !empty($_GET[page])) {
$page = intval($_GET[page]);
} else {
$page = 1;
}
if ($page==1) {
$startNum = 0;
} else {
$startNum = ($page-1) * PAGE_SIZE;
}
//生成分页链接字符串
if ($page==1 && $pageCount>1) {
$pageStr = "上一页 | <a href=/Type.php?tid=".$TypeID."&page=".($page+1).">下一页</a>";
} elseif ($page==$pageCount && $pageCount>1) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">上一页</a> | 下一页";
} elseif ($page>1 && $page<=$pageCount) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">上一页</a> |
<a href=/Type.php?tid=".$TypeID."&page=".($page+1).">下一页</a>";
} else {
$pageStr = "上一页 | 下一页";
}

//按照页数获取当前记录
$allBook = $Type->getBookFromType($TypeID, $start=$startNum, $offset=PAGE_SIZE);

//Smarty变量赋值
$tpl->assign('BookTotal', $BookTotal);
$tpl->assign('allBook', $allBook);
$tpl->assign('pageStr', $pageStr);

$tpl->display('Type.html');

unset($Type);

?>



为了更清晰的认识,下面简单的描述一下类库中的基本内容:(代码不完整)


<?php
/**
* 文件:Type.class.php
* 功能:Type处理类
* 作者:heiyeluren
**/

class Type
{
var $mDsn;
var $mTableName;
var $hPearDB;

//构造函数
function Type()
{
//...
}

//获得pear DB类的句柄方法
function _getDBClass($fetchMode = DB_FETCHMODE_ASSOC)
{
if(!is_object($this->hPearDB)){
$this->hPearDB = DB::connect($this->mDsn);
$this->hPearDB->query("set names 'utf8'");
$this->hPearDB->setFetchMode($fetchMode);
if(DB::IsError($this->hPearDB)){
return false;
}
}
return $this->hPearDB;
}

//获取书籍总数
function getBookTotal($TypeId)
{
$db = $this->_getDBClass();
$sql = "SELECT COUNT(*) AS total FROM ...";
$rs = $db->getOne($sql);
if (DB::isError($rs))
return $rs->getMessage();
else
return $rs;
}

//获取所有书籍
function getBookFromType($TypeId, $start, $offset)
{
$db = $this->_getDBClass();
$sql = "SELECT * FROM ... LIMIT $start,$offset";
$rs = $db->getAll($sql);
if (DB::isError($rs))
return $rs->getMessage();
else
return $rs;
}

}
?>


最后再让我们看一下这个Type.html模板是如何处理的:


{* 插入头部文件 *}
{include file="Cendar/head.html"}
<div id="side">
<ul>
<li>书籍总数:{$BookTotal}</li>
</ul>
</div>
<div id="Book">
<h2 class="cata">书籍具体内容</h2>
<ul>
{section name=Book loop=$allBook}
<li><a href="show_Book.php?tid={$allBook[Book].id}">{$allBook[Book].title}</a></li>
{sectionelse}
<li class="warning">目前没有书籍</li>
{/section}
</ul>
</div>
{* 分页字符串显示 *}
<div align="right">
{"GBK"|iconv:"utf-8":$pageStr}
</div>
{* 插入底部文件 *}
{include file="Cendar/foot.html"}

那么我们抓住重点就知道,我们从PHP程序里能够控制$pagStr就是我们的分页字符串,最后它将替换到模板文件里来达到效果。

基本到这里就明白了如何再模板里进行分页处理了,当然,你也可以把分页功能写成函数,或者封装成一个类,那么就方便四处调用了。呵呵~~~

(未经授权,请勿转载以上代码)

Author:heiyeluren
Date:2005-8-2

分享到:
评论

相关推荐

    PHP模板分页类

    PHP模板分页类.rar

    php完美分页类,支持无限分页,简洁大气样式,包你好用

    php完美分页类,支持无限分页,简洁大气样式,包你好用

    分页类 可自定义分页模板、对多个参数的URL分页

    PHP分页类 可以对URL有多个参数的也能分页,可自定义分页模板更多使用自由

    PHP多样式万能分页类及示例

    PHP多样式万能分页类及示例PHP多样式万能分页类及示例PHP多样式万能分页类及示例

    php仿ZOL分页类.zip

    一个php仿ZOL分页类,模板zol网站的分页效果代码。分几种样式。

    php分页类-对URL有多个参数的也能分页,可自定义分页模板

    PHP分页类 可以对URL有多个参数的也能分页,可自定义分页模板 更多使用自由

    详解laravel中blade模板带条件分页

    和其他流行的PHP模板引擎不一样,他并不限制你在视图里使用原生PHP代码; 所有Blade视图页面都将被编译成原生的PHP代码并缓存起来,除非你的模板文件被修改,否则不会重新编译。 而这些都意味着Blade不会给我们增加...

    PHP+Smarty+mysql 用户登录注册分页显示

    刚学PHP,最近看了看Smarty框架,写了个简单的程序,和大家探讨一下,有不好的地方希望能给我留言。共同学好PHP语言。

    一个万能的php分页类.zip

    分享一个万能的php分页类。分页显示模板,可用变量参数。当前选中的分页链接模板,未选中的分页链接模板。显示文本设置,设置分页模板, 设置选中分页模板,设置未选中分页模板。

    简化php模板页面中分页代码的解析

    在使用模板的时候,会遇到这么一个问题:显示分页信息时操作麻烦,n多个模板都有分页块。 例如: —共 20 条记录,当前 3/5 页 首页 上一页 下一页 尾页 GO—– 初遇到这个问题的道友,在考虑解决这个问题的时候好像...

    BluePage通用分页类助开发者提高开发效率1

    分页类要提供这方面的处理。 4 web协议不仅仅限于http。很多分页类内部就把协议定死了http了,这是不可取的。 仅仅上面最基本的四点,现在所能看到的所谓分页类中,能做到其中两个的,基本上没有。 好吧。我们...

    分页的简单实现

    分页的简单实现。... 5、通过limit查询记录,获取分页数据,并封装到数组中 6、获取表中记录数量 7、计算出总页数,上一页页数,下一页页数 8、加载模板,使用(数据数组,总页数,上一页页数,下一页页数)

    blade-pagination:Laravel通过Blade模板支持进行分页

    Laravel通过Blade模板支持进行分页。 此软件包与Laravel 5.0和Laravel 5.1兼容(但是,如果您使用Laravel 5.0,则应更新到5.1,这需要20分钟左右的时间) 还有另一个可以快速尝试/测试该程序包的存储库: : (它...

    PC端电脑端商城模板前端静态页面商城模板

    PC端电脑端商城模板,演示商品是食品类,前端静态页面商城模板

    Php 分页类 方便

    模板标签说明: {N1}:首页 {N2}:上一页 {N3}:下一页 {N4}:尾页 {N5}:当前页码 {N6}:页码总数 {N7}:每页条数 {N8}:文章总数 {N9}:上十页 {N10}:下十页 '简单的循环标签: {L}: 循环标签开始 {N}: 循环...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程28:PHP模板引擎Smarty的变量操作符 PHP100视频教程29:PHP模板引擎Smarty内置函数 PHP100视频教程30:PHP模板引擎Smarty缓存应用 PHP100视频教程31:PHP在线编辑器fckeditor应用 PHP100视频教程...

    基于ThinkPhp通用模板

    利用这个ThinkPhp模板进行二次开发,大大提高开发效率,下载之后通过在本地输入..localhost:80/name/install.php进行数据库安装提示,里面已有数据库文件,数据库采用的是Mysql。

    thinkphp智能电子门锁网站模板+前后端源码

    2、修复列表页分页最后一页样式问题,已打包上传回网盘,如已安装使用,可以下载回本地,提取文件(\core\library\think\paginator\driver目录下的Eyou.php文件),上传至对应的目录即可 本模板自带eyoucms内核,...

    PHP网络编程技术与实践 源码

    第6章 PHP中的图像处理技术 6.1 图像操作的基本知识 6.1.1 HTML文档中的图像 6.1.2 图像格式简介 6.1.3 安装图像支持GD库 6.1.4 PHP的图像函数 6.2 图像和颜色的绘制 6.2.1 绘制点元素 6.2.2 绘制线框元素 6.2.3 ...

Global site tag (gtag.js) - Google Analytics