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 相关文章推荐
文本加密解密
Jun 23 Javascript
关于COOKIE个数与大小的问题
Jan 17 Javascript
IE6、IE7中获取Button元素的值的bug说明
Aug 28 Javascript
jquery中的$(document).ready()使用小结
Feb 14 Javascript
Bootstrap每天必学之导航条(二)
Mar 01 Javascript
js从外部获取图片的实现方法
Aug 05 Javascript
Bootstrap table的使用方法
Nov 02 Javascript
Vue制作Todo List网页
Apr 26 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
Mar 07 Javascript
解决layui 表单元素radio不显示渲染的问题
Sep 04 Javascript
微信小程序表单验证WxValidate的使用
Nov 27 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
May 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
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
python实现杨辉三角思路
2017/07/14 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
实习生单位鉴定意见
2013/12/04 职场文书
大学毕业自我评价
2014/02/02 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
教学质量月活动总结
2015/05/11 职场文书
同学会演讲稿
2019/04/02 职场文书