帝国CMS模板不为人知的技巧2 – 对系统设置的重新赋值

Posted on Monday, July 26th, 2010 at 22:59.   315 Hits

引言:继续上一篇:帝国 CMS模板不为人知的技巧 – 对语言包重新赋值应用trylife和大家一起看看 帝国CMS不为人知的技巧2 – 对系统设置的重新赋值;上篇文章有童鞋看了之后觉得一无所获;或者觉得看了之后没什么价值;trylife写这些文章只是指引月亮的方向,各位童鞋不要在意trylife手指本身;我们做帝国CMS二次开发尽量不修改系统文件的情况下实现功能,这样可以达到不影响升级这样的效果;废话不多说我们来看正文。

一 查看模板中的全局变量

我们在模板任意位置放入代码<?=$GLOBALS?>,比如列表模板,重新生成列表页面;查看页面源代码,我们可以看到变量和数组的整齐格式;我们可以看到 $public_r(系统设置数组),$class_r(栏目设置数组),$emod_r(模型设置数组),$fun_r(函数语言数组),$level_r(会员组数组)等等;还记得上一篇(帝国 CMS模板不为人知的技巧 – 对语言包重新赋值应用)中的例子就是通过对$fun_r中的一个成员重新赋值实现了英文列表分页;

什么是数组:你可以回想下 周星驰的《唐伯虎点秋香》唐伯虎混入画府当低等下人,当时武状元说“小子,从今天开始,你就是华府的低等下人,9527就是你的终身代号。开始做事!”这里的低等下人就是一个数组,其中9527就是数组一个成员KEY值,唐伯虎这个人就是就是9527这个KEY的VALUE值;我们把低等下人这个数组变成PHP数组:

回到帝国CMS,打开e/class/config.php 搜$public_r 这里的$pulic_r就是一个数组(暂时不讨论多元数组),看到上下图是部分$public_r的截图,sitename,newsurl都是key;对应的帝国网站管理系统,http://www.trylife.cn 这些是VALUE值;你可以在任意模板中加入<?=$public_r[KEY值]?>重新生成页面可以得到相对应的VALUE值,比如<?=$public_r[sitename]?>得到你系统设置的网站名称;

二 对系统设置的重新赋值能干点啥

实例:我们知道帝国CMS所有分页函数遵循统一遵循系统设置中的分页函数,那么我想某个列表使用不同分页函数呢,trylife的答案是可以的;
下面trylife就做了一个比较无聊的例子实现某个列表使用不同的分页函数(为了区分这个列表的数字做成了中文数字冏);
1.这个特殊的列表用的分页变量是[!--show.listpage--]
2.对应的这个分页变量在$public_r数组中KEY值为listpagelistfun
3.在e/user/userfun.php加了一个新的分页函数 trylife_listpage() 点击下载测试函数userfun_function_listpage.php.tar
4.在这个列表模板的顶部加入了一段代码<?php $public_r[listpagelistfun]=’trylife_listpage’;?>

(备注:帝国CMS后台->系统参数设置->信息设置->列表分页函数(列表) 模式设置是 sys_ShowListMorePage,我们现在针对某个特定的列表要使用不同的分页函数,所以我们在userfun.php写了一个新的函数,并且将函数名赋值给了$public_r[listpagelistfun];这样使用我们修改的模板的栏目,将会使用我们给他设置的特定的分页函数,也就是trylife_listpage这个函数;)

(上图)帝国CMS特定列表不同分页样式 效果

三 小结

1.列表分页函数(下拉) ,内容分页函数都可以用例子中的方法来做不同模板的不同分页
2.几个分页

分页函数名 数组变量[KEY] 默认函数名 变量
列表分页函数(下拉) $public_r[listpagefun] sys_ShowListPage [!--show.page--]
列表分页函数(列表) $public_r[listpagelistfun] sys_ShowListMorePage [!--show.listpage--]
内容分页函数 $public_r[textpagefun] sys_ShowTextPage
sys_ShowTextPageSelect
[!--page.url--]
[!--title.select--]

四 其他

除了分页这块,还有很多其他的方面可以赋值,你想到了什么呢?欢迎评论讨论

转载写明出处 原文地址:http://www.trylife.cn/ecms-unkonwn-template-skill-2/

Tags: , ,

22 条评论 to “帝国CMS模板不为人知的技巧2 – 对系统设置的重新赋值”

  1. 捷易通 Windows XPWindows XP Internet Explorer 8.0Internet Explorer 8.0

    呵呵 厉害!只是了解了解了帝国!

  2. zwwooooo Windows XPWindows XP Firefox 3.6.8Firefox 3.6.8

    还没折腾过cms

  3. gaogao Windows XPWindows XP Firefox 3.6.8Firefox 3.6.8

    我的远程保存图片功能不知道是怎么回事就是不管用了,我在论坛上找了一天,各种方法都试过了还是没有办法,不是php配置问题,不是dns设置问题,也试过将6.0升级到6.5,都没有效果。我想要直接在代码里面修改后台添加信息中的远程保存图片功能,请问有什么其他的思路?

    • TryLife Ubuntu 10.04 江湖人称清醒的雪地猞猁Ubuntu 10.04 江湖人称清醒的雪地猞猁 Firefox 3.6.8Firefox 3.6.8

      @gaogao
      逐步排除:
      1.装个新帝国系统在服务器排除是否是服务器问题
      2.如果新系统同样不能保存,那确定是服务器问题
      3.如果新系统能保存,那在老系统文件上找问题

      • gaogao Windows XPWindows XP Firefox 3.6.8Firefox 3.6.8

        O(∩_∩)O谢谢,可能是我们的服务器真的出问题了,没想到帝国对服务器要求还挺高的!不过你的博客也很高级,连用的什么留言器都显示,O(∩_∩)O~

        • TryLife Ubuntu 10.04 江湖人称清醒的雪地猞猁Ubuntu 10.04 江湖人称清醒的雪地猞猁 Firefox 3.6.8Firefox 3.6.8

          哈哈,帝国的胃口应该没有那么高级;我的博客就是下个插件而已,我还在琢磨/国旗/操作系统版本/浏览器版本这些杂不显示呢~

          • gaogao Windows XPWindows XP Firefox 3.6.8Firefox 3.6.8

            呵呵,现在整的都显示了昂,呵呵,挺牛的,支持一下!

            • TryLife Ubuntu 10.04 江湖人称清醒的雪地猞猁Ubuntu 10.04 江湖人称清醒的雪地猞猁 Firefox internalFirefox internal

              @动手了就会有效果,练习和思考会有很大收获的;

  4. 楚吟风 Windows XPWindows XP Firefox 3.0.17Firefox 3.0.17

    TL兄实验过ECMS的按访问生成没?比如http://localhost/dir/file1.html 这个文件并不存在,当访问时候,根据htaccess的urlrewrite规则触发特定脚本的特定功能,自动生成该文件。同时该html页面被访问时,会调用指定的js脚本,脚本请求相应php脚本,php根据模板hash值是否改变,来判断时候重新生成该html页面。呃,纠结的共呢个

    • TryLife Ubuntu 10.04 江湖人称清醒的雪地猞猁Ubuntu 10.04 江湖人称清醒的雪地猞猁 Firefox 3.6.8Firefox 3.6.8

      这个没有做过,这个功能的作用是干啥呢?
      难道你是想没有访问的页面不去生成,抛弃后台手动重新生成HTML(主要是内容页面)?

      • 楚吟风 Windows XPWindows XP Firefox 3.6.8Firefox 3.6.8

        按访问生成,实际上就是自动生成html,有些页面没有人访问,但是搜索引擎抓取,也会触发生成的。另外,这里叫HTML不太合适了,叫静态文件型缓存比较合适。觉得这些文件太占空间,直接删除缓存目录即可。

        以前做过一次比较http://www.mingchennet.com/tec/code/php/56.htm,刚又做了个图表,

        比如http://www.cnliebiao.com/tianqi/area=469023&date=2010-08-07.htm 就是按访问生成的。当然由于常识性错误,将所有的htm都生成在一个目录里,几十万文件严重影响服务器性能,于是删除目录,禁用生成功能了。自己写个CMS真是重新造车轮,要人命,所以就想着改改帝国看能不能实现。

        • TryLife Ubuntu 10.04 江湖人称清醒的雪地猞猁Ubuntu 10.04 江湖人称清醒的雪地猞猁 Firefox 3.6.8Firefox 3.6.8

          测试中……

        • TryLife Ubuntu 10.04 江湖人称清醒的雪地猞猁Ubuntu 10.04 江湖人称清醒的雪地猞猁 Firefox 3.6.8Firefox 3.6.8

          页面生成条件:
          1.访问- >页面未生成->生成 好办你知道的
          2.访问->模板更改 重新生成
          a.内容模板没有记录更改 http://www.phome.net/doc/dbdoc/page/phome_enewsnewstemp.html
          b.模板缓存在e/data/tmp/不过文件生成时间不能作为模板是否更新的条件,还是要另行制作模板更改记录缓存存

          原油生成相关的内容:
          1.想起来基本没用过的功能(原有),动态生成栏目里可以设置
          2.动态生成 e/action/ShowInfo/?classid=36&id=75 DoGetHtml()定义在e/class/functions.php 生成条件是信息行记录的havehtml int(1) value(0/1) 0的情况下生成;这个地方可以参考;并JS引用

          PS:觉得也可以在动态内容脚本更改,使用rewrite,不重新生成的情况下加载已经生成的HTML。昨天一个朋友(多多哥)提示用ob_系列函数。你现测试下,有问题我们再讨论哈

          • 楚吟风 Windows XPWindows XP Firefox 3.6.8Firefox 3.6.8

            感谢TL兄测试并回复。
            惭愧,对ECMS一直浅尝辄止,这两天研究下,仍旧有很多地方不太了解。
            动态生成我也注意到了。目前打算采用的方案是,根据将所有静态文件生成到cache目录,根据htaccess将所有请求转发到一个PHP入口页面。
            入口页面根据ecms的生成规则,读取缓存,对A标记等路径做下处理,直接echo。
            对于尚未生成的文件,则include远程调用动态页面后,再做处理。
            模板更新后,页面受访自动更新,打算使用ECMS的自定义函数功能,来检测模板hash以及修改时间等。
            帝国比我想象的要强大灵活得多!我再多多熟悉下。
            再次感谢老哥的热心!:)

          • TryLife Ubuntu 10.04 江湖人称清醒的雪地猞猁Ubuntu 10.04 江湖人称清醒的雪地猞猁 Firefox internalFirefox internal

            不客气,有什么问题回来讨论

  5. 楚吟风 Mac OS XMac OS X Safari 4.0Safari 4.0

    测试下FF的User Agent插件

  6. gaogao Windows XPWindows XP Firefox 3.6.8Firefox 3.6.8

    我看了你弄得那个关于帝国的数据字典的详细说明,我觉得非常好,但是我对帝国内部的文件还不是很了解,比如我现在想在“添加栏目”那里给栏目添加几个属性字段,现在数据库里面字段是添加好了,可是不知道改后台的那些文件来使添加的字段起到相应的作用,希望指点!

  7. daoxiaomian Windows VistaWindows Vista Google Chrome 6.0.472.25Google Chrome 6.0.472.25

    老哥,我想问一下。在自定义列表页有什么变量用?

    我想要$pagetitle.我用了很多很多都没有用?

    只有$classid可以输出模板ID。

    • TryLife Ubuntu 10.04 江湖人称清醒的雪地猞猁Ubuntu 10.04 江湖人称清醒的雪地猞猁 Firefox 3.6.8Firefox 3.6.8

      你好,最好的就是寻求方法,上文中其实也给了查找模板中生成状态下调用的变量;
      < ?=print_r($GLOBALS)?>放到你的模板里->生成页面->打开页面查看源代码->你会发现有很多数组 这些数组内容就是你能使用的变量

Leave a Reply