xoops 数据分页

xoops 分页很简单 我用一个例子说明 有问题在发问

$start = (!isset($_REQUEST[‘start’]))? ”:$_REQUEST[‘start’];
if ($start==”) $start=0;
//前面2行照抄

$sql_query = “select * from “.$xoopsDB->prefix(‘XXXXXXX’).” WHERE account=’$account’ ORDER BY date DESC “;//求总笔数用的
$total = mysql_num_rows(mysql_query($sql_query));
$result = $xoopsDB->query($sql_query) or die(mysql_error());
$page_num=30;//一页有30行
$nav = new XoopsPageNav($total,$page_num,$start);
$sql=”select * from “.$xoopsDB->prefix(‘xxxxxx’).” WHERE account=’$account’ ORDER BY date DESC LIMIT “.$start.”,”.$page_num;//有 LIMIT 用来分页

$arr = array();
while($rows = $xoopsDB->fetchArray($result)){
$arr[] = $rows;
}
$xoopsTpl->assign(‘show_data’,$arr);// 秀出结果
$xoopsTpl->assign(‘page’,$nav->renderNav());//显示 (1) 2 3 4 » 横式选择条 另一种是直式 $nav->忘记了

show_data.html
<{foreach from=$show_data item=data}>
<td><{$data.date}></td>
<{/foreach}>
<tr><{$page}></tr>

 
 
我大概写一个流程出来,至于代码的实现留给楼主思考的空间:1. 参数初始化
$start = $_GET[‘start’]; //起始数
$perPage = 5; //每页记录数

2. 生成查询条件
这一步我建议使用Criteria,为什么呢?因为xoopsDB的很多方法都支持这一种对象,而且是可以和SQL相对分离,易于移植。
$sql = “SELECT * FROM table “.$criteria->renderWhere();

3. 取得总记录数
$xoopsDB->getCount($criteria); //这就是为什么使用Criteria的原因了。

4. 获取记录
$xoopsDB->query($sql, $perPage, $start); //感谢XOOPS提供了这么好的query方法!
fetchRow()之类的不用我多说了吧。

5. 生成分页导航栏
include(XOOPS_ROOT_PATH.”/class/pagenav.php”); //加载pagenav.php
$nav = new XoopsPageNav($productCount, $perPage, $start, “start”, $extra_arg); //生成pagenav实例
$pagenav = $nav->renderNav(4); //生成pagenav的HTML代码

需要注意的地方:
1. 生成pagenav实例是,第4个参数是与参数初始化的$_GET[‘start’]对应的,这个参数改变了,那初始化的时候也要变。
最后一个参数$extra_arg是附加参数,再于效果嘛,自己试一下就知道了。
2.renderNav($count)是指导航栏里面显示多少个页码。

6.往模板输出
这个也不用我多说吧。
$xoopsTpl->assign($pagenav); //这个少了你就不分翻页了

Leave a comment

您的电子邮箱地址不会被公开。