在实际开发的时候会出现一个这样的问题:在引入图片、css、js文件的时候,往往需要写一些比较复杂的路径,所以这个时候我们比较希望能有一些特殊的常量将很长很复杂的路径简单化,这个时候可以考虑使用模版常量替换的机制。
在ThinkPHP中系统默认给我们提供以下几个常用的模版常量:
__MODULE__:表示从域名后面开始一直到分组名结束的路由
__CONTROLLER__:表示从域名后面开始一直到控制器结束的路由
__ACTION__:表示从域名后面开始一直到方法名结束的路由
__PUBLIC__:站点根目录下的Public目录的路由
__SELF__:表示从域名后面开始一直到路由的最后(如果没有参数,则__SELF__和__ACTION__所表达的内容是一样的)
其中ThinkPhp中关于模板产量的代码在行为文件中路径如下
ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php
class ContentReplaceBehavior {
// 行为扩展的执行入口必须是run
public function run(&$content){
$content = $this->templateContentReplace($content);
}
/**
* 模板内容替换
* @access protected
* @param string $content 模板内容
* @return string
*/
protected function templateContentReplace($content) {
// 系统默认的特殊变量替换
$replace = array(
'__ROOT__' => __ROOT__, // 当前网站地址
'__APP__' => __APP__, // 当前应用地址
'__MODULE__' => __MODULE__,
'__ACTION__' => __ACTION__, // 当前操作地址
'__SELF__' => htmlentities(__SELF__), // 当前页面地址
'__CONTROLLER__'=> __CONTROLLER__,
'__URL__' => __CONTROLLER__,
'__PUBLIC__' => __ROOT__.'/Public',// 站点公共目录
);
// 允许用户自定义模板的字符串替换
if(is_array(C('TMPL_PARSE_STRING')) )
$replace = array_merge($replace,C('TMPL_PARSE_STRING'));
$content = str_replace(array_keys($replace),array_values($replace),$content);
return $content;
}
}
根据代码可知如果我们可以通过在配置文件(分组或者应用级别)中定义数组名为TMPL_PARSE_STRING
并添加我们想要添加的路径。
使用的话可以在html中直接使用。