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字符串的数据类型的表示 内存分配相关 ...
随机推荐
- How To Use Hbase Bulk Loading
最近在学习hbase,学到利用如何将数据导入到hbase中,采用的方式是批量导入:bulk load的方法,中间出现了一些问题,下面将执行的步骤记录一下,以供日后查阅: 说明:导入的方式是将csv文件 ...
- docker 源码分析 二(基于1.8.2版本),docker client与daemon交互
(2) 那我们通过docker客户端发送一个命令,docker是怎样接收到并处理的呢,我们就举个例子来看一下,比如docker pull 命令: 我们回到 docker/docker.go 中,在上一 ...
- git 添加ssh的方法 push免登陆
在github.com上 建立了一个小项目,可是在每次push 的时候,都要输入用户名和密码,很是麻烦 原因是使用了https方式 push 在termail里边 输入 git remote -v ...
- 12-8下午 php语法
<?php //var_dump(empty($a)); //判断变量是否为空//var_dump(isset($a)); //判断变量是否定义//$a = 10;//unset($a); // ...
- PHP7在linux下的安装步骤
安装mcrypt: yum install -y php-mcrypt libmcrypt libmcrypt-devel 升级bison: cd /var/soft/ wget http://ftp ...
- Gvim+Emmet.vim 那些事。
转自:http://www.jianshu.com/p/67fa1e2114c5 背景 HTML和CSS的写法相对固定,而且重复的工作特别多,特别是尖括号实在是很烦.使用Emmet至少能帮你节省一半的 ...
- python数据结构与算法——字典树
class TrieTree(): def __init__(self): self.root = {} def addNode(self,str): # 树中每个结点(除根节点),包含到该结点的单词 ...
- ODOO从哪里开始??OpenERP的第一根线头儿
Windows下ODOO源码启动: python odoo-bin -w odoo -r odoo --addons-path=addons,../mymodules --db-filter=mydb ...
- java设计6大设计原则
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 数据库之mysql存储程序
什么时候会用到存储过程 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度2.当对数据库进行复杂操作时 ...