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 相关文章推荐
Use Word to Search for Files
Jun 15 Javascript
javascript 哈希表(hashtable)的简单实现
Jan 20 Javascript
js 幻灯片的实现
Dec 06 Javascript
jquery的选择器的使用技巧之如何选择input框
Sep 22 Javascript
JS实现简洁、全兼容的拖动层实例
May 13 Javascript
JavaScript中判断函数、变量是否存在
Jun 10 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
Mar 21 jQuery
微信小程序页面传值实例分析
Apr 19 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
Jun 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
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
php递归函数怎么用才有效
2018/02/24 PHP
JavaScript中的私有成员
2006/09/18 Javascript
非常不错的一个javascript 类
2006/11/07 Javascript
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
python中精确输出JSON浮点数的方法
2014/04/18 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
Python日志模块logging基本用法分析
2018/08/23 Python
详解numpy的argmax的具体使用
2019/05/27 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
Python hashlib模块加密过程解析
2019/11/05 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
高中物理教学反思
2014/02/08 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
原告离婚代理词
2015/05/23 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python