ThinkPHP框架学习(三)

根据ThinkPHP框架学习(二)中讲到的绝对路径相对路径设置,将对应的商城模板文件转移到market文件夹后,接下来,就其中涉及到的一些知识点做一番补充总结。

给静态资源文件设置目录访问常量

前面我们提及到,引入模板文件后,需要调整html文件和css文件的路径关系,再结合tp框架的路由解析形式,最后确定了类似/market/Public/Home/css/style.css的路径引用形式。但是这里可以进行一番改进,当路径发生变化时,为了便于后期的维护,避免重复地在代码中更改路径位置,可以在入口文件index.php中将css、img、js路径定义为常量,在模板中通过常量的形式把静态资源引入。
打开index.php,在其中添加如下代码:

1
2
3
4
5
6
7
8
9
//给静态资源文件访问目录设置常量,方便后期维护
//Home分组
define('CSS_URL','/market/Public/Home/css/');
define('IMG_URL','/market/Public/Home/images/');
define('JS_URL','/market/Public/Home/js/');
//Admin分组
define('A_CSS_URL','/market/Public/Admin/css/');
define('A_IMG_URL','/market/Public/Admin/img/');
define('A_JS_URL','/market/Public/Admin/js/');

此时,在模板中引入css文件时,引入形式如下:

1
2
3
4
//修改前
<link href="/market/Public/Admin/css/mine.css" type="text/css" rel="stylesheet" />
//修改后
<link href="<?php echo A_CSS_URL; ?>mine.css" type="text/css" rel="stylesheet" />

配置文件

TP框架中,有几种不同的配置文件,例如在market项目中,与之有关的配置文件如下:

  • ThinkPHP/Conf/convention.php 系统主要配置文件,平时不做修改,针对所有项目都起作用
  • market/Common/Conf/config.php 当前market项目的配置文件,仅针对market项目起作用
  • market/Home/Conf/config.php 当前market项目Home分组的配置文件,仅针对market项目中的Home分组起作用

对于以上三个配置文件,如果存在同名的配置变量,后者会覆盖前者。

接下来,针对market项目,对其具体做一些配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
return array(
//'配置项'=>'配置值'

//页面底部显示跟踪信息
'SHOW_PAGE_TRACE' =>true,

//默认分组设置
'DEFAULT_MODULE' => 'Home',

//默认模块,访问网站时,若省略分组内容,则填充为默认模块
'MODULE_ALLOW_LIST' => array('Home','Admin'), //定义可供访问的分组列表

//Smary模板引擎切换
'TMPL_ENGINE_TYPE' => 'Smarty',
);

TP框架支持Smarty模板引擎,当切换为该引擎之后,对于css、img等静态资源文件的调用需要结合Smarty模板引擎进行设置,
此时,在模板中引入css文件时,引入形式如下:

1
2
3
4
//修改前
<link href="<?php echo A_CSS_URL; ?>mine.css" type="text/css" rel="stylesheet" />
//修改后
<link href="{$smarty.const.A_CSS_URL}mine.css" type="text/css" rel="stylesheet" />

另外,切换为Smarty引擎后,有可能会出现如下错误:


其原因在于Smarty模板中的{}与css或js有冲突,有如下几种解决方案:

  1. {}与内容中间设置空格
  2. 使{}左右标记换行
  3. 设置{literal}{/literal}标记
  4. 改变Smarty的标记符号

后台品字形页面搭建

后台界面使用frame标签搭建而成,frame标签的src属性值不能设置相对路径,因为相对地址会受到路由最后一级地址的影响而使得请求有可能失败,所以最好使用绝对路径。设置过绝对路径之后,我们需要考虑同样的问题,即为了便于后期维护和升级,我们可以将路径地址设置为常量。

TP框架自身提供了一些常量:

http://网址/index.php/分组/控制器/操作方法/名称/值/名称/值/

__MODULE__: 路由地址分组信息 (http://网址/index.php/分组)
__CONTROLLER__: 路由地址控制器信息 (http://网址/index.php/分组/控制器)
__ACTION__: 路由地址操作方法信息 (http://网址/index.php/分组/控制器/操作方法)
__SELF__: 路由地址的全部信息 (http://网址/index.php/分组/控制器/操作方法/名称/值/名称/值/ )

MODULE_NAME: 分组名称
CONTROLIER_NAME: 控制器名称
ACTION_NAME: 操作方法名称

根据具体情况,选择相对应的常量去替换路径地址,而且这些常量不需要php的echo输出,会直接变成具体的常量信息,因为tp框架自身有“替换机制”,会将其替换为对应的常量内容。其次,在这里还需要结合Smarty模板语法特征,修改样例如下:

1
2
3
4
//修改前
<frame name=head src="/market/index.php/Admin/Index/head.html" frameborder=0 noresize scrolling=no>
//修改后
<frame name=head src="{$smarty.const.__CONTROLLER__}/head.html" frameborder=0 noresize scrolling=no>

-------------The End-------------