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中Number.NEGATIVE_INFINITY值的使用详解
Jun 05 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
AngularJS动态绑定HTML的方法分析
Nov 07 Javascript
js实现表单提交后不重新刷新当前页面
Nov 30 Javascript
微信小程序学习(4)-系统配置app.json详解
Jan 12 Javascript
基于Vue实现支持按周切换的日历
Sep 24 Javascript
jQuery Position方法使用和兼容性
Aug 23 jQuery
vuex 使用文档小结篇
Jan 11 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
Sep 18 Javascript
解决layui checkbox 提交多个值的问题
Sep 02 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
Feb 24 Javascript
javascript运行机制之执行顺序理解
Aug 03 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
mysq GBKl乱码
2006/11/28 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
javascript写的一个链表实现代码
2009/10/25 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
python pillow库的基础使用教程
2021/01/13 Python
Python try except finally资源回收的实现
2021/01/25 Python
咖啡厅商业计划书
2014/09/15 职场文书
法院个人总结
2015/03/03 职场文书
2015年酒店工作总结
2015/04/28 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技