首页 › 程序设计 › php

dede助手小工具helper是如何载入的?

泡在网上的日子 / 文 发表于2013-08-21 22:52 次阅读 dedecms

今天在对dede的问答模块进行修改的时候发现直接调用/include/helpers/archive.helper.php文件中的函数居然是可行的,但是找遍了ask模块的所有代码都没有发现这个是文件如何引入的。我记得有人说过dede的helper文件由系统自动引入,不需要自己手动完成。但是这个东西是如何自动引入的呢,是所有的地方都能用/include/helpers/目录下面的所有文件吗?

答案是否。

官方之所以说/include/helpers/下面的文件自动引入 是因为dede的php文件中几乎都require了/include/common.inc.php这个初始化文件,而这个文件中完成了对所有/include/helpers/下面的文件自动引入。相关代码如下:

if(file_exists(DEDEDATA.'/helper.inc.php'))
{
    require_once(DEDEDATA.'/helper.inc.php');
    // 若没有载入配置,则初始化一个默认小助手配置
    if (!isset($cfg_helper_autoload))
    {
        $cfg_helper_autoload = array('util', 'charset', 'string', 'time', 'cookie');
    }
    // 初始化小助手
    helper($cfg_helper_autoload);
}

这段代码的意思是如果变量$cfg_helper_autoload已经存在,则执行helper($cfg_helper_autoload);而默认是存在的。helper()这个函数实现了具体引入哪些/include/helpers/下面的文件,是哪些呢,这要取决于$cfg_helper_autoload变量的内容。

我们看看这个$cfg_helper_autoload里面有些什么东西。原来这个变量是在/data//helper.inc.php中定义的:

<?php
//小助手配置项
$cfg_helper_autoload = array
(
        'charset',    /* 编码小助手 */
        'channelunit',/* 模型单元小助手 */
        'string',     /* 字符串小助手 */
        'time',       /* 日期小助手 */
        'file',       /* 文件小助手 */
        'util',       /* 单元小助手 */
        'validate',   /* 数据验证小助手 */
        'filter',     /* 过滤器小助手 */
        'cookie',     /* cookies小助手 */
        'debug',      /* 调试小助手 */
        'archive',    /* 文档小助手 */
        'upload',     /* 上传小助手 */
        'extend',     /* 扩展小助手 */
);
?>

看到了吧 默认引用的helper中已经包括了archive文档小助手,而ask模块一开始就是require了/include/common.inc.php的,因此一层一层的分析下来,可以得出这样的结论,凡是引入和/include/common.inc.php文件的php代码,都是能直接执行默认的那几个助手小工具里面的代码的。

收藏 赞 (1) 踩 (0)
上一篇:dede内容页调用当前文档的栏目链接方法
注:本教程同时支持DedeV5.5/5.6/5.7,不区分程序编码 我们知道,在内容页模板时,可直接用 {dede:field.typename/} 来表示当前文档的栏目名称。但却无法使用 {dede:field.typeurl/} 形式来调用栏目链接。 今天这个方法就是专门用于解决这个问题—— 【解决
下一篇:php生成xml写好header避免乱码的要点
PHP生成xml中文很容易出现乱码,网上说要把所有的文件编码都统一,但是这样还不能解决问题,原因是很多人忘了header的写法。 一般都是这样写的: header("Content-Type:text/xml"); 但是如果你要做到万无一失,必须这样写: header("Content-Type:text/xml;