dedecms代码研究四
partview php文件
之前,我们像掉进沼泽一样,看到无尽的变量,数组元素,莫名其面的东西摆在我们面前。今天,我们继续艰难前行,想办法走出partview类的泥潭。
上一篇,我们胡乱分析了partview类,完全搞不懂干什么的,里面弄了一堆变量,最清晰的我们只是知道几个生成首页的关键地方调用了DedeTagParse类的LoadTemplet方法和SaveTo方法。而在partview类定义的文件头部,包含了几个文件,我们就避开partview,先来看看这几个包含的文件吧。
require_once(DEDEINC.'/channelunit.class.PHP'); require_once(DEDEINC.'/typelink.class.php'); require_once(DEDEINC.'/ftp.class.php');
ftp.class.php,不用说,就是ftp相关操作类吧,我们之前看partview代码的时候,了解到,在生成静态文件的时候,使用了ftp相关方法,貌似就是可以远程写文件滴。至于怎么操作FTP的,其实就是封装了php函数库中ftp开头的相关函数而已,代码很简单,不说了。
typelink.class.php,我们也在partview代码里面见过的,打开看看吧。大概看了一下代码,里面是type的链接相关的东西,每个方法都声称一个指定type的链接html字符串。
其实,我有点隐约感觉到在dedecms中,type就是指栏目,不知道是不是这样。
channelunit.class.php里面是ChannelUnit类的定义,而且我们发现,这个ChannelUnit类没有被使用过。所以先不去看他。我们注意到,这里面还加载了两个文件:
require_once(DEDEINC."/dedetag.class.php");
require_once(DEDEINC."/channelunit.func.php"); //后面版本通过小助手形式写入 首页用到的MfTemplet函数 和partview中模板解析方法中用到的MakeOneTag就在里面
dedetag.class.php,打开看看
嗯,很复杂,但我们发现用于解析模板和生成文件的DedeTagParse类在里面,呵呵,先记住,以后慢慢研究。
channelunit.func.php里面都什么函数呢?打开一看,嗯,一堆变量,几个获取这种信息的函数,在我们浏览过程中,发现了两个函数:MfTemplet和MakeOneTag
MfTemplet函数
我们知道,在index.php中就用了MfTemplet函数,回头打开index.php看看怎么调用的:
$row['templet'] = MfTemplet($row['templet']);
我们之前了解过,$row['templet']保存的是default/index.htm这个值,就是模板文件路径。接下来我们看看MfTemplet函数都做了什么吧。
//模板目录规则
function MfTemplet($tmpdir)
{
$tmpdir = str_replace("{style}",$GLOBALS['cfg_df_style'],$tmpdir);
$tmpdir = ereg_replace("/{1,}","/",$tmpdir);
return $tmpdir;
}
注释里面写的是“模板目录规则”,再看看代码,哦,仿佛明白了一点儿了,就是替换模板路径里面的{style}为全局变量$GLOBALS['cfg_df_style']中的值。应该跟使用不同模板套系有关吧。意义不是很大就不再继续研究了。
我们看另一个函数MakeOneTag
这个在partview类的ParseTemplet方法中,此方法看名字就是解析模板,而方法的大部分代码都是在处理变量,看不大懂干什么的,最后一句调用了MakeOneTag函数。貌似主要解析模板就是靠这个函数了。使用如下:
MakeOneTag($this->dtp,$this);
第一个参数是DedeTagParse类的实例,第二个参数就是partview类实例的句柄啦。
我们看看channelunit.func.php中MakeOneTag这个函数是干什么的吧。嗯,只能大概看,因为好多东西,我们都不清楚啊,郁闷了。
这里面遍历了/include/taglib/下所有有lib后缀的文件,并把文件路径加入数组,然后对DedeTagParse类的CTag进行了遍历,由于我们没有研究DedeTagParse类,所以这块暂时不懂呢,不过也算小有进展了。看来还得回到partview里面去重新看看了。
构造函数没什么特别的,就是创建了DedeTagParse类实例,进行了一些设置而已。我们知道index.php创建partview实例后执行了SetTemplet方法,我们再看看SetTemplet方法吧。
这里面调用了DedeTagParse类实例的LoadTemplet方法,看来我们就得从这里入手,去抽丝剥茧啦。
分析不下去了~
留几个疑问下次再说。 1)DedeTagParse类LoadTemplet方法说开去。 2)MakeOneTag到底在搞什么。
看来只有彻底先把DedeTagParse类LoadTemplet方法搞懂才能进一步啊,目前还是一头雾水。阚荣华个人博客:www.kanronghua.com
dedecms代码研究四的更多相关文章
- dedecms代码研究二
dedecms代码研究(2)从index开始现在继续,今天讲的主要是dedecms的入口代码.先打开index.PHP看看里面是什么吧.打开根目录下的index.php嗯映入眼帘的是一个if语句.检查 ...
- dedecms代码研究五
上一次留几个疑问: 1)DedeTagParse类LoadTemplet方法. 2)MakeOneTag到底在搞什么. 从DedeTagParse开始前面,我们一直在dedecms的外围,被各种全局变 ...
- dedecms代码研究七
简单回顾一下,前面我们首页动态文件index.PHP调用arc.partview.class.php来初始化首页模板 arc.partview.class.php通过SetTemplet调用DedeT ...
- dedecms代码研究一
dedecms相信大家一定都知道这个cms系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统.而模板系统也是其他cms系统比较难模仿的的东西,这个东 ...
- dedecms代码研究六
今天讲的是dedecms最关键的东西,模板分析啦.也就是dedetag.class.php 里面的ParseTemplet方法 模板解析方法 先看看一个dedecms标签,大家心里有个数: {dede ...
- dedecms代码研究三
上次,我们从dedecms的index.PHP文件中了解到了很多信息,也提出了一些问题: 1)加载了/include/common.inc.php,里面做了哪些工作? 2)/include/arc.p ...
- (转)dedecms代码详解 很全面
dedecms代码研究(1)开篇dedecms 相信大家一定都知道这个cms 系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统.而模板系统也是其他 ...
- dedecms代码详解 很全面
dedecms代码研究(1)开篇dedecms 相信大家一定都知道这个cms 系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统.而模板系统也是其他 ...
- Ningx代码研究.
概述 研究计划 参与人员 研究文档 学习emiller的文章 熟悉nginx的基本数据结构 nginx 代码的目录结构 nginx简单的数据类型的表示 nginx字符串的数据类型的表示 内存分配相关 ...
随机推荐
- 关于Let和var声明变量的区别
Let是ES6中添加进来的一个关键字,用于声明变量,其法与var声明变量相同,不同点在于其作用域(块级). 举例可以看出其具体差别 for(var i=0;i<5;i++){ console.l ...
- JavaScript中__proto__与prototype的关系
一.所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function) 1 2 3 4 5 6 7 8 9 Number.__proto__ ...
- tomcat 清理日志
clear_log.sh #!/bin/bash #clear tomcat logs #log size (1M bytes),if lt, clear LOG_FILE_SIZE=1024000 ...
- Apache配置代理服务器的方法(1)
众所周知Apache是目前最优秀的HTTP服务器.实际上它不仅能当作服务器使用,也能够被用来架设代理服务器.本文就如何使用Apache架设HTTP代理服务器进行说明. 本文将基于Win32版的Apac ...
- liunx之:top命令解释
top命令经常用来监控linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 本文通过一个运行中的 ...
- python集成开发工具
1. IDLE http://python.org/idle/ (在 Python 发行版中自带) 2 BlackAdder 3 PythonWorks 4 Wing IDE http://wingw ...
- Android Hotpatch系列之-给release包打Patch
在默认debug包里面,是不对class做混淆的,所以Patch编写相对简单,但是应用在发布的时候都是release包,会对代码做混淆,此时class name ,field name,method ...
- IIS7错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")......
不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny")...... 解决方案: 因为 II ...
- Android AChartEngine 去除折线图黑边
通常使用AChartEngine画出的折线图,如果背景不是黑色,则会在折线图的坐标轴旁边出现黑边,如图所示: 试了好多设置,最后终于发现,去除黑边的设置是: mRenderer.setMarginsC ...
- Hadoop学习17--yarn配置篇-内存管理
这篇文章来自于:董的博客,记录备查 内存管理,主要是管理nodemanager上的物理内存和虚拟内存. YARN允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点上的内存会 ...