上一篇我们学习了帝国cms变量赋值的技巧,这里我们再来看一下对系统设置的重新赋值,这样做的目的只有一个,就是不修改系统文件,使二次开发更为绿色,不影响后续的系统升级。
一、帝国cms的全局变量
我们在模板中放入代码<?=$GLOBALS?>,比如网站首页模板中,刷新相应的页面,右键查看网页源代码,就可以在源码中看到帝国cms的全局变量和数组,这其中有 $public_r(系统设置数组),$class_r(栏目设置数组),$emod_r(模型设置数组),$fun_r(函数语言数组),$level_r(会员组数组)等等,上一篇文章中我们就是对$fun_r中的一个成员重新赋值实现了不修改源文件的英文列表分页效果。
数组的概念:
数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体。数组的每个实体都包含两项:键和值。
这里举一个生动的例子,周星驰的《唐伯虎点秋香》电影中,唐伯虎混入华府做了低等下人,当时武状元说“小子,从今天开始你就是华府的低等下人,9527就是你的终身代号。”这里的低等下人就是一个数组,他指的是一个整体而非一个,其中9527就是数组一个成员的KEY值,唐伯虎这个人就是9527这个KEY的VALUE值;我们把低等下人这个数组写成PHP数组格式,请看下面的代码:
上面明白了什么是数字,下面我们再来看一下帝国cms的数组,找到/e/class/config.php文件并打开,在其中搜索$public_r,这里的$pulic_r就是一个数组,存储了帝国cms的系统设置,下图是部分$public_r数字键值的截图,sitename,newsurl都是key,对应的帝国网站管理系统是这个键(key)的VALUE值;你可以在任意模板中加入<?=$public_r[KEY值]?>重新生成页面可以得到相对应的VALUE值,比如<?=$public_r[newsurl]?>得到你的网站地址;
对系统设置进行重新赋值的用途
我们来说个例子,帝国CMS栏目列表页的分页函数都是用系统设置中的分页函数,这个统一在系统设置中更改,存储在$public_r数组中,那么咱们想在某个列表页使用不同的分页函数,能否实现呢?当然是可以的。
下面cms大学小编来详细说一下,如何实现某个列表使用不同的分页函数。
1、这个列表页用的分页标签是[!–show.listpage–],为帝国cms的默认分页变量
2、对应的这个分页变量在$public_r数组中键名为listpagelistfun
3、在/e/class/userfun.php写入一个新的分页函数,cmsdx_listpage(),完整代码如下(由系统自带的列表式分页函数修改而来):
折叠展开PHP 代码
- <?php
-
- function cmsdx_listpage($num,$page,$dolink,$type,$totalpage,$line,$ok,$search=""){
- global $fun_r,$public_r;
- if($num<=$line)
- {
- $pager['showpage']='';
- return $pager;
- }
- $page_line=$public_r['listpagelistnum'];
- $snum=2;
-
- $firststr='<a title="Total record"> <b>'.num2str($num).'</b> </a> ';
-
- if($page<>1)
- {
- $toppage='<a href="'.$dolink.'index'.$type.'">'.$fun_r['startpage'].'</a> ';
- $pagepr=$page-1;
- if($pagepr==1)
- {
- $prido="index".$type;
- }
- else
- {
- $prido="index_".$pagepr.$type;
- }
- $prepage='<a href="'.$dolink.$prido.'">'.$fun_r['pripage'].'</a>';
- }
-
- if($page!=$totalpage)
- {
- $pagenex=$page+1;
- $nextpage=' <a href="'.$dolink.'index_'.$pagenex.$type.'">'.$fun_r['nextpage'].'</a>';
- $lastpage=' <a href="'.$dolink.'index_'.$totalpage.$type.'">'.$fun_r['lastpage'].'</a>';
- }
- $starti=$page-$snum<1?1:$page-$snum;
- $no=0;
- for($i=$starti;$i<=$totalpage&&$no<$page_line;$i++)
- {
- $no++;
- if($page==$i)
- {
- $is_1="<b>";
- $is_2="</b>";
- }
- elseif($i==1)
- {
- $is_1='<a href="'.$dolink.'index'.$type.'">';
- $is_2="</a>";
- }
- else
- {
- $is_1='<a href="'.$dolink.'index_'.$i.$type.'">';
- $is_2="</a>";
- }
- $returnstr.=' '.$is_1.num2str($i).$is_2;
- }
- $returnstr=$firststr.$toppage.$prepage.$returnstr.$nextpage.$lastpage;
- $pager['showpage']=$returnstr;
- return $pager;
- }
-
-
- function num2str($num) {
- if(!is_numeric($num)) return false;
-
- $ret = '';
- if($num < 0) {
- $ret = '负';
- $num = -$num;
- }
-
- $zhNumArray = array(
- "1" => "一",
- "2" => "二",
- "3" => "三",
- "4" => "四",
- "5" => "五",
- "6" => "六",
- "7" => "七",
- "8" => "八",
- "9" => "九",
- "0" => "零",
- );
-
- $bitStrArray = array(
- "1" => "",
- "10" => "十",
- "100" => "百",
- "1000" => "千",
- "10000" => "万",
- "100000000" => "亿",
- );
-
- $prebit = 0;
- krsort($bitStrArray);
- foreach($bitStrArray as $bit => $name) {
- $bit = floatval($bit);
- if($num >= $bit) {
- $tmpNum = floor($num / $bit);
- if($tmpNum >= 10) {
- $tmpRet = num2str($tmpNum);
- $ret .= $tmpRet . $name;
- } else {
- if($prebit/$bit > 10) {
- $ret .= '0';
- }
- $ret .= $tmpNum . $name;
- }
- $prebit = $bit;
- $num = fmod($num, $bit);
- }
- }
-
- $ret = str_replace(array_keys($zhNumArray), array_values($zhNumArray), $ret);
- return $ret;
- }
- ?>
4、接下来我们要在相应的列表页模板最顶部加入赋值代码<?php $public_r[listpagelistfun]=”cmsdx_listpage”;?>(备注:这里一定要使用双引号,否则会提示函数未定义)
(说明:网站后台 - 系统参数设置 - 信息设置 - 列表分页函数(列表) 默认填写的函数是sys_ShowListMorePage,我们现在需要在某个栏目列表页使用另外的函数,而大部分栏目页仍然采用默认的函数,所以我们在userfun.php文件中封装了一个新的函数,并且将函数名赋值给了$public_r[listpagelistfun],这样使用这个列表页模板的栏目都会使用这个新的分页函数了)
总结
这里只是写了对分页函数重新赋值的用法,对于其他数组内的设置也可通过此方法进行赋值,大家可以举一反三,用在自己的帝国cms二次开发中。