`

discuz!X 文件调用与模板函数

    博客分类:
  • PHP
阅读更多
require require_once include等都是php里面常规的文件调用函数,具体的区别和用法通常都是.
require_once filename;
filename要求引入的文件的相对路径.
而discuz x在文件调用方面引入了另外的filename获取方法.这个是本文主要讨论的内容.
如:根目录下portal.php中有这么一句.
1.   require_once libfile('portal/'.$_GET['mod'], 'module');
在/source/function/function_core.php中找到函数原型:
function libfile($libname, $folder = '') {
$libpath = DISCUZ_ROOT.'/source/'.$folder;
if(strstr($libname, '/')) {
   list($pre, $name) = explode('/', $libname);
   return realpath("{$libpath}/{$pre}/{$pre}_{$name}.php");
} else {
   return realpath("{$libpath}/{$libname}.php");
}
}
包含2个参数:$libname 和 $folder
该函数读取source目录下的$folder子目录作为基础部分.
另外当$libname中包含/的时候,把$libname分为前后两部分.前面部分为子目录.
规则为:/source/$folder/$libname_pre/$libname_pre_$libname_end.php
不包含/的调用规则为: /source/$folder/$libname.php
require_once libfile('portal/'.$_GET['mod'], 'module');
调用的实际为:
require_once /source/module/portal/portal_$_get['mod'].php
($get[mod]是浏览器环境的提供的)
2. include_once template('diy:portal/index');
调用位置: \source\module\portal\portal_index.php
函数位置:/source/function/function_core.php
函数原型:
function template($file, $templateid = 0, $tpldir = '', $gettplfile = 0) {
global $_G;
if(strexists($file, ':')) {
   list($templateid, $file, $clonefile) = explode(':', $file);
   //用分号来分开参数的file,对于topic模板来说
   //$templateid = DIY 等
   //$file = portal/portal_topic_content
   //$clonefile 为 topicid
   $oldfile = $file;
   ///如果$clonefile不为空,那么$file加上$clonefile编号
   $file = empty($clonefile) ? $file : $file.'_'.$clonefile;
   ///DIY类型的模板
   if($templateid == 'diy') { ///看摸板是否存在
    if(file_exists(DISCUZ_ROOT.'./data/diy/'.$file.'.htm')) {
     $tpldir = 'data/diy';
     !$gettplfile && $_G['style']['tplsavemod'] = 1;
    } elseif(file_exists(DISCUZ_ROOT.'./data/diy/'.$oldfile.'.htm')) {
    ///摸板不存在,如果 默认摸板存在
     $file = $oldfile;
     $tpldir = 'data/diy';
     !$gettplfile && $_G['style']['tplsavemod'] = 0;
    } else {
     $file = $oldfile;
    }
    ///摸板是否刷新的模式
    $tplrefresh = $_G['config']['output']['tplrefresh'];
   
    ///如果符合摸板刷新的机制,那么来更新摸板
    if(($tplrefresh ==1 || ($tplrefresh > 1 && !($_G['timestamp'] % $tplrefresh))) && @filemtime(DISCUZ_ROOT.'./data/diy/'.$file.'.htm') &&
      @filemtime(DISCUZ_ROOT.'./data/diy/'.$file.'.htm') < @filemtime(DISCUZ_ROOT.TPLDIR.'/'.$oldfile.'.htm')) {
     updatediytemplate($file);
    }
   } else {   ////非DIY类型模板放置
    $tpldir = './source/plugin/'.$templateid.'/template';
   }
}

if (!$gettplfile && empty($_G['style']['tplfile'])) $_G['style']['tplfile'] = empty($clonefile) ? $file : $oldfile.':'.$clonefile;
$file .= !empty($_G['inajax']) && ($file == 'common/header' || $file == 'common/footer') ? '_ajax' : '';
$tpldir = $tpldir ? $tpldir : (defined('TPLDIR') ? TPLDIR : '');
$templateid = $templateid ? $templateid : (defined('TEMPLATEID') ? TEMPLATEID : '');
$tplfile = ($tpldir ? $tpldir.'/' : './template/').$file.'.htm';
$filebak = $file;
$file == 'common/header' && defined('CURMODULE') && CURMODULE && $file = 'common/header_'.CURMODULE;
$cachefile = './data/template/'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php';


////如果tplfile的文件不存在的时候,去/template/default/对应目录里面获取
if($templateid != 1 && !file_exists(DISCUZ_ROOT.$tplfile)) {
   $tplfile = './template/default/'.$filebak.'.htm';
}
if($gettplfile) {
   return $tplfile;
}

////根据摸板文件及缓存返回读取的文件
checktplrefresh($tplfile, $tplfile, @filemtime($cachefile), $templateid, $cachefile, $tpldir, $file);
return $cachefile;
}
分享到:
评论

相关推荐

    Discuz! X2.5 添加自定义数据调用模块(简单方法)

    X2.5中,添加自定义数据调用模块可以实现对论坛内特定数据的动态调用与展示,如热点新闻、最新帖子等。这对于提升用户体验、增强论坛的互动性和信息丰富度有着重要作用。此外,自定义模块还可以根据需求灵活配置...

    基于PHP的Discuz!X2.5靓号插件系统源码.zip

    X2.5靓号插件系统源码"是一个专为Discuz!X2.5论坛平台设计的插件,用于实现论坛用户选择和管理“靓号”(特殊、吉祥或者有纪念意义的用户名)的功能。这个插件系统的核心是用PHP编程语言编写的,PHP是一种广泛应用于...

    Discuz! X1.5.1 简体GBK R20111221.zip

    Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。  Discuz! X1.5.1 ...

    Discuz!X目录结构

    - `function`:函数文件,进一步分为多个子目录: - `cache`:缓存功能拆分目录。 - `include`:被包含的文件,包括: - `cron`:计划任务。 - `misc`:杂项。 - `modcp`:前台论坛管理。 - `portalcp`:前台...

    discuz X2.5远程图片幻灯片调用模块 -源码.zip

    X2.5 远程图片幻灯片调用模块详解及源码解析》 Discuz! X2.5 是一款广泛使用的社区论坛系统,它提供了丰富的功能和高度的可定制性,深受广大站长喜爱。在这个系统中,远程图片幻灯片调用模块是一个重要的组件,它...

    Discuz! X1.5.1 简体UTF-8 R20111221.zip

    Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。  Discuz! X1.5.1 ...

    discuz x1.5 插件开发

    提供了丰富的API接口,如钩子函数、数据操作类等,插件开发者可以利用这些接口实现与系统的深度集成。 3. 安装与卸载:插件需要提供安装脚本(install.php)和卸载脚本(uninstall.php),用于在后台进行安装和卸载...

    Discuz! 蝴蝶飞啊

    【压缩包子文件的文件名称列表】: "discuz287"可能是指该模板是针对Discuz! 的第287个版本,或者是该模板的一个内部版本编号。这通常意味着模板可能已经过多次更新和优化,以适应Discuz! 不断升级的系统需求和新的...

    Discuz! X1.5.1 繁体BIG5 R20111221.zip

    Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。  Discuz! X1.5.1 ...

    Discuz! X1.5.1 繁体UTF8 R20111221.zip

    Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。  Discuz! X1.5.1 ...

    Discuz! X1.5插件制作学习之旅 推荐

    在这个文件中,首先引入核心文件,然后创建并初始化对象,接下来通过调用includetemplate函数引入模板文件。而这里的host.htm,就是我们要定义的单页模板文件,它包含了HTML结构,使用特定的标签来引入内容。{...

    B75经典门户商业版discuz模板下载.zip

    理解PHP的基本语法和函数调用对于操作和自定义这个模板至关重要。 【压缩包子文件的文件名称列表】:虽然具体文件列表未给出,但通常一个Discuz! 模板包会包含以下几类文件: 1. **主题模板文件(templates)**:...

    discuz模板

    的一个特定版本(可能是X2.1.1)的模板文件集。这个版本的模板可能包含了与该版本Discuz! 兼容的所有界面文件,包括但不限于以下部分: 1. 主题文件(Themes):这里通常包含多个预设的主题,每个主题都有自己的...

    Discuz!目录结构分析

    API接口目录,用于提供外部调用的接口服务,方便与其他系统集成或开发移动应用。 #### 三、关键文件介绍 - **index.php**:网站的主页入口文件。 - **member.php**:用户管理页面,包括注册、登录、个人信息编辑等...

    【三瑞】微信商城 V1.5 for discuz3.X

    在【三瑞】微信商城 V1.5 for discuz3.X 中,此文件负责微信商城插件的功能实现和调用,确保插件与Discuz! 系统的无缝对接。 五、安装说明与伪静态规则: `安装说明.txt` 文件提供了详细的安装步骤和注意事项,帮助...

    Discuz!_X2笔记.pdf

    8. **template**:模板源文件目录,用于存放前端页面的模板文件。 9. **uc_client**:UCenter客户端接口目录,用于与UCenter服务器端进行通信。 10. **uc_server**:UCenter服务器端目录,用于管理和提供用户中心...

    《PHP与MySQL权威指南》读书笔记模板x.pptx

    7. PHP函数与代码的重用性:定义和调用函数、参数、函数内的变量范围、函数的作用域和可用性、用变量存储函数的名称、递归函数、使用和包含文件等。 8. 面向对象的程序设计:类和对象的关键概念、构造方法和析构...

    discuzx2.5增加手机验证码注册

    这个函数会调用短信服务商的API,发送验证码到用户的手机。 4. **验证验证码**:在用户提交注册信息时,系统需要验证输入的验证码是否正确。在注册验证的函数(如`checkregip`)中,加入验证码的校验逻辑。 5. **...

    Discuz! X2 R20120628 简体UTF-8.zip

    FIX 修正搜索接口错误调用了implode()函数问题 FIX 好友申请附言问题 FIX 前台管理中已经审核通过文章,后台还是提示审核的问题 FIX QQ互联暴露匿名帖用户信息的问题 FIX 专题模块可使用...

    Discuz 模板目录结构注释说明详细整理

    本文将深入解析Discuz模板目录的组成和各个文件的作用,帮助开发者更好地理解和使用模板。 首先,`/template/default/common`是公共模板目录,包含了全局加载的模板文件。例如,`block_forumtree.htm`用于构建论坛...

Global site tag (gtag.js) - Google Analytics