模板常量 __ROOT__: 网站根目录,不带/; __WEB_ROOT__: 网站资源根目录,不带/,如果以前版本用__ROOT__来定位网站资源,方便以后cdn切换 __TMPL__: 当前模板根目录,不带/; 如:前台 simpleboot3模板根目录是 public/themes/simpleboot3 后台admin_simpleboot3模板根目录是public/themes/admin_simpleboot3 __STATIC__: public/static目录,不带/; 视频讲解 http://t.cn/RnQBHXZ 系统变量输出 系统变量的输出通常以{$Think开头,如: {$Think.server.http_host} // 输出$_SERVER['HTTP_HOST']变量 {$Think.session.user_id} // 输出$_SESSION['user_id']变量 {$Think.post.id} // 输出$_POST['id']变量 {$Think.get.page} // 输出$_GET['page']变量 {$Think.cookie.name} // 输出$_COOKIE['name']变量 支持输出 $_SERVER、$_ENV、 $_POST、 $_GET、 $_REQUEST、$_SESSION和 $_COOKIE变量。 常量输出 {$Think.const.APP_PATH} {$Think.const.CMF_ROOT} 或者直接使用 {$Think.APP_PATH} {$Think.CMF_ROOT} 配置输出 输出配置参数使用: {$Think.config.default_module} {$Think.config.default_controller} 语言变量 输出语言变量可以使用: {$Think.lang.SAVE} {$Think.lang.ADD} 可以在模板中直接使用$Request对象,直接输入它的属性或调用它的大部分方法,但只支持方法的第一个参数; // 调用Request对象的get方法 传入参数为id {$Request.get.id} // 调用Request对象的param方法 传入参数为name {$Request.param.name} // 调用Request对象的param方法 传入参数为post.post_title {$Request.param.post.post_title} // 调用Request对象的root方法 {$Request.root} // 调用Request对象的root方法,并且传入参数true {$Request.root.true} // 调用Request对象的path方法 {$Request.path} // 调用Request对象的module方法 {$Request.module} // 调用Request对象的controller方法 {$Request.controller} // 调用Request对象的action方法 {$Request.action} // 调用Request对象的ext方法 {$Request.ext} // 调用Request对象的host方法 {$Request.host} // 调用Request对象的ip方法 {$Request.ip} // 调用Request对象的header方法 {$Request.header.accept-encoding} 使用函数 为了方便好记,ThinkCMF推荐在模板中使用下面的形式: <!--单个函数--> {:date('Y-m-d')} <!--多个函数--> {:date('Y年m月d日',strtotime('2017-05-20'))} 使用默认值几个好处: 如果变量未定义可以防止报错 如果变量为空可以提供默认值,减少条件判断,复杂默认值还是要使用条件判断标签来实现 给变量设置默认值输出 {$category.name|default='分类名为空'} {$user.user_nickname|default='这个家伙没有设置昵称'} 给系统变量设置默认值输出 {$Think.get.name|default="名称为空"} 模板可以支持三元运算符,如: {$status?'发布':'下线'} {$vo.status?'发布':'下线'} {$vo['status']?'发布':'下线'} 支持条件判断表达式: {$a==$b ? 'yes' : 'no'} 条件运算符可以是==、===、!=、!==、>=、<= 原样输出 literal标签可以防止模板标签被解析,所有想原样输出的代码都可以使用这个标签包裹起来,如: <literal> 这里是原样输出的内容{$name} </literal> 如果 js 代码有和模板引擎有冲突的地方也可以使用literal标签包裹起来,防止被解析。 模板注释支持单行注释,多行注释,模板被模板引擎解析不会在页面中输出这些注释,只有开发者可以看到,所以一些不想让用户看到的注释可以使用模板注释。 单行注释 {//单行注释方式一} {/*单行注释方式二*/} 多行注释 {/* 这里多行注释 这里多行注释 这里多行注释 */} 注:{和注释标记(//,/*)之间不能有空格。