zoukankan      html  css  js  c++  java
  • dedecms代码研究二

    dedecms代码研究(2)从index开始

    现在继续,今天讲的主要是dedecms的入口代码。

    先打开index.PHP看看里面是什么吧。打开根目录下的index.php嗯

    映入眼帘的是一个if语句。检查/data/common.inc.php是否存在。如果不存在就跳转到安装界面。

    if(!file_exists(dirname(__FILE__).'/data/common.inc.php'))
    {
        header('Location:install/index.php');
        exit();
    }

    我们来到/data/看看这个目录和common.inc.php。

    打开/data/,里面很多目录和文件,有上传的临时目录,模板缓存,压缩的临时目录,各种数据库里保存的系统配置信息的缓存文件以及其他的一些东西,就一个字乱~

    好吧,我们打开common.inc.php。哦,原来就是保存了数据库连接的相关变量而已。说白了,就是dedecms的数据库连接配置文件,估计是安装完系统生成的。所以/index.php会检查它是否存在。

     我们回到/index.php中继续往下看,第二个if语句,判断GET请求“upcache”是否存在,存在就更新首页缓存,不存在就直接301跳转到index.html,也就是dedecms的静态首页(记住,dedecms的前台页面都是系统生成的静态页面)。

    想想接下来我们要研究什么?对,就是GET请求“upcache”存在的时候,更新首页缓存这小段代码啦。代码如下:

    if(isset($_GET['upcache']) || !file_exists('index.html'))
    {
        require_once (dirname(__FILE__) . "/include/common.inc.php");
        require_once DEDEINC."/arc.partview.class.php";
        $GLOBALS['_arclistEnv'] = 'index';
        $row = $dsql->GetOne("Select * From `#@__homepageset`");
        $row['templet'] = MfTemplet($row['templet']);
        $pv = new PartView();
        $pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
        $row['showmod'] = isset($row['showmod'])? $row['showmod'] : 0;
        if ($row['showmod'] == 1)
        {
            $pv->SaveToHtml(dirname(__FILE__).'/index.html');
            include(dirname(__FILE__).'/index.html');
            exit();
        } else {
            $pv->Display();
            exit();
        }
    }
    else
    {
        header('HTTP/1.1 301 Moved Permanently');
        header('Location:index.html');
    }

    ①加载/include/common.inc.php,估计是一些常用函数和加载其他系统函数和类的文件。

    ②接下来又加载了DEDEINC."/arc.partview.class.php",注意DEDEINC这个常量,我们知道经过前期对dedecms目录结构观察,arc.partview.class.php是在/include目录下的,而加载/include/common.inc.php却没有用DEDEINC这个常量,这说明,common.inc.php里面定义了DEDEINC这个常量,所以后面得以使用,也印证了common.inc.php大体作用就是系统运行基本部分,都在这里面啦。我们不急着进common.inc.php,继续把index.php的更新缓存代码看完。

    第三句,设置了一个全局变量:$GLOBALS['_arclistEnv'] = 'index';

    第四行,获取一个表'#@__homepageset'的所有记录,当然如果你看下数据库,里面没有“#@__homepageset”这个表,我们判断,是数据库操作相关函数把表名用表名前缀替换了一下前半部分,这个都不重要了,重要的是,通过这句,获取了首页的相关配置信息,我们打开数据库里面的dede_homepageset表,晕,就一条记录,俩字段,基本猜到了,一个是首页模板名称,一个是生成的静态文件的位置。

    回来继续分析前面的代码

    $row['templet'] = MfTemplet($row['templet']);

    通过MfTemplet函数好像把$row['templet']进行了某些转换。我们记下MfTemplet函数,以待后面挖掘。

    接下来,就是new了一个PartView类,看这个名字,我们就知道了前面加载arc.partview.class.php的作用啦。

    至于这个PartView类有什么作用,我们继续看代码。看了下面两行,我想大家应该都明白啦

    $pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);

    $pv->SaveToHtml(dirname(__FILE__).'/index.html');

    创建个视图对象(PartView类的实例,我们姑且叫视图对象),设置模板,通过SaveToHtml方法,把最后生成的页面写到指定位置。

    首页生成完毕,接下来就是把生成的静态文件通过include的形式显示出来,然后exit中断页面解析。

    至此,/index.php就分析完啦。

    它先是通过/data/common.inc.php,判断是否安装了dedecms或者说判断是否定义了数据库配置信息,好为后面操作打下基础。
    
    然后判断是否有GET请求"upcache",如果有就加载/include/common.inc.php初始化系统,然后调用partview类的相关方法来生成静态首页文件,最后显示出来。
    
    这么来看dedecms也没有太多的秘密嘛~


    不过呢,我们这篇文章也遗留下了几个问题:

    1)加载了/include/common.inc.php,里面做了哪些工作?

    2)/include/arc.partview.class.php到底是干什么的,/include/下还有很多arc开头的文件都是干什么的?

    3)MfTemplet这个函数到底对模板文件路径这个字符串做了什么操作?

    4)partview类的相关方法都有什么秘密?

    带着这几个疑问,我们将结束本文,后面的文章将将这些谜题一一揭开。 博主个人博客:www.kanronghua.com 欢迎学习交流。

  • 相关阅读:
    css样式详解
    数组去重的两种方式
    react 中class样式的书写过程及注意点
    react 行内样式几种写法
    React创建组件的两种方法
    React中class创建组件和function创建组件的区别
    class关键字
    关于webpack配置环境,以及自己搭建react环境
    经典圣杯双飞翼布局
    关于vue中深拷贝的惨痛教训
  • 原文地址:https://www.cnblogs.com/ronghua/p/5935638.html
Copyright © 2011-2022 走看看