• discuz 1.5X源码简单分析


    简介:这是discuz 1.5X源码简单分析的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=325738' scrolling='no'> 看了一会儿DISCUZ X1.5的代码,记录一下收获。

    不考虑后台,dzx的请求入口大约共有七个。为根目录下的forum.php(广场,其实就是论坛),group.php(群组),home.php(家园),index.php(首页),member.php(会员管理,登录注册什么的),misc.php(排行榜),search.php(搜索),userapp.php(不清楚,用户应用?)。
    请求首页index.php的时候,默认会转向到广场forum.php。下面简单分析一下请求forum.php时DZX的整体执行流程。
    打开forum.php
    首先,引用了两个文件
    require './source/class/class_core.php';
    require './source/function/function_forum.php';
    

    class_core初始化DZX的环境。通过下面两句代码实现
    $discuz = & discuz_core::instance();
    $discuz->cachelist = $cachelist;
    $discuz->init();
    

    其中的$discuz->cachelist = $cachelist;没搞明白是做什么用的。
    接下来根据不同的mod调用不同的php文件,代码如下:
    $mod = !in_array($discuz->var['mod'], $modarray) ? 'index' : $discuz->var['mod'];
    

    url中如果没有通过?mod=xxx来指定mod的话,默认为index。
    然后引用模块文件
    require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';
    

    我们只要看一下source\module下面的目录及文件,就能知道每个入口文件都有哪些mod参数可以指定。
    这里默认会找到source\module\forum\forum_index.php。
    forum_index.php首页取到显示页面需要的数据,前面写了一大堆的东西,没细看。对流程最重要的一句是:
    include template('diy:forum/discuz:'.$gid);
    

    直观印象,template返回一个路径。认真再想,其实流程大体上应该是这样的:
    template的参数肯定是指定了模板文件的路径,但是模板文件要通过解析才能用。所以template函数肯定要对模板里的标签进行解析,那为什么是返加一个URL呢?DZX为了提高效率将解析后的模板做了一个缓存,就是说把一个html的模板解析成一个php的“编译”后的文件,然后保存在一个地方,下次用的时候,直接去读“编译”后的文件,省了编译这步,提高效率。
    template函数位于source\function\function_core.php文件里。大体看一下,跟上面说的差不多。
    读的模板文件为template\default\forum\discuz.htm
    返回的缓存文件保存在/data/template目录里。
    接下来分别打开模板文件emplate\default\forum\discuz.htm和缓存文件ata\template\1_diy_forum_discuz.tpl.php。
    对比可以发现,$announcements编译成了<?=$announcements?>,那$announcements变量哪来呢的?source\module\forum\forum_index.php的get_index_announcements函数就是来取这个值的。
    {lang xxx}直接被本地化成相应的字符了
    <!--{hook/index_side_bottom}-->
    

    变成了:
    <?php if(!empty($_G['setting']['pluginhooks']['index_side_bottom'])) echo $_G['setting']['pluginhooks']['index_side_bottom']; ?>
    

    $_G在DZX里常见到,感觉是一个很庞大的全局变量。还没细细研究了。

    总体来说,DZX的流程,也是目前大多CMS的设计方式。根据URL准备数据,再调用对应的模板,模板编译后保存为缓存,缓存文件中调用函数或已准备好的数据,最后显示。像我看过的wordpress,textpattern差不多都这样。

    “discuz 1.5X源码简单分析”的更多相关文章 》

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/325738.html pageNo:13
  • 相关阅读:
    vue 跨域访问http
    vue 生命周期小结
    koa的教程
    spoj104 HIGH
    loj2026 「JLOI / SHOI2016」成绩比较
    loj2024「JLOI / SHOI2016」侦查守卫
    loj2016 「SCOI2016」美味
    loj2014 「SCOI2016」萌萌哒
    loj2013 「SCOI2016」幸运数字
    loj2012 「SCOI2016」背单词
  • 原文地址:https://www.cnblogs.com/ooooo/p/2252339.html
Copyright © 2020-2023  润新知