文档章节

dedecms源码分析之index.php页面(2014/4/4)

YYCRiver
 YYCRiver
发布于 2014/04/04 17:34
字数 1421
阅读 751
收藏 2
点赞 0
评论 4


$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');

}

?>


© 著作权归作者所有

共有 人打赏支持
YYCRiver
粉丝 1
博文 46
码字总数 23681
作品 0
南昌
程序员
加载中

评论(4)

YYCRiver
YYCRiver
好的!
买红薯
买红薯

引用来自“xuewl”的评论

讲得太复杂~

引用来自“袁亦川”的评论

还是PHP的初学者,想注释这个入门,连一些个PHP的语法,函数我都会写上。大神如果有什么建议之类的。虚心接受你的看法。[83]

初学者能理解到这个程序也是非常不错的~ 加油。 只给你一个建议:写这样的源码分析还是注重一下排版和美观,要不等几天你自己回来估计都看得头晕。这是习惯问题~

YYCRiver
YYCRiver

引用来自“xuewl”的评论

讲得太复杂~

还是PHP的初学者,想注释这个入门,连一些个PHP的语法,函数我都会写上。大神如果有什么建议之类的。虚心接受你的看法。[83]

买红薯
买红薯
讲得太复杂~
Dedecms备份还原网站有效方法

Dedecms备份还原方法为您提供3个,其实这3个dedecms网站备份恢复还原都很有效,所以不管你选择哪种,都能成功备份dedecms网站,以及dedecms网站恢复还原成功! Dedecms网站备份还原技巧1: ...

冰袋雪条火筒木冬瓜
2013/11/27
0
0
DedeCMS数据负载性能优化方案 简单几招让你DedeCMS提速N倍

前文介绍了DedeCMS栏目列表页实现完美分页的方法,避免了大部分重复栏目标题对搜索引擎的影响,对SEO更有利。今天,分享一下DedeCMS数据负载性能优化的方法。 接触织梦也有三年多时间了,对它...

mickelfeng
2014/05/31
0
0
DedeCMS+ucenter+uchome同步登录退出整合教程

现在已经完成了dedecms、ucenter、uchome的安装了现在就把dedecms及uchome通过ucenter整合到一起以实现资源整合并且两个网站的会员要实现同步登录及退出! 1.通过浏览器访问 http://127.0.0...

杨强易
2012/06/13
0
0
织梦dedecms在自定义表单里加入验证码的方法

在很多建站需求中,需要一些额外的表单供前台用户提交。以便于收集、统计、分析及处理更多的数据。比如:在线订单、在线报名等一些常见的互动应用。 更多:php教程 利用织梦内容管理系统(d...

西西爱OS
2012/10/20
0
0
关于织梦DEDECMS robots文件设置的想法

用织梦DEDECMS建站的站长会发现,DEDECMS自带的robots.txt文件设置很简单(开发者基于每个网站的目录结构和优化目的不同的 考虑),并不能完全满足网站的优化要求,那怎样才能结合自己网站的...

汤圆
2013/01/15
0
0
DEDE删除织梦链友情链接以及logo图片友情链接

织梦CMS v5.7,在友情链接中会自动添加“织梦链”,可以考虑删除。不过,在后台管理中,并没有发现织梦链管理,所以只能修改源文件。dede博客-598080707.NET   DedeCMS v5.7 删除友情链接中...

asqq8
昨天
0
0
DEDE隐藏内页列表等统计次数 DEDE隐藏统计标签

DEDE隐藏内页列表等统计次数 DEDE隐藏统计标签 - 发表于:DEDE技术吧 - Dede教程 有些新站想把统计代码给隐藏起来不让游客看到文档的点击次数,第一个想到的就是把统计代码给撤掉,不进行调用...

asqq8
昨天
0
0
dedecms源码分析(2014/4/3)

(一) dedecms没有什么框架而已,都是有php代码文件组成的逻辑。访问不同的php文件,管理不同的系统功能。 include目录放系统的一些公用函数和类,plus目录放插件,templates目录放模板,d...

YYCRiver
2014/04/03
0
0
对DeDecms之index.php页面的补充

1、301是什么? 其实就是HTTP状态表。就是当用户输入url请求时,服务器的一个反馈状态。 详细链接http://www.cnblogs.com/kunhony/archive/2006/06/16/427305.html 2、common.inc.php和arc.p...

YYCRiver
2014/04/09
0
0
DEDE 后台模块管理空列表的解决办法

很多用户反馈,打开插件管理,插件列表为空白,这个是织梦官方的插件服务器不稳定所致的. 官方的模块从V57发布后,基本没有发布新模块,出现此问题的解决办法,就是屏蔽掉链接官方的插件服务器更新...

吾爱
2013/06/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git 基础 - 远程仓库的使用

远程仓库的使用 要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库。远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某...

谢思华
8分钟前
0
0
面试宝典-悲观锁和乐观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。 乐观锁(Optimistic...

suyain
9分钟前
0
0
崛起于Springboot2.X之集成MongoDb使用mongoTemplate CRUD(27)

1、pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version></dependency><dependency> <groupId>log4j</......

木九天
20分钟前
0
0
切分log日志

新建logback.xml放到resource里面 <?xml version="1.0" encoding="utf-8"?><configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <......

talen
25分钟前
0
0
spring @Resource 和 @Autowired 的使用区别

这两个 注解 @Resource 和 @Autowired , 常识都知道 @Resource 是 JAVAEE 自带的,@Autowired 是 spring 的自定义注解。 一般情况下, 使用 bean的时候, 这两个注解 随便使用一个即可。 但...

之渊
30分钟前
0
0
springboot集成elasticsearch客户端问题记录

1背景说明 服务端ES版本为5.5.2,springboot版本为1.5.6。 工程中添加如下依赖 2问题记录 2.1 NetworkPlugin类找不到 报错java.lang.ClassNotFoundException: org.elasticsearch.plugins.Net...

zjg23
32分钟前
1
0
快速构建ceph可视化监控系统

前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_expor...

万建宁
32分钟前
0
0
Java构造器使用注意

public class 父类A {int age = 10;protected void say() {System.out.println("父类A");}public 父类A() {override();}public void override() {Syst...

咸鱼AI
32分钟前
0
0
TensorFlow 线性分类

构造直线 z = 2 * x - 3 * y + 4 x0*w0+x1*w1+b=0 x1=-x0* w0/w1-b/w1 斜率 k= -w0/w1 截距 -b/w1 随机生成数据,加入一定的偏差,用直线将二维平面分为两部分 使用线性模型拟合参数 损失函数...

阿豪boy
35分钟前
0
0
翻译冒泡排序测试

翻译一个冒泡排序: var a = [1,3,2,4,6,5];var f = 0;var n = a.length ;for( var i =1; i<= n; i++) { for( var j = n-1 ; j >= i; j --) { if(a[j] < a[j+1]) { ......

钟元OSS
37分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部