可以使用 include 标签来包含外部的模板文件,使用方法如下:
# 1、 使用完整文件名包含
~~~
<include file="完整模板文件名" />
~~~
> 说明:这种情况下,模板文件名必须包含后缀。
下面我们测试一下子,首先我们在主模板文件中写入如下的代码:
~~~
<include file="app/home/theme/default/header.html">
~~~
模板编译后的结果:
~~~
<?php $this->display( 'app/home/theme/default/header.html' ); ?>
~~~
我们需要定义一个 header.html ,如果没有定义就会在页面上收到一个异常提示:
> 模板文件 app/home/theme/default/header.html 不存在
# 2、 使用变量定义完整的文件
~~~
{~$sHeadTpl = $APP->apptheme_path.'/'.$APP->apptheme_name.'/header.html' }
<include file="$sHeadTpl">
~~~
说明:**$APP** 为系统提供的当前 APP 实例,这里可以读取当前模板路径地址,比如我开发的环境下,**$sHeadTpl** 的路径为:
~~~
{项目地址}/app/home/theme/default/header.html
~~~
模板编译后的结果:
~~~
<?php $sHeadTpl = $APP->apptheme_path.'/'.$APP->apptheme_name.'/header.html'; ?>
<?php $this->display( $sHeadTpl ); ?>
~~~
> 说明:效果和上面一样,同样需要定义 header.html。
# 3、包含当前主题下的模板文件
~~~
<include file="文件名" />
~~~
例如 导入当前主题下面的 test.html:
~~~
<include file="test" />
~~~
模板编译后的结果:
~~~
<?php $this->display( $APP->apptheme_path.'/'.$APP->apptheme_name.'/test.html' ); ?>
~~~
# 4、 包含其他模块的操作模板
~~~
<include file="模块名+操作名" />
<include file="模块名:操作名" />
~~~
模块和操作名之间的分隔符可以自定义,系统默认为 '_',你可以通过应用配置文件修改 :
~~~
'theme_moduleaction_depr' => '/'
~~~
如果你在配置文件修改的话,那么模块和操作之间通过文件夹的方式分割,模块是文件夹,操作是每一个文件。同时,为了降低目录深度,系统默认使用‘_’,这样子也比较直观。
例如,包含public模块的header操作方法,我们可以在模板文件中使用如下的代码:
~~~
<include file="public+header" />
~~~
模板编译后的结果:
~~~
<?php $this->display( $APP->apptheme_path.'/'.$APP->apptheme_name.'/public_header.html' ); ?>
~~~
# 5、包含其他模板主题的模块操作模板:
~~~
<include file="主题名@模块名+操作名" />
<include file="主题名@模块名:操作名" />
~~~
例如,包含 blue 主题的 blog 模块 的 view 操作模版:
~~~
<include file="blue@blog+view" />
~~~
模板编译后的结果:
~~~
<?php $this->display( $APP->apptheme_path.'/'.$APP->apptheme_name.'/blog_view.html' ); ?>
~~~
注意:如果外部模板有所更改,模板引擎会像主模板一样重新编译模板,所以你不用担心子模板是否更新。
# 6、函数表达式支持:
~~~
<include file="($strPath.'/'.$strName)" />
<include file="template+tpl('header')" />
<include file="tpl('header')" />
<include file="$oHello:world('header')" />
~~~
模板编译后的结果:
~~~
<?php $this->display( ($strPath.'/'.$strName) ); ?>
<?php $this->display( template::tpl('header') ); ?>
<?php $this->display( tpl('header') ); ?>
<?php $this->display( $oHello->world('header') ); ?>
~~~
# 7、默认文件文件查找:
如果当前主题文件不存在,系统会自动去寻找默认的主题,还支持自定义的扩展主题,例如:
~~~
<include file="blue@blog+view" />
~~~
> 说明:如果 blue 主题下面没有blog_view.html,那么系统会自动去寻找 default 目录下面的主题。
自定义扩展主题例子,入口文件定义:
~~~
\Q\base\app::run ( [
'project_path' => PROJECT_PATH,
'appthemebackup_path' => PROJECT_PATH.'/mytheme',
] );
~~~
# 8、子模板合并到主模板:
默认情况下,子模板有自己的编译文件,主模板和子模板分别缓存到对应的文件。系统在加载的时候,会载入多个缓存文件,从而会增加 io 开销。这个时候我们可以配置将子模板的缓存写入到住模板中去合并成为一个文件,加载的时候就一个文件。
~~~
'theme_cache_children' => true
~~~
> 注意:合并到一个文件好处就是降低 io 开销,但同时也会存在子模板更新了,主模板不会更新的情况。大家根据项目来决定是否开启这个功能。
- 关于 QueryPHP
- 获取 QueryPHP
- 环境要求
- 许可协议 Free
- 执行流程 MVC
- 命名规范 $sName
- 目录结构 DIR
- 单一入口 index.php
- 响应客户端请求 URL
- 命名空间与自动载入 Autoload
- 路由
- 路由导入
- 批量导入
- 参数正则
- 分组定义
- 路由绑定
- 路由域名
- 分层控制器
- 默认和初始化APP
- 默认控制器和方法
- url 模式
- url 生成
- url 伪静态
- url 重写
- url 重定向
- 控制器绑定
- 方法器分层
- 控制器 __init
- 控制器方法交互
- 模板引擎语法
- C变量输出 $sName
- C变量支持函数和方法 $sName|trim
- C快捷输出 ~
- C标签简化 Css & Javascript
- C默认值 eq 三元运算符
- C变量运算符 +-
- 变量递增递减 ++--
- C循环数据 list
- N变量赋值 assign
- N循环数据 list
- N循环数据高级版 lists
- C循环数据 while
- N循环数据 while
- C循环数据 for
- N循环数据 for
- C条件判断 if
- N条件判断 if
- 标签嵌套无限层级
- N循环流程 break & continue
- N使用 PHP 代码
- N包含子模板 include
- J模板引擎 intro
- J条件判断 if
- J循环数据 each
- J变量 & 表达式
- J变量支持函数和方法 hello|test
- J默认值 eq 三元运算符
- J框架前端组件 jquery.queryphp.js
- J前端 CSS 规范
- J前端 JS 规范
- 保护标签自身 tagself
- 数据库
- 数据库配置
- 执行原生 sql 语句
- 数据库事务
- 数据库构造器 prefix
- 数据库构造器 table
- 数据库构造器 forceIndex
- 数据库构造器 where
- 数据库构造器 bind
- 数据库构造器 join
- 数据库构造器 union
- 数据库构造器 orderBy
- 数据库构造器 groupBy
- 数据库构造器 having
- 数据库构造器 distinct
- 数据库构造器 aggregate
- 数据库构造器 limit
- 数据库构造器 forUpdate
- 数据库构造器 columns
- 数据库构造器 reset
- 数据库集合查询
- 数据库查询数据 get
- 数据库查询多条数据 getAll
- 数据库查询单条数据 getOne
- 数据库查询聚合查询 aggregate
- 数据库写入数据 insert
- 数据库写入数据 insertAll
- 配置
- 配置格式
- 惯性配置
- 配置文件
- 读取配置
- 设置配置
- 删除配置
- 日志
- 日志配置参数
- 日志路径
- 日志过滤器
- 日志处理器
- 缓存
- 缓存配置参数
- 缓存路径
- 缓存指定时间
- COOKIE
- COOKIE 配置参数
- 开发调试
- 页面 trace