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 cookie解码函数(兼容ff)
Mar 17 Javascript
js css样式操作代码(批量操作)
Oct 09 Javascript
jQuery中delegate与on的用法与区别示例介绍
Dec 20 Javascript
浅析Javascript中“==”与“===”的区别
Dec 23 Javascript
javascript相关事件的几个概念
May 21 Javascript
jQuery打字效果实现方法(附demo源码下载)
Dec 18 Javascript
js和jquery中获取非行间样式
May 05 jQuery
JS实现瀑布流布局
Oct 21 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
Dec 11 Javascript
JS面向对象之单选框实现
Jan 17 Javascript
序列化模块json代码实例详解
Mar 03 Javascript
JavaScript逻辑运算符相关总结
Sep 04 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
学习使用curl采集curl使用方法
2012/01/11 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
python判断完全平方数的方法
2018/11/13 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
车间班组长岗位职责
2013/11/13 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
《春雨》教学反思
2014/04/24 职场文书
教师外出学习心得体会
2016/01/18 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
一文搞懂php的垃圾回收机制
2021/06/18 PHP
win7配置本地ftp服务器的图文教程
2022/08/05 Servers