找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 292|回复: 1

[thinkphp] ThinkPHP3 模板特殊字符串替换

  [复制链接]
发表于 2023-2-23 15:02 | 显示全部楼层 |阅读模式

模板特殊字符串替换

ThinkPHP 系统定义了一些特殊的字符串(常量)以方便在模板中的使用,这些特殊字符串给模板的应用带来了极大的便利。

这些特殊的字符串是在进行模板输出之前有系统自动替换的,默认的模板特殊字符串如下:

  • /Tpl/Home/default/Public:当前项目的公共模板目录,通常是 /项目目录/Tpl/default/Public/

  • /Public:当前网站的公共目录,通常是 /Public/

  • /Tpl/Home/default/:项目的模板目录,通常是 /项目目录/Tpl/default/

  • :当前网站的地址(不含域名)

  • :当前项目的 URL 地址(不含域名)

  • -Article:当前模块的 URL 地址(不含域名)

  • -Article-index:当前操作的 URL 地址(不含域名)

  • /p-thinkphp_tpl_replace.shtml:当前的页面 URL

假定我们的网站为:www.5idev.com

定义项目文件为网站根目录下 Home 目录

当前模块为:Index

当前操作为:index

当前页面 URL 则为:http://www.5idev.com/index.php/Index/index

那么上述特殊字符在 index.html 模板中被解释为:

  • /Tpl/Home/default/Public:/Home/Tpl/default/Public/

  • /Public:/Public/

  • /Tpl/Home/default/:/Home/Tpl/default/

  • :网站根目录

  • :/index.php

  • -Article:/index.php/Index

  • -Article-index:/index.php/Index/index

  • /p-thinkphp_tpl_replace.shtml:/index.php/Index/index(页面实际地址)

模板替换补充说明

/Public:会定位于 DOCUMENT_ROOT 级别的根目录下。

:则与项目入口文件有关,不一定定位于 DOCUMENT_ROOT 下。

-Article-index:行为类似于 $_SERVER['REQUEST_URI'] ,当改写了访问 URL 时(如利用 .htaccess 文件),其结果与 /p-thinkphp_tpl_replace.shtml 不一致。

/p-thinkphp_tpl_replace.shtml:行为类似于 $_SERVER['PHP_SELF'] ,通常是实际页面地址。

以上特殊字符严格区分大小写,在实际应用中最好根据自己的项目部署情况经过具体测试后使用,以免产生不可预知的问题。

例子1,首页链接:

<a href="/" title="Web开发在线教程">首页</a>

例子2,加载公共目录 CSS 文件:

<load href='/Public/Css/default.css' />

例子3,提交表单数据:

<form action="-Article/insert" method="post">

自定义特殊替换字串

ThinkPHP 支持用户更改默认的替换规则甚至定义自己的模板替换特殊字符串。在项目配置文件中配置 TMPL_PARSE_STRING 选项以更改或增加模板替换字符串,如:

TMPL_PARSE_STRING  => array(
    '/Public' => '/Common',            // 更改默认的 /Public 替换规则
    '__UPLOAD__' => '/Public/Uploads/',    // 增加新的上传路径替换规则
)
 楼主| 发表于 2023-2-23 15:06 | 显示全部楼层

2、驼峰式命令方法

模板名称如果和方法名称一样使用托峰式,会报500错误,模板不存在。

http://www.thinkphp.cn/topic/2020.html

http://www.daydaytc.com/php/283.html

 

我也碰到这个问题,关闭调试后,就要求模板必须全部小写才能正确读取。开启就不会。

控制器方法是 function userLogin(){} 对应的模板文件名是 userLogin.html

调试模式下一切正常

可关闭调试后,模板要写成 userlogin.html 才行,否则报错,找不到模板。

 

----------------------

http://blog.csdn.net/bestcjt/article/details/49472731

 

一直用Thinkphp开发网页,之前一直都是用的调试模式,一切都正常,就是APP_DEBUG常量值为true

 

最近把布署在万网的网站(是linux的)调试模式关了后,有些网页出现找不到模板了,后来发现如果我的模板名为myWeb这样有大写的话就找不到模板,我在控制器里面的方法名跟模板名是一样的 myWeb,但把调试模式关了后,thinkphp找模板时就去找myweb这个模板文件了。

 

经过调试研究后,发现,在调试模式下,URL_CASE_INSENSITIVE这个配置的值为false,意思就是url区分大小写,关闭调试模式后,就为true,url不区分大小写,可我发现这跟实际的情况不太一样,如果URL_CASE_INSENSITIVE这个值为false时,那么thinkphp去找模板文件时文件名就跟url的一样,保持里面的大小写,如果为true的话,就统一找小写的模板文件。

 

我把这个配置值改为false后,一切就正常了

 


1、ThinkPHP3.1.3在<block name="script">里匹配\d数字奇葩问题

我要测试输入框input是否为数字,用下面的测试:

/^[1-9]\d*$/.test(23333);

结果为false;我复制到浏览器里发现为true;饿得神呐,神马问题,弄得我开始怀疑人生

最后找一JS高手,说是在TP block里会出现问题的,要多加一个反斜杠才行。

/^[1-9]\\d*$/.test(23333);通过测试。

注:此问题并非为TP模板引擎问题,因为在模板里写JS都需要写上<literal>js代码</literal>,错怪TP了。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-5-18 12:11 , Processed in 0.022557 second(s), 14 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表