如果你使用过PHPCMS进行二次开发,你可能会注意到后台管理中的“列表页面数量大”这个参数无论怎么设置都是失败的。我把解决方法分享给我刚做的一个网站,以防以后忘记。
网址频道页及列表页要完成的实际效果以下:1、频道页最多个列出100页;
2、列表页不限定较大页数,有多少页就列出是多少页。
要完成这一实际效果,必须改动的文档有3个,文档及改动內容以下:
复制代码编码以下:
/*
文档:/include/global.func.php
涵数:get
*/
/*
为get涵数加上一个参数
ismaxpage便是所加上的参数,用以分辨是不是开启“列表页较大页数”这一参数
而插进编码的一部分是为了更好地更改total的值,即记录集数量
*/
functionget($sql,$rows=0,$page=0,$dbname='',$dbsource='',$urlrule='',$distinct_field='',$catid=0,$ismaxpage=0){
...
if($dbname||$dbsource)
{
$r=$db->get_one("SELECTCOUNT(*)AS`count`".stristr($sql,'from'));
$total=$r['count'];
}
elseif($distinct_field)
{
$total=cache_count("SELECTCOUNT(distinct$distinct_field)AS`count`".stristr($sql,'from'));
}
else
{
$total=cache_count("SELECTCOUNT(*)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,因此这儿也必须做相对改动
下列是改动后的一部分编码
*/
functionget_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(\$DATAAS\$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("SELECTCOUNT(*)AS`count`FROM`".DB_PRE."content`WHEREcatid=$catidANDstatus=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("SELECTCOUNT(*)AS`count`FROM`".DB_PRE."content`WHEREstatus=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="
SELECTa.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
WHEREa.status=99$catidsORDERBYa.contentidDESC";
/*分辨是不是有子频道,有得话就打开“列表页较大页数”这一参数,限定频道页页数*/
if($child){
$ismaxpage=1;
$page=min($page,$PHPCMS['maxpage']);/*为了更好地避免在地址栏键入页数,这儿是要滴*/
}
?>
<ul>
{getsql="$sql"rows="20"page="$page"catid="$catid"ismaxpage="$ismaxpage"}
<li>{$r[title]}</li>
{/get}
</ul>
<div>{$pages}</div>
历经之上那么一翻倒腾,一开始的那实际效果就出来。理论依据便是需先为get标识提升一个参数,用以分辨是不是打开“列表页较大页数”,随后形成静态网页的情况下限定一下频道页,要不然它有多少形成是多少。
PHPCMS的确挺不错,但必须改善的地区一样也许多,许多关键点都没解决好,而一些作用都并不是给人用的。期待PHPCMS能愈来愈强劲!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)