羊年到来之际,终于解决了灵动标签分页的问题了.一直以来在论坛有很多人帮助了我,总是索取没有奉献很过意不去,所以这里我也分享一下经验!
大家知道灵动标签在效率方面和使用上极其灵活,不象其他的标签你要掌握好要动很多的脑子,操作起来还很麻烦,稍不留神不是这里就是那里错误了.并且其他标签在打开时效上也不如灵动标签,但是一直以来灵动标签有一个致命的问题就是分页问题, 想想看,如果你的数据越来越多,你不可能放一页吧,正因为这个,列表页我一直不用灵动标签,这也是没有办法.所以一直想把灵动标签这个问题解决了.搜了一下论坛,问这个问题的朋友也不少,很多问答是,标签无法分页,就完了,真的这样吗,其实不然的.
我这里解决的方法是用了李炎恢老师的方法,这里要感谢他,向他致敬!同时也要感谢朋友SweatHeart.Co.给与的大力帮助!
解决方法如下:
1,复制下面这个两个函数,放入帝国e/class/userfun.php文件内
function _page($_sql,$_size) {
//将里面的所有变量取出来,外部可以访问
$empire=new mysqlquery();
global $_page,$_pagesize,$_pagenum,$_pageabsolute,$_num;
if (isset($_GET['page'])) {
$_page = $_GET['page'];
if (empty($_page) || $_page < 0 || !is_numeric($_page)) {
$_page = 1;
} else {
$_page = intval($_page);
}
} else {
$_page = 1;
}
$_pagesize = $_size;
$_num = $empire->num($_sql);
if ($_num == 0) {
$_pageabsolute = 1;
} else {
$_pageabsolute = ceil($_num / $_pagesize);
}
if ($_page > $_pageabsolute) {
$_page = $_pageabsolute;
}
$_pagenum = ($_page - 1) * $_pagesize;
}
/**
* _paging分页函数
* @param $_type
* @return 返回分页
*/
function _paging($_type) {
global $_page,$_pageabsolute,$_num;
if ($_type == 1) {
echo '
';
echo '
';
for ($i=0;$i
if ($_page == ($i+1)) {
echo '
'.($i+1).'';
} else {
echo '
'.($i+1).'';
}
}
echo '
';
echo '
';
} elseif ($_type == 2) {
echo '
';
echo '
';
echo '
'.$_page.'/'.$_pageabsolute.'页 | ';
echo '
共有'.$_num.'个 | ';
if ($_page == 1) {
echo '
首页 | ';
echo '
上一页 | ';
} else {
echo '
首页 | ';
echo '
上一页 | ';
}
if ($_page == $_pageabsolute) {
echo '
下一页 | ';
echo '
尾页';
} else {
echo '
下一页 | ';
echo '
尾页';
}
echo '
';
echo '
';
}
}
2 列表模板中写入分页函数取值,这里写一个样例供大家参考
global $_pagesize,$_pagenum;
_page("SELECT hd_ecms_shop.id FROM hd_ecms_shop WHERE hd_ecms_shop.classid = 13",10);//第一个参数获取总条数,第二个参数,指定每页多少条
?>
[e:loop={"SELECT hd_ecms_shop.id, hd_ecms_shop.classid, hd_ecms_shop.titleurl, hd_ecms_shop.title FROM hd_ecms_shop WHERE hd_ecms_shop.classid = 13 LIMIT {$_pagenum},{$_pagesize}",10,24,0}]
=$bqr['title']?>
[/e:loop]
//_pageing函数调用分页,1|2,1表示数字分页,2表示文本分页
_paging(2);?>
分页css文件
#page_num { height: 20px; clear: both; padding: 20px 0; position: relative; }
#page_num ul { position: absolute; right: 30px; height: 20px; }
#page_num ul li { float: left; width: 26px; height: 20px; }
#page_num ul li a { display: block; width: 20px; height: 20px; line-height: 20px; border: 1px solid #333; text-align: center; text-decoration: none; }
#page_num ul li a:hover, #page_num ul li a.selected { background: #666; font-weight: bold; color: #fff; }
#page_text { height: 20px; clear: both; padding: 20px 0; }
#page_text ul { text-align: center; }
#page_text ul li { display: inline; }
#page_text ul li a { color: #333; }
帝国cms使用分页函数的技巧:
帝国自带前台分页函数page2,需要的参数为:
$search='&classid=13'; //sql语句需要的参数从此获取
$classid=(int)$_GET['classid'];
$start=0;
$page=(int)$_GET['page'];
$line=20; //每页显示20条
$page_line=12;
$offset=$page*$line;
//获取总数
$num=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_shop where classid='$classid'");
//分页
$returnpage=page2($num,$line,$page_line,$start,$page,$search);
$query="select * from {$dbtbpre}ecms_shop where classid='$classid' limit $offset,$line";
$sql=$empire->query($query);
while($r=$empire->fetch($sql)){
echo $r[title];
}
echo $returnpage;
?>
一个完整的演示:
将以下代码粘贴到新建的do.php文件,放到网站根目录,运行 http://网址/do.php?classid=你的栏目id,就可以看到分页函数的演示了。这个演示仅限news数据表的栏目。
require('e/class/connect.php');
require('e/class/db_sql.php');
require('e/class/functions.php');
$link=db_connect();
$empire=new mysqlquery();
$classid=(int)$_GET['classid'];
$search='&classid='.$classid;
$start=0;
$page=(int)$_GET['page'];
$line=2;
$page_line=12;
$offset=$page*$line;
$num=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_news where classid='$classid'");
$returnpage=page2($num,$line,$page_line,$start,$page,$search);
$query="select * from {$dbtbpre}ecms_news where classid='$classid' limit $offset,$line";
$sql=$empire->query($query);
while($r=$empire->fetch($sql)){
echo $r[title]."
";
}
echo $returnpage;
db_close();
$empire=null;
?>