PHP中使用Smarty模板目录结构配置

Smarty 是PHP的一个模板引擎,是由Monte Ohrt 和 Andrei Zmievski 使用PHP语言开发的,发展至今已成为一个非常流行的模板引擎,Smarty 提供了一种易于管理和使用的方法,将PHP代码从HMTL代码页面中分享出来,使用程序员与页面美工之间的分工更加明确,大大提高团队的开发效率。
1、要使用Smarty 可到官方网站http://www.smarty.net 去下载,smary2.x 和3.x区别:

【转】Smarty 3 API 的语法结构已经重构,使之更一致性和模块化,虽然为了向下兼容,仍然支持Smarty 2的语法,但会抛出一个被弃用的notice,虽然你可以屏蔽该notice,但强烈建议,在使用Smarty 3 时使用3的语法,一方面,Smarty 2的语法很可能在后面的版本中逐渐被取消,另一方面, Smarty2的语法,是对Smarty3的API的封装,所以性能方面也会有损失。 以下是 Smarty3与Smarty2的差别之处

1) 基本上,Smarty3的方法采用驼峰式的命名方式,如 fooBarBaz ;

2) 所有Smarty的属性都有get 和 set 的方法 如$smarty->cache_dir = ‘foo/’ 现在可以这样赋值 $smarty->setCacheDir('foo/'),同样可以通过 $smarty->getCacheDir() 来得到该属性值 ;

3) Smarty 3废除了一些如 ”is*”的方法,因为他们和现在的”get*”方法重复了 ;

4) Smarty 3 只能在PHP5下运行,不支持PHP4.;

5) {php} 标签默认是关闭的. 使用$smarty->allow_php_tag=true.开启 ;

6) 被空白包围的分隔符将不被解析,如{ foo }将不再作为smarty标签被解析,你必须使用{foo}
下载完成按以下步骤安装:
(1) 将下载完的 Smarty 压缩包解压到一个指定位置,将文件夹内的libs文件夹复制到自己的工作路径下,安装完成!
1-1.将刚刚复制过来的libs文件夹重命名为你自己喜欢的文件夹名字,我用smarty来命名
1-2.在与smarty文件夹同一目录下新建以下几个文件夹(名字都可以自己起,但是要与下一步的配置一一对应):templates(用于存放模版的目录)、templates_c(用于存放编译后文件的目录)、cache(用于存放缓存的目录)、configs(用于存放配置的目录)
(2) 因为在程序中要用到 Smarty 的类库,而Smarty 类文件是位于 libs 文件夹下的Smarty.class.php文件,所以需要修改 PHP的配置文件 Php.ini 文件:查找 include_path 项,在下面添加 include_path = ” .; c:/smarty/libs “,注意,多个路径可用分号隔开,因为新添加的路径会覆盖上面的路径设置。

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
include_path=".;F:\xampp\php\PEAR"

改为:

; Windows: "\path1;\path2"
include_path=".;F:\xampp\php\PEAR;F:\programFiles\Smarty-3.1.16\libs"
接触一个新东西,往往搭建最初始的环境最让人捉急。

在使用PHP模板Smarty过程中,如果不涉及自定义目录结构的话,按照下面的目录组织就可以直接使用了(上面介绍的安装方法)。

这里写图片描述

图上的每个目录都有了相应的说明,关于smarty的工作原理就是按照Smarty的语法规则编写模本文件,然后PHP脚本提供对应的数据,二者通过Smarty模板引擎最终输出可以展示的文件(包含格式+数据)。
如下图是Smarty最基本的工作原理,当然Smarty还提供更多强大的功能。
这里写图片描述
接下来就是一个Hello Smarty的体验了。
1.编一个提供数据的PHP文件(index.php)

<?php

    require('./smarty/Smarty.class.php');

    $_smarty=new Smarty();

    $_smarty->assign('title', '欢迎');
    $_smarty->assign('name', 'Smarty');

    $_smarty->display('index.tpl');
?>

2.编一个用户展示数据的模本文件index.tpl(注意模板文件要放置到templates文件夹中)

<!DOCTYPE html>
<html>
    <head>
        <title>{$title}</title>
    </head>
    <body>
        <h3>Hello, {$name}</h3>
    </body>
</html>

3.访问index.php
这里写图片描述
至此Smarty就可以工作了,但是关于Smarty的用法不是本文的重点,本文的重点是Smarty的目录结果配置。

为了说明Smarty的目录结构配置,先引入一个问题:目前的php文件都在工程根目录,实际应用中这样并不可取,这时候我们新建一个demo1.php放置到test目录下,看看会发生什么情况。
1 ./test/demo1.php代码如下:

<?php
    require('../smarty/Smarty.class.php');

    $_smarty=new Smarty();

    $_smarty->assign('title', '欢迎');
    $_smarty->assign('name', 'Smarty');

    var_dump($_smarty->getTemplateDir());

    $_smarty->display('index.tpl');

?>

注意:
模板文件不变
引入Smarty.class.php文件的路径发生变化。
打印模板目录信息(getTemplateDir())

2.访问/test/demo1.php文件看看结果:
这里写图片描述
首先问题出在模板文件index.tpl找不到,其次打印出的模板目录是:’.\templates\’很显然当前test目录下并不存在template目录,这个时候该怎么办呢?

3.自定义目录结构
实际开发中目录结构自然不能因为某个框架或者组件变成死的,当然框架或组件的开发者一般都会提供最大限度的可扩展,可配置。
上面的问题产生的原因倒不是应为我们的test目录下没有templates目录,而是我们在使用Smarty的时候完全采用了默认的配置,这样做方便了使用,单不利于项目的组织和管理。
我们能够做的就是将Smarty的自定义配置分离出来,单独做一个文件,然后在使用到Smarty对象的地方直接引用即可。
3.1下面是一个简单的分离示例(smarty.config.php):

<?php
    //Smarty PHP configuration

    define('REAL_PATH', dirname(__FILE__));

    require(REAL_PATH.'/smarty/Smarty.class.php');

    $_smarty=new Smarty();

    $_smarty->setCacheDir(REAL_PATH.'/cache');
    $_smarty->setConfigDir(REAL_PATH.'/configs');
    $_smarty->setPluginsDir(REAL_PATH.'/plugins'); 
    $_smarty->setTemplateDir(REAL_PATH.'/templates');
    $_smarty->setCompileDir(REAL_PATH.'/templates_c');

    //添加Smarty自带的插件库
    $_smarty->addPluginsDir(REAL_PATH.'/smarty/plugins');

    //检测Smarty目录结构配置是否有效
    // $_smarty->testInstall();
?>

3.2 将smarty.config.php放置到工程的根目录,然后去掉$_smarty->testInstall()的注释,访问smarty.config.php看看有什么效果:
这里写图片描述
看到这么多Ok,就说明我们的Smarty目录结构配置成功了。
3.3接下来我们要使用smarty.config.php,在test目录下创建demo2.php:

<?php

    require('../smarty.config.php');

    // global $_smarty;

    $_smarty->assign('title', '欢迎');
    $_smarty->assign('name', 'Smarty');

    $_smarty->display('index.tpl');
?>

注意:
包含smarty.config.php的路径
3.4 接下来访问tset/demo2.php看看什么效果:
这里写图片描述

看到这个结果和我们最开始的结果是一致的,这样我们就可以在项目中使用Smarty的时候不用关心Smarty的要求的目录结果是什么样子的了,当然并非一点都不关心,这个时候我们只需要维护smarty.config.php中的配置。

4.smarty.config.php配置的一点延伸
从3.1中smarty.config.php的配置代码中看,我们引入Smarty.class.php类的时候使用的绝对路径,这样做就可以保证项目中任何通过引入smarty.config.php文件来使用Smarty类能够正常加载。
做到这一步之后,接下来为了防止通过浏览器直接访问Smarty库以及它的依赖目录(cache, template, plugins, configs, templates_c),我们需要做点安全方面的工作,这个时候只需要吧Smarty库和它的依赖目录至于服务器文档根目录之外, 然后修改smart.config.php文件中的配置即可。
smarty3.7的目录结果如下图:
这里写图片描述
然后修改一下smarty.config.php中的配置即可,如下代码行。

define('REAL_PATH', 'D:\smarty3.7');

注:如通过浏览器访问 http://localhost/smarty/smarty/Smarty.class.php; http://localhost/smarty/templates/index.tpl; 都是不安全的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值