PHPCMS 栏目页及列表页分页修改

所属分类: CMS教程 / phpcms 阅读数: 642
收藏 0 赞 0 分享
网站栏目页及列表页要实现的效果如下:
1、栏目页最多只列出100页;
2、列表页不限制最大页数,有多少页就列出多少页。
要实现这个效果,需要改动的文件有3个,文件及改动内容如下:

复制代码
代码如下:

/*
文件:/include/global.func.php
函数:get
*/
/*
为 get 函数添加一个参数
ismaxpage 就是所添加的参数,用于判断是否启用“列表页最大页数”这个参数
而插入代码的部分是为了改变total的值,即记录集总数
*/
function get($sql, $rows = 0, $page = 0, $dbname = '', $dbsource = '', $urlrule = '', $distinct_field = '', $catid = 0, $ismaxpage = 0) {
...
if($dbname || $dbsource)
{
$r = $db->get_one("SELECT COUNT(*) AS `count` ".stristr($sql, 'from'));
$total = $r['count'];
}
elseif($distinct_field)
{
$total = cache_count("SELECT COUNT(distinct $distinct_field) AS `count` ".stristr($sql, 'from'));
}
else
{
$total = cache_count("SELECT COUNT(*) AS `count` ".stristr($sql, 'from'));
}
/* 插入以下代码 开始 */
global $PHPCMS;
if ($ismaxpage) {
$total = min($total, $PHPCMS['maxpage']*$rows);
}
/* 插入以上代码 结束 */
$pages = pages($total, $page, $rows, $urlrule, '', $catid);
...
}


复制代码
代码如下:

/*
文件:/include/template.func.php
函数:get_parse
*/
/*
前台 get 标签最后是转换成 get 函数,以下是处理 get 标签的函数
因为 get 函数增加了一个参数 $ismaxpage,所以这里也需要做相应修改
以下是修改后的部分代码
*/
function get_parse($str)
{
...
extract($r);
if(!isset($dbsource)) $dbsource = '';
if(!isset($dbname)) $dbname = '';
if(!isset($sql)) $sql = '';
if(!isset($rows)) $rows = 0;
if(!isset($urlrule)) $urlrule = '';
if(!isset($catid)) $catid = 0;
if(!isset($distinctfield)) $distinctfield = '';
if(!isset($return) || !preg_match("/^\w+$/i", $return)) $return = 'r';
if(!isset($ismaxpage)) $ismaxpage = 0; /* 增加部分 */
if(isset($page))
{
/* 修改部分,增加了 $ismaxpage 这个参数,仔细看 */
$str = "<?php \$ARRAY = get(\"$sql\", $rows, $page, \"$dbname\", \"$dbsource\", \"$urlrule\",\"$distinctfield\",\"$catid\", $ismaxpage);\$DATA=\$ARRAY['data'];\$total=\$ARRAY['total'];\$count=\$ARRAY['count'];\$pages=\$ARRAY['pages'];unset(\$ARRAY);foreach(\$DATA AS \$n=>\${$return}){\$n++;?>";
}
...
}


复制代码
代码如下:

/*
文件:/admin/html.inc.php
*/
/* 找到以下代码 */
if($CATEGORY[$catid]['child'])
{
$pages = 1;
$html->category($catid);
}
else
{
$offset = $pagesize*($page-1);
if($page == 1)
{
$contents = cache_count("SELECT COUNT(*) AS `count` FROM `".DB_PRE."content` WHERE catid=$catid AND status=99");
$total = ceil($contents/$PHPCMS['pagesize']);
$pages = ceil($total/$pagesize);
}
$max = min($offset+$pagesize, $total);
for($i=$offset; $i<=$max; $i++)
{
$html->category($catid, $i);
}
}
/* 然后把上面的代码替换成以下的代码 */
$offset = $pagesize*($page-1);
if($page == 1)
{
$condition=get_sql_catid($catid);
$contents = cache_count("SELECT COUNT(*) AS `count` FROM `".DB_PRE."content` WHERE status=99 $condition");
$total = ceil($contents/$PHPCMS['pagesize'])+1;
/* 以下这行代码确保了生成的栏目及列表页的数量是正确的,该生成多少页就是多少页 */
$total = $CATEGORY[$catid]['child'] ? min($total, $PHPCMS['maxpage']+1) : $total;
$pages = ceil($total/$pagesize);
}
$max = min($offset+$pagesize, $total);
for($i=$offset; $i<$max; $i++)
{
$html->category($catid, $i);
}

以下是一个栏目页及列表页模板的示例


复制代码
代码如下:

<?php
$catids = str_replace('`catid`', 'a.`catid`', get_sql_catid($catid));
$sql = "
SELECT a.contentid, a.catid, a.title, a.keywords, a.thumb, a.userid, a.updatetime, a.inputtime, a.islink, a.url, a.style
FROM `phpcms_content` a
WHERE a.status=99 $catids ORDER BY a.contentid DESC";
/* 判断是否有子栏目,有的话就开启“列表页最大页数”这个参数,限制栏目页页数 */
if ($child) {
$ismaxpage = 1;
$page = min($page, $PHPCMS['maxpage']); /* 为了防止在地址栏输入页数,这里是要滴 */
}
?>
<ul>
{get sql="$sql" rows="20" page="$page" catid="$catid" ismaxpage="$ismaxpage"}
<li>{$r[title]}</li>
{/get}
</ul>
<div>{$pages}</div>

经过以上这么一翻捣鼓,一开始的那效果就出来了。基本思路就是先要为get标签增加一个参数,用于判断是否开启“列表页最大页数”,然后生成静态页面的时候限制一下栏目页,不然它有多少生成多少。
PHPCMS 确实挺好,但需要改进的地方同样也很多,很多细节都没处理好,而有些功能都不是给人用的。希望 PHPCMS 能越来越强大!
更多精彩内容其他人还在看

PhpCms内容管理:生成HTML图文教程

PhpCms内容管理中生成HTML的部分的图文教程,下文给大家呈现
收藏 0 赞 0 分享

PhpCms网站公告管理教程

关于PhpCms网站公告管理模块,下文中有详细的图文介绍
收藏 0 赞 0 分享

PhpCms会员管理图文教程

PhpCms的会员管理是如何设置的呢?我们给大家整理了相关的图文教程
收藏 0 赞 0 分享

PhpCms添加栏目图文教程

如何给PhpCms添加栏目,下面我们给大家提供相关的图文教程
收藏 0 赞 0 分享

PhpCms导入模型图文教程

如何将设置PhpCms导入模型,下文有详细的介绍
收藏 0 赞 0 分享

PHPCMS V9 加密规则(经测试相当不错)

PHPCMS V9 加密规则:对输入的密码32位小写 MD5 对输入的密码进行trim过滤,下面有个不错的示例,大家可以参考下
收藏 0 赞 0 分享

phpcms文章页如何显示上一页下一页

phpcms文章页要显示上一页下一页效果并不难,下面的代码大家不妨参考下,或许有所帮助
收藏 0 赞 0 分享

phpcms v9在list_download.html页面中给图片加下载连接的方法

有很多的朋友都不知道在list_download.html页面中怎么给图片加下载连接?其实很简单,下面有个不错的示例,感兴趣的朋友可以参考下
收藏 0 赞 0 分享

phpcms2008后台文章发布文本输入框长度设置方法

经常在新建模型或模型添加字段的时候,所需的文本框的长度各不样同,怎么来设置文本输入框的长度呢?下面有个不错的示例,大家可以感受下
收藏 0 赞 0 分享

完美整合phpcms v9和discuz X3.1实现同步登陆退出论坛免激活

UCenter 作服务端;phpsso 与 Discuz! 分别作 UCenter 的客户端应用;phpsso 与 Discuz! 通过 UCenter 发生交互
收藏 0 赞 0 分享
查看更多