php 分页 smarty暂无头绪做分页、谁给点建议噻 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 smarty只是用来表现的,真正的分页逻辑还是要靠php处理一下。进我的qq群 10978202, 我教你~~ 重点是SQL limit 这个函数! smarty只是模板,要分布还是需要用php 用smarty的话,可以下一个分页类,在php页面中调用这个类,传到前台页面中就可以显示出来了 下面主要说一下数据库数据的分页首先我们要明白见个量a、页面上要显示的链接数$links(我们这里讨论的不是只有上一页和下一页的情形,我们讨论百度图片中的分页效果)b、每一页要显示的记录数$page_messages即一页中显示的数据的多少c、当前的页码$paged、数据库中总的记录数(不是必要,但是为保证生成分页条正确,我们也应该考虑)有了上面的四个量我们就可以通过他们得出分页条的开始页码和结束页码,以及select * from tables where fields=value limit offset,numbers中的offset和numbers其中offset=($page-1)*$page_messagesnumbers=$page_messages其次,我们要明白在点击分页条中的链接时我们应该将相应的页码传递到后台去即$page传递PHP文件,通过它来动态的生成offset,重新从数据中读取数据最后,在模板文件中或者直接在HTML中通过循环控制语句,将数据显示出来 主要还是mysql的limit起作用吧?或者是oracle的rownum !分页的原理是什么这个只要你想明白应该就很容易懂看看PHP100的教程貌似有这个的!!! 去phpclasses.org下载一个分页类调用就是了 去我的博客看下,有详细的分页方法,改改就能用http://sameveryday.blog.163.com/blog/static/1780723372011014102152413/ <?php/** * page类 * author:yu * 时间:2011-05-07 */class Pager { /** * 记录总数 */ var $total; /** * 每一页显示的记录数 */ var $pageSize; /** * 当前页码 */ var $currentPage; /** * 记录偏移量 */ var $offset; /** * 总页数 */ var $pageTotal; /** * 页码偏移量 */ var $numberOffset = 5; /** *页面请求参数 */ var $request = ""; /** *Fn: Pager *功能:构造函数 */ public function __construct ($total, $pageSize, $currentPage, $request = "") { $this->total = $total; $this->pageSize = $pageSize; $this->pageOffset(); $this->pageTotal(); $this->currentPage($currentPage); $this->request = $request; } /** *Fn: pageOffset *功能:数据库记录偏移量 */ public function pageOffset() { return $this->offset = $this->pageSize * ($this->currentPage - 1); } /** *Fn: pageTotal *功能:计算总页数 */ public function pageTotal() { return $this->pageTotal = ceil($this->total / $this->pageSize); } /** *Fn: currentPage *功能:设置页数 */ public function currentPage($currentPage) { if (isset($currentPage)) { $this->currentPage = intval($currentPage); } else { $this->currentPage = 1; } return $this->currentPage; } /** *Fn: nextPage *功能:跳转到下一页 */ public function nextPage() { /** *显示记录数 */ $link = "共{$this->total}条 "; /** *页码步长 */ $stepPage = $this->currentPage ? ceil($this->currentPage / $this->numberOffset) : 1; /** *数字页码设定 */ $numberPage = ($this->pageTotal > $this->numberOffset) ? $this->numberOffset : $this->pageTotal; /** *只有一页 */ if ($this->total <= $this->pageSize) { $link .= "[首页]|[末页]"; } else { /** *总数和当前页 */ $link .= "第{$this->currentPage}/{$this->pageTotal}页 "; /** *首页 */ $link .= "<a title='首页' href=?pageNo=1{$this->request}>[首页]</a> "; /** *上一列 */ if ($stepPage > 1) { $lastIndex = ($stepPage - 1) * $this->numberOffset; $link .= "<a title='上一列' href=?pageNo={$lastIndex}{$this->request}>[<<]</a>"; } /** *上一页 */ if ($this->currentPage > 1) { $prePage = $this->currentPage - 1; $link .="<a title='上一页' href=?pageNo={$prePage}{$this->request}>[<]</a>"; } /** *数字页码 */ $i = ($stepPage - 1) * $this->numberOffset; for ($j = $i; $j < ($i + $numberPage) && $j < $this->pageTotal; $j++) { $newPage = $j + 1; if ($this->currentPage == $j + 1) { $link .= "<b>[" . ($j + 1) . "]</b>"; } else { $link .= "<a href=?pageNo={$newPage}{$this->request}>[" . ($j+1) . "]</a>"; } } /** *下一页 */ if ($this->currentPage < $this->pageTotal){ $nextPage = $this->currentPage + 1; $link .= "<a title=下一页 href=?pageNo={$nextPage}{$this->request}>[>]</a>"; } /** *下一列 */ if ($stepPage < $this->total) { $nextPage = $stepPage * ($this->numberOffset + 1); if ($nextPage < $this->pageTotal) { $link .= "<a title=下一列 href=?pageNo={$nextpre}{$this->request}>[>>]</a>"; } } /** *末页 */ if ($this->currentPage < $this->pageTotal) { $link .= "..<a title=末页 href=?pageNo={$this->pageTotal}{$this->request}>[末页]</a>"; } } return $link; }}?>自己写的一个PAGE类。传入参数,返回$link, $smarty->assgin('page',$link);{$page} PHP 环境下提示http 500错误 PHP写入sql server2005数据乱码 APACHE重定向的问题 函数和类的问题 Cake PHP初学配置.请大家帮忙 mysql的外连接的问题 有没有使用 PHPBB 的高手? 通过shell执行php的问题? 支持php权限的免费空间,是否对php的运行时间有限制? mysql 搜索结果按照关键字排序 如何在线修改ftp的密码???? php怎么实现立方体的柱形报表
进我的qq群 10978202, 我教你~~
首先我们要明白见个量
a、页面上要显示的链接数$links(我们这里讨论的不是只有上一页和下一页的情形,我们讨论百度图片中的分页效果)
b、每一页要显示的记录数$page_messages即一页中显示的数据的多少
c、当前的页码$page
d、数据库中总的记录数(不是必要,但是为保证生成分页条正确,我们也应该考虑)
有了上面的四个量我们就可以通过他们得出分页条的开始页码和结束页码,以及
select * from tables where fields=value limit offset,numbers中的offset和numbers
其中offset=($page-1)*$page_messages
numbers=$page_messages其次,我们要明白在点击分页条中的链接时我们应该将相应的页码传递到后台去
即$page传递PHP文件,通过它来动态的生成offset,重新从数据中读取数据最后,在模板文件中或者直接在HTML中通过循环控制语句,将数据显示出来
这个只要你想明白应该就很容易懂
看看PHP100的教程貌似有这个的!!!
http://sameveryday.blog.163.com/blog/static/1780723372011014102152413/
/**
* page类
* author:yu
* 时间:2011-05-07
*/
class Pager {
/**
* 记录总数
*/
var $total;
/**
* 每一页显示的记录数
*/
var $pageSize;
/**
* 当前页码
*/
var $currentPage;
/**
* 记录偏移量
*/
var $offset;
/**
* 总页数
*/
var $pageTotal;
/**
* 页码偏移量
*/
var $numberOffset = 5;
/**
*页面请求参数
*/
var $request = "";
/**
*Fn: Pager
*功能:构造函数
*/
public function __construct ($total, $pageSize, $currentPage, $request = "") {
$this->total = $total;
$this->pageSize = $pageSize;
$this->pageOffset();
$this->pageTotal();
$this->currentPage($currentPage);
$this->request = $request;
}
/**
*Fn: pageOffset
*功能:数据库记录偏移量
*/
public function pageOffset() {
return $this->offset = $this->pageSize * ($this->currentPage - 1);
}
/**
*Fn: pageTotal
*功能:计算总页数
*/
public function pageTotal() {
return $this->pageTotal = ceil($this->total / $this->pageSize);
}
/**
*Fn: currentPage
*功能:设置页数
*/
public function currentPage($currentPage) {
if (isset($currentPage)) {
$this->currentPage = intval($currentPage);
} else {
$this->currentPage = 1;
}
return $this->currentPage;
}
/**
*Fn: nextPage
*功能:跳转到下一页
*/
public function nextPage() {
/**
*显示记录数
*/
$link = "共{$this->total}条 ";
/**
*页码步长
*/
$stepPage = $this->currentPage ? ceil($this->currentPage / $this->numberOffset) : 1;
/**
*数字页码设定
*/
$numberPage = ($this->pageTotal > $this->numberOffset) ? $this->numberOffset : $this->pageTotal;
/**
*只有一页
*/
if ($this->total <= $this->pageSize) {
$link .= "[首页]|[末页]";
} else {
/**
*总数和当前页
*/
$link .= "第{$this->currentPage}/{$this->pageTotal}页 ";
/**
*首页
*/
$link .= "<a title='首页' href=?pageNo=1{$this->request}>[首页]</a> ";
/**
*上一列
*/
if ($stepPage > 1) {
$lastIndex = ($stepPage - 1) * $this->numberOffset;
$link .= "<a title='上一列' href=?pageNo={$lastIndex}{$this->request}>[<<]</a>";
}
/**
*上一页
*/
if ($this->currentPage > 1) {
$prePage = $this->currentPage - 1;
$link .="<a title='上一页' href=?pageNo={$prePage}{$this->request}>[<]</a>";
}
/**
*数字页码
*/
$i = ($stepPage - 1) * $this->numberOffset;
for ($j = $i; $j < ($i + $numberPage) && $j < $this->pageTotal; $j++) {
$newPage = $j + 1;
if ($this->currentPage == $j + 1) {
$link .= "<b>[" . ($j + 1) . "]</b>";
} else {
$link .= "<a href=?pageNo={$newPage}{$this->request}>[" . ($j+1) . "]</a>";
}
}
/**
*下一页
*/
if ($this->currentPage < $this->pageTotal){
$nextPage = $this->currentPage + 1;
$link .= "<a title=下一页 href=?pageNo={$nextPage}{$this->request}>[>]</a>";
}
/**
*下一列
*/
if ($stepPage < $this->total) {
$nextPage = $stepPage * ($this->numberOffset + 1);
if ($nextPage < $this->pageTotal) {
$link .= "<a title=下一列 href=?pageNo={$nextpre}{$this->request}>[>>]</a>";
}
}
/**
*末页
*/
if ($this->currentPage < $this->pageTotal) {
$link .= "..<a title=末页 href=?pageNo={$this->pageTotal}{$this->request}>[末页]</a>";
}
}
return $link;
}
}
?>
自己写的一个PAGE类。传入参数,返回$link, $smarty->assgin('page',$link);{$page}