zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    es6.8集群部署(ssl认证)+nfs备份(生产)
    spool
    dataguard unname
    zabbix监控mysql主从同步可用性
    企业微信发送消息
    安装ruby
    binlog2sql
    xtrabackup备份异地恢复+binlog日志应用
    5.7.29重新部署主从
    centos7 图形界面启动
  • 原文地址:https://www.cnblogs.com/ronghua/p/5935895.html
Copyright © 2011-2022 走看看