帝国cms二次开发:系统设置的重新赋值的用法

2021年2月13日17:41:06 发表评论 32 views

系统设置的重新赋值,这样做的目的只有一个,就是不修改系统文件,使二次开发更为绿色,不影响后续的系统升级。

一、帝国cms的全局变量

我们在模板中放入代码<?=$GLOBALS?>,比如网站首页模板中,刷新相应的页面,右键查看网页源代码,就可以在源码中看到帝国cms的全局变量和数组,这其中有 $public_r(系统设置数组),$class_r(栏目设置数组),$emod_r(模型设置数组),$fun_r(函数语言数组),$level_r(会员组数组)等等,上一篇文章中我们就是对$fun_r中的一个成员重新赋值实现了不修改源文件的英文列表分页效果。

数组的概念:

数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体。数组的每个实体都包含两项:键和值。

这里举一个生动的例子,周星驰的《唐伯虎点秋香》电影中,唐伯虎混入华府做了低等下人,当时武状元说“小子,从今天开始你就是华府的低等下人,9527就是你的终身代号。”这里的低等下人就是一个数组,他指的是一个整体而非一个,其中9527就是数组一个成员的KEY值,唐伯虎这个人就是9527这个KEY的VALUE值;我们把低等下人这个数组写成PHP数组格式,请看下面的代码:

帝国cms二次开发:系统设置的重新赋值的用法

上面明白了什么是数字,下面我们再来看一下帝国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二次开发:系统设置的重新赋值的用法

对系统设置进行重新赋值的用途

我们来说个例子,帝国CMS栏目列表页的分页函数都是用系统设置中的分页函数,这个统一在系统设置中更改,存储在$public_r数组中,那么咱们想在某个列表页使用不同的分页函数,能否实现呢?当然是可以的。

下面cms大学小编来详细说一下,如何实现某个列表使用不同的分页函数。

1、这个列表页用的分页标签是[!–show.listpage–],为帝国cms的默认分页变量

2、对应的这个分页变量在$public_r数组中键名为listpagelistfun

3、在/e/class/userfun.php写入一个新的分页函数,cmsdx_listpage(),完整代码如下(由系统自带的列表式分页函数修改而来):

  1. <?php
  2. //test listpage
  3. function cmsdx_listpage($num,$page,$dolink,$type,$totalpage,$line,$ok,$search=""){
  4.     global $fun_r,$public_r;
  5.     if($num<=$line)
  6.     {
  7.         $pager['showpage']='';
  8.         return $pager;
  9.     }
  10.     $page_line=$public_r['listpagelistnum'];
  11.     $snum=2;
  12.     //$totalpage=ceil($num/$line);//取得总页数
  13.     $firststr='<a title="Total record"> <b>'.num2str($num).'</b> </a>  ';
  14.     //上一页
  15.     if($page<>1)
  16.     {
  17.         $toppage='<a href="'.$dolink.'index'.$type.'">'.$fun_r['startpage'].'</a> ';
  18.         $pagepr=$page-1;
  19.         if($pagepr==1)
  20.         {
  21.             $prido="index".$type;
  22.         }
  23.         else
  24.         {
  25.             $prido="index_".$pagepr.$type;
  26.         }
  27.         $prepage='<a href="'.$dolink.$prido.'">'.$fun_r['pripage'].'</a>';
  28.     }
  29.     //下一页
  30.     if($page!=$totalpage)
  31.     {
  32.         $pagenex=$page+1;
  33.         $nextpage=' <a href="'.$dolink.'index_'.$pagenex.$type.'">'.$fun_r['nextpage'].'</a>';
  34.         $lastpage=' <a href="'.$dolink.'index_'.$totalpage.$type.'">'.$fun_r['lastpage'].'</a>';
  35.     }
  36.     $starti=$page-$snum<1?1:$page-$snum;
  37.     $no=0;
  38.     for($i=$starti;$i<=$totalpage&&$no<$page_line;$i++)
  39.     {
  40.         $no++;
  41.         if($page==$i)
  42.         {
  43.             $is_1="<b>";
  44.             $is_2="</b>";
  45.         }
  46.         elseif($i==1)
  47.         {
  48.             $is_1='<a href="'.$dolink.'index'.$type.'">';
  49.             $is_2="</a>";
  50.         }
  51.         else
  52.         {
  53.             $is_1='<a href="'.$dolink.'index_'.$i.$type.'">';
  54.             $is_2="</a>";
  55.         }
  56.         $returnstr.=' '.$is_1.num2str($i).$is_2;
  57.     }
  58.     $returnstr=$firststr.$toppage.$prepage.$returnstr.$nextpage.$lastpage;
  59.     $pager['showpage']=$returnstr;
  60.     return $pager;
  61. }
  62. function num2str($num) {
  63.     if(!is_numeric($num)) return false;
  64.     $ret = '';
  65.     if($num < 0) {
  66.         $ret = '负';
  67.         $num = -$num;
  68.     }
  69.     $zhNumArray = array(
  70.         "1" => "一",
  71.         "2" => "二",
  72.         "3" => "三",
  73.         "4" => "四",
  74.         "5" => "五",
  75.         "6" => "六",
  76.         "7" => "七",
  77.         "8" => "八",
  78.         "9" => "九",
  79.         "0" => "零",
  80.     );
  81.     $bitStrArray = array(
  82.         "1" => "",
  83.         "10" => "十",
  84.         "100" => "百",
  85.         "1000" => "千",
  86.         "10000" => "万",
  87.         "100000000" => "亿",
  88.     );
  89.     $prebit = 0;//上次记录的位数
  90.     krsort($bitStrArray);
  91.     foreach($bitStrArray as $bit => $name) {
  92.         $bit = floatval($bit);
  93.         if($num >= $bit) {
  94.             $tmpNum = floor($num / $bit);
  95.             if($tmpNum >= 10) {
  96.                 $tmpRet = num2str($tmpNum);
  97.                 $ret .= $tmpRet . $name;
  98.             } else {
  99.                 if($prebit/$bit > 10) {//按照中文习惯补零
  100.                     $ret .= '0';
  101.                 }
  102.                 $ret .= $tmpNum . $name;
  103.             }
  104.             $prebit = $bit;
  105.             $num = fmod($num$bit);//取模
  106.         }
  107.     }
  108.     $ret = str_replace(array_keys($zhNumArray), array_values($zhNumArray), $ret);
  109.     return $ret;
  110. }
  111. ?>

4、接下来我们要在相应的列表页模板最顶部加入赋值代码<?php $public_r[listpagelistfun]=”cmsdx_listpage”;?>(备注:这里一定要使用双引号,否则会提示函数未定义)

(说明:网站后台 - 系统参数设置 - 信息设置 - 列表分页函数(列表) 默认填写的函数是sys_ShowListMorePage,我们现在需要在某个栏目列表页使用另外的函数,而大部分栏目页仍然采用默认的函数,所以我们在userfun.php文件中封装了一个新的函数,并且将函数名赋值给了$public_r[listpagelistfun],这样使用这个列表页模板的栏目都会使用这个新的分页函数了)

总结

这里只是写了对分页函数重新赋值的用法,对于其他数组内的设置也可通过此方法进行赋值,大家可以举一反三,用在自己的帝国cms二次开发中。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: