phpcms修改模版的内部实现

今天是我知道phpcms存在的第二天,对于它的大部分代码,我只能用晕来形容!不过总算还有点收获~嘿嘿 根据老板的要求,我研究了一下phpcms修改模版的机制。现在貌似有点开窍了~赶紧写下来,忘了就挂了 哈哈

以修改首页模版(index.html)为例,当点击保存后,其提交的信息如下:http://127.0.0.1/phpcms2008_utf8/phpcms/admin.php?mod=phpcms&file=template&action=edit&template=contribute&save=1。

可以看到,点击保存后,执行权仍回到了admin.php页上,只是多了几个参数。于是我很自然的想,在该页面必然存在处理这些参数的代码~可是,%^$#@*之后,就是找不到!!!我晕啊...眼泪都快来了~然后,又是%^$#@*之后,我终于注意到了这么一句(我用的是phpcms2008)“if(!@include PHPCMS_ROOT.(isset($M['path']) ? $M['path'] : '').'admin/'.$file.'.inc.php') showmessage("The file ./{$M['path']}admin/{$file}.inc.php is not exists!");”,去掉这一句文件不能保存成功!哈哈 这是不是就意味着,一切的奥妙尽在于此呢???于是我进入这一句所指的template.inc.php(在PHPCMS_ROOT/admin/template.inc.php)。

嘿嘿~正如我所料,我在里面看到了一个以$action为参数的switch语句,其中一个就是“edit”,这不正是我要找的吗?进入这个语句块继续观察,其中最核心的一句莫过于“cache_write('name.inc.php', $names, $templatedir);”。正是由它实现了修改后内容的写入!!!但这个函数显然不是PHP原生态的,它定义在/include/global.func.php文件中。它通过调用file_put_contents()完成写入功能!

说白了就这么简单 呵呵...可是开始的时候,一下子把这么多的文件和目录摆在你面前,难免乱了手脚,因此很多人放弃了....这句话或许还可以这么说:真理并不复杂,只是需要你付出等价的耐心~

你可能感兴趣的:(phpcms)