博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dedecms源码分析之index.php页面(2014/4/4)
阅读量:5759 次
发布时间:2019-06-18

本文共 3804 字,大约阅读时间需要 12 分钟。

hot3.png

$cfg_df_style  用来替换{style} 

首页index.php思想就是加载index.html文件。但要加载他首先就要判断他的存在。之后再来更新首页缓存,如果不需要更新,那么直接跳转到301静态页面去就可以了,至于301静态页面是什么,暂时还不清楚?

那么更新首页缓存要做什么,1、要包含文件。一个公共函数类文件,一个视图类文件,因为dedecms是基于mvc三层的,需要用到模板引擎,而模板引擎的本质思想就是替换。我猜测arc.partview.class.php就是模板引擎文件。2、设置一个全局变量,_arclistEnv 。3、从数据表#@__homepageset中取出所有的数据传给GetOne方法。返回值给$row。目的暂时不明。#@__homepageset文件中有两个属性,一个是首页模板名称,一个是生成的静态文件地址。4、基于PartView类实例化一个对象,并设置一个模板。5、当生成模板文件后,把最后生成的页面写到指定位置,再通过include形式显示出来。

看完后也还有几个问题:1、common.inc.php和arc.partview.class.php是干什么的?2、GetOne()干什么了。

3、SetTemplet做了什么。SaveToHtml是怎么实现的。

从上面的代码分析可以看出来,1、dedecms没有使用框架,虽不明白框架是干什么的,但index.php没有框架入口文件。2、index.php的作用其实就是加载一些个类库文件,模板文件。最终得出的是一个index.html文件。也就是我们所看到的页面。3、从这里我们可以看到一些个思想。mvc思想。首页中看到的只是视图层,而模型层和控制层在后端内部。

首页的代码其实可以简化为。

if(!file_exists('index.html')){

    header('Location:index.html');

}

if(isset($_GET['upcache'])){

    require (dirname(__FILE__)."/include/common.inc.php");

    require DEDEINC."arc.partview.class.php";

    $GLOBALS['_arclistEnv']='index';

    $row=$dsql->GetOne("Select * From #@__homepageset");

    $pv= new PartView();

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

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

    include(dir(__FILE__).'index.html');

    exit();

}else{

    header('HTTP/1.1 301 Moved Permanently');

}

附上详细注释,便于日后查看:

//自动生成HTML版

/**

 * 当get传来的upcache是否设置,是则为1,否为1.和index.html文件存在为1,非为0.不存在最后为1.

 * 当upcache 和index.html没有存在。任一个满足,则if为1.否则的话就发送http标头信息。常用的有header("Content-Type: text/html; charset=UTF-8");

 */

//当index.html文件不存在时,就向发送HTTP标头 信息 Location:index.html。我觉得把这两个逻辑分开表示,不用||表示,虽会增加执行时间,但对初学者来说还是分开清晰点。

if(!file_exists('index.html')){

    header('Location:index.html');

}//我这是已经安装好了。如果没安装好的话,就是判断/data/common.inc.php是否存在。如果不存在就跳转到安装页面。这个common.inc.php不是下面那个。这个是数据库的配置信息文件。是系统安装后自动生成的。

/**判断是否有GET['upcache']没有就跳转到301的静态页面去,有就生成静态页。

 *    ? 我没找到__homepageset这张表

 * 

 */

if(isset($_GET['upcache']))//upcache存在就更新首页缓存。否则就301直接跳转到index.html文件。

{

    /**dirname(__FILE__)得到上一级目录路径。__FILE__是当前文件的绝对地址。

    //加载common.inc.php 就是一些常用的函数

     */

    require_once (dirname(__FILE__) . "/include/common.inc.php");

    /**

    包含common.inc.php 和一次包含dedeinc路径下的arc.partview.class.php  

    加载这个文件。arc.partview.class.php是在include内。而common.inc.php也在include里面,但没用DEDEINC这个常量,说明在common.inc.php中定义了这个常量

    不要急着进入common.inc.php和arc.partview.class.php先把后面的更新缓存代码看完。

     */

    require_once DEDEINC."/arc.partview.class.php";

    /**

    $GLOBALS引用全局作用域中的全部变量_arclistEnv 并赋值index(错了)

   这里是设置了一个全局变量。  $_arclistEnv 内容是index

     */

    $GLOBALS['_arclistEnv'] = 'index';

    /**

     * GetOne应该是自定义的方法。参数就是从表#@__homepageset中选择所有.由$dsql对象调用GetOne。最后把返回值传给$row

    我从数据库中查到__homepageset表中,有两个属性templet和position templet=jp/index.html(模板名称)   position=../index.html(生成的静态文件的位置)

   作用就是把这张表的的表名前缀换成我们定义的。 $dsql是哪个文件里面的。重要的是通过这句获取首页的相关配置信息。

     */

    $row = $dsql->GetOne("Select * From `#@__homepageset`");

    /**

     * MfTemplet为自定义的方法。在模板目录规则include/channelunit.func.php里面。

    在index.html文件中找到{style}替换成 $cfg_df_style。并把index.html文件中的多个/换成一个/

   用MfTemplet对$row['templet]进行了某个转换,其实可以等把缓存代码看完,再来细看

     */

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

    /**

     * 根据PartView类实例化一个对象$pv,前面加载了arc.partview.class.php,所以后面可以实例化

    可以叫做视图对象。

     */

    $pv = new PartView();

    /**

     * 由对象$pv调用方法SetTemplet。有一个参数导入

   我猜测传入的是index.html的路径。传入的只是一个参数,第二个参数应该是指定文件类型的。没有声明,默认就是file类型。

   设置模板

     */

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

    //$row 是一个数组变量。当KEY=showmod时,为$row['showmod']和0两个值

    $row['showmod'] = isset($row['showmod'])? $row['showmod'] : 0;

    /**

     * 当成立时,$pv 调用SaveToHtml方法。参数就是index.html dirname(__FILE__)只是路径的查找而已,帮我们找到index.html

     *并把index.html文件包含。否则,调用Display()方法。

     */

    if ($row['showmod'] == 1)

    {                       

        //把最后生成的页面写到指定位置。

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

          //用include把最后生成的页面显示出来。

        include(dirname(__FILE__).'/index.html');

        exit();//退出

    } else { 

        $pv->Display();

        exit();

    }

}

else

{

    header('HTTP/1.1 301 Moved Permanently');

}

?>

转载于:https://my.oschina.net/yuanyichuan/blog/217817

你可能感兴趣的文章
Linux内存管理之mmap详解 (可用于android底层内存调试)
查看>>
利润表(年末)未分配利润公式备份
查看>>
Android开发中ViewStub的应用方法
查看>>
gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法...
查看>>
HDOJ-2069Coin Change(母函数加强)
查看>>
遍历Map的四种方法
查看>>
IOS atomic与nonatomic,assign,copy与retain的定义和区别
查看>>
JAVA学习:maven开发环境快速搭建
查看>>
Altium Designer 小记
查看>>
野猪和家猪的故事
查看>>
【Linux高级驱动】I2C驱动框架分析
查看>>
uva 10801 - Lift Hopping(最短路Dijkstra)
查看>>
【大数据论文笔记】大数据技术研究综述
查看>>
IOS-UIDynamic
查看>>
赵雅智:js知识点汇总
查看>>
第二十八篇: 学习笔记
查看>>
重构第4天:降低方法(Push Down Method)
查看>>
二维有序数组查找数字
查看>>
JavaScript(ES5)使用保留字作函数名
查看>>
20个Linux服务器性能调优技巧
查看>>