帝国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/

呵呵 厉害!只是了解了解了帝国!
还没折腾过cms
@zwwooooo
有时间欢迎折腾下
我的远程保存图片功能不知道是怎么回事就是不管用了,我在论坛上找了一天,各种方法都试过了还是没有办法,不是php配置问题,不是dns设置问题,也试过将6.0升级到6.5,都没有效果。我想要直接在代码里面修改后台添加信息中的远程保存图片功能,请问有什么其他的思路?
@gaogao
逐步排除:
1.装个新帝国系统在服务器排除是否是服务器问题
2.如果新系统同样不能保存,那确定是服务器问题
3.如果新系统能保存,那在老系统文件上找问题
O(∩_∩)O谢谢,可能是我们的服务器真的出问题了,没想到帝国对服务器要求还挺高的!不过你的博客也很高级,连用的什么留言器都显示,O(∩_∩)O~
哈哈,帝国的胃口应该没有那么高级;我的博客就是下个插件而已,我还在琢磨/国旗/操作系统版本/浏览器版本这些杂不显示呢~
呵呵,现在整的都显示了昂,呵呵,挺牛的,支持一下!
@动手了就会有效果,练习和思考会有很大收获的;
TL兄实验过ECMS的按访问生成没?比如http://localhost/dir/file1.html 这个文件并不存在,当访问时候,根据htaccess的urlrewrite规则触发特定脚本的特定功能,自动生成该文件。同时该html页面被访问时,会调用指定的js脚本,脚本请求相应php脚本,php根据模板hash值是否改变,来判断时候重新生成该html页面。呃,纠结的共呢个
这个没有做过,这个功能的作用是干啥呢?
难道你是想没有访问的页面不去生成,抛弃后台手动重新生成HTML(主要是内容页面)?
按访问生成,实际上就是自动生成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真是重新造车轮,要人命,所以就想着改改帝国看能不能实现。
测试中……
页面生成条件:
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_系列函数。你现测试下,有问题我们再讨论哈
感谢TL兄测试并回复。
惭愧,对ECMS一直浅尝辄止,这两天研究下,仍旧有很多地方不太了解。
动态生成我也注意到了。目前打算采用的方案是,根据将所有静态文件生成到cache目录,根据htaccess将所有请求转发到一个PHP入口页面。
入口页面根据ecms的生成规则,读取缓存,对A标记等路径做下处理,直接echo。
对于尚未生成的文件,则include远程调用动态页面后,再做处理。
模板更新后,页面受访自动更新,打算使用ECMS的自定义函数功能,来检测模板hash以及修改时间等。
帝国比我想象的要强大灵活得多!我再多多熟悉下。
再次感谢老哥的热心!:)
不客气,有什么问题回来讨论
测试下FF的User Agent插件
伪造了个OSX~
我看了你弄得那个关于帝国的数据字典的详细说明,我觉得非常好,但是我对帝国内部的文件还不是很了解,比如我现在想在“添加栏目”那里给栏目添加几个属性字段,现在数据库里面字段是添加好了,可是不知道改后台的那些文件来使添加的字段起到相应的作用,希望指点!
我也在探索的过程中,空泛的问题我并不能给你一个好的答案;
我建议:
1.使用PHPxref生成帝国CMS的交叉参考文档,根据表单中ACTION地址打开文档中的文件 查看相关函数
2.使用DW CS4 或者以上,打开PHP文件可以打开REQUIRE/INCLUDE相对路径的文件 这样方便查看相关函数
3.提问写明 你想做的是什么 这个功能有什么作用 已经做了什么 疑问是什么,详细描述可以提高你得到想要的答案的几率;
相关文章可以看:
http://www.trylife.cn/ecms-repeatedly-development-tools-and-soft/
http://www.trylife.cn/dreamweaver-cs5-width-ecms-repeatedly-development/
老哥,我想问一下。在自定义列表页有什么变量用?
我想要$pagetitle.我用了很多很多都没有用?
只有$classid可以输出模板ID。
你好,最好的就是寻求方法,上文中其实也给了查找模板中生成状态下调用的变量;
将
< ?=print_r($GLOBALS)?>放到你的模板里->生成页面->打开页面查看源代码->你会发现有很多数组 这些数组内容就是你能使用的变量