Thinkphp模板没有解析直接原样输出的解决方法


Posted in Javascript onOctober 31, 2014

本文实例讲述了Thinkphp模板没有解析直接原样输出的解决方法。分享给大家供大家参考。具体如下:

一、问题:

最近在学习thinkphp模板了,但是发现模板页原样出来了,经过一番艰苦搜索终于找到解决方案。

二、解决方法:

很多人都碰到相同问题,在变量中赋值的字符串中包含的__ROOT__、__PUBLIC__、__APP__,这种字符的, 在模板中display出来的时候都被替换成了真实路径。话说是在写Timi文件管理系统的时候发现的这个问题。

从文件中把源码读出来输出到页面后发现,只要是TP的路径字符,都被替换成了真实路径。
比如:

$this->assign('fileContent',$fileContent);//$fileContent中包含__PUBLIC__“路径常量”字符。

 
页面输出后显示为真实路径/public/。
期间经过了多种尝试,比如assign的时候base64加密,模板输出的时候decode一下,发现没起作用。最后终于忍不住的看了下Tp这块的源码,发现在display方法的最后一步的时候通过调用tag方法把“Tp的路径常量”替换成真实路径的。在render方法之前都是正常的。

Thinkphp模板没有解析直接原样输出的解决方法

本来准备改下源码实现下面这位童鞋的需求方案的:
老大、这是临时解决方案还是最终方案?
不过我感觉在assign()方法里面加个判断还不错,
如果是$this->assign('','',false),则对内容不替换,原样输出。

结果,看完这块源码后才发现,不是那么容易,改动太大了。

最后另一位童鞋的回复,点出了最终解决方案:

“可以参考这里的内容:https://3water.com/article/54217.htm(模板替换)
 
有了模板替换规则后,页面上所有的__PUBLIC__ 字符串都会被替换,那如果确实需要输出__PUBLIC__ 字符串到模板呢,我们可以通过增加替换规则的方式,例如:

'TMPL_PARSE_STRING'  =>array(

         '--PUBLIC--' => '__PUBLIC__', // 采用新规则输出/Public字符串

)

这样增加替换规则后,如果我们要输出__PUBLIC__ 字符串,只需要在模板中添加--PUBLIC--,其他替换字符串的输出方式类似。

这样增加替换规则后,如果我们要输出__PUBLIC__ 字符串,只需要在模板中添加--PUBLIC--,其他替换字符串的输出方式类似。

于是乎,方案出炉:

在Tp的配置文件config.php中配置

'TMPL_PARSE_STRING' => array (//路径配置

       

        //Timi文件路径还原

        '--PUBLIC--' => '__PUBLIC__',

        '--APP--' => '__APP__',

        '--URL--' => '__URL__',

        '--ACTION--' => '__ACTION__',

        '--SELF--' => '__SELF__',

        '--INFO--' => '__INFO__',

        '--EXT--' => '__EXT__'

),

读出源码的时候正则替换一下“路径常量字符”__ROOT__为--ROOT--:
$fileContent=file_get_contents($filePath); 

$fileContent=htmlspecialchars(preg_replace('/__(.*?)__/is','--$1--',$fileContent));

然后TMPL_PARSE_STRING的配置在模板被解析的时候刚好替换回去,如下图所示:

Thinkphp模板没有解析直接原样输出的解决方法

于是乎,这个问题就“暂时”“完美”解决了。

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

Javascript 相关文章推荐
动态加载脚本提升javascript性能
Feb 24 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
Mar 25 Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 Javascript
javascript给span标签赋值的方法
Nov 26 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
Dec 08 Javascript
js判断登陆用户名及密码是否为空的简单实例
May 16 Javascript
JS正则表达式验证密码格式的集中情况总结
Feb 23 Javascript
Angular directive递归实现目录树结构代码实例
May 05 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
微信小程序学习笔记之本地数据缓存功能详解
Mar 29 Javascript
jQuery实现小火箭返回顶部特效
Feb 03 jQuery
为什么node.js不适合大型项目
Apr 28 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
Oct 31 #Javascript
JsRender实用入门教程
Oct 31 #Javascript
JsRender for object语法简介
Oct 31 #Javascript
JsRender for index循环索引用法详解
Oct 31 #Javascript
javascript常用函数归纳整理
Oct 31 #Javascript
让html页面不缓存js的实现方法
Oct 31 #Javascript
js读取cookie方法总结
Oct 31 #Javascript
You might like
超级实用的7个PHP代码片段分享
2012/01/05 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
django框架中间件原理与用法详解
2019/12/10 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
大学生咖啡店创业计划书
2014/01/21 职场文书
保护动物倡议书
2014/04/15 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
2014年司法局工作总结
2014/12/11 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL
Golang获取List列表元素的四种方式
2022/04/20 Golang
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python