开发者社区> undefault> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 在使用PHP模板Smarty过程中,如果不涉及自定义目录结构的话,按照下面的目录组织就可以直接使用了(前提是需要阅读以下用户手册)。          图上的每个目录都有了相应的说明,关于smarty的工作原理就是按照Smarty的语法规则编写模本文件,然后PHP脚本提供对应的数据,二者通过Smarty模板引擎最终输出可以展示的文件(包含格式+数据)。     如下图
+关注继续查看

在使用PHP模板Smarty过程中,如果不涉及自定义目录结构的话,按照下面的目录组织就可以直接使用了(前提是需要阅读以下用户手册)。

   wKioL1OMNQeQeUcgAAGJpK_02do084.jpg

     图上的每个目录都有了相应的说明,关于smarty的工作原理就是按照Smarty的语法规则编写模本文件,然后PHP脚本提供对应的数据,二者通过Smarty模板引擎最终输出可以展示的文件(包含格式+数据)。

    如下图是Smarty最基本的工作原理,当然Smarty还提供更多强大的功能。

   wKiom1OMOJ-CLDHIAACq1mv7UDI156.jpg


 接下来就是一个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

 wKiom1OMOVey5LFaAACCD4TfCtg495.jpg

     至此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文件看看结果:

    wKiom1OMPITS_UqHAAHm5KXCuns295.jpg

     首先问题出在模板文件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看看有什么效果:

wKiom1OMP5WhBOl_AAJ4G9N3YV4522.jpg

   看到这么多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看看什么效果:

  wKiom1OMQK6wTutFAACrtNUSs7I724.jpg

    看到这个结果和我们最开始的结果是一致的,这样我们就可以在项目中使用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的目录结果如下图:

   wKiom1OMRuizQokQAAA5v8HYgJ4822.jpg

  然后修改一下smarty.config.php中的配置即可,如下代码行。

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

   注:如通过浏览器访问  http://localhost/smarty/smarty/Smarty.class.php; http://localhost/smarty/templates/index.tpl; 都是不安全的。原文地址:  http://aiilive.blog.51cto.com/1925756/1421211

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
菜鸟一面:说一说对Spring和SpringMvc父子容器的理解?
菜鸟一面:说一说对Spring和SpringMvc父子容器的理解?
37 0
使用SAP PI和XIF Adapter将SAP CRM Opportunity同步到C4C系统
使用SAP PI和XIF Adapter将SAP CRM Opportunity同步到C4C系统
37 0
SAP成都研究院C4C光明左使:SAP Cloud for Customer 使用SAP UI5的独特之处
大家好,今天的文章来自我的同事,Yang Joey。 2017年7月,SAP成都研究院C4C开发团队刚刚建立。某个周一早晨的Scrum meeting,新出现一位眉清目秀的小伙子,向大家自我介绍:“大家好,我叫杨xiao”。
53 0
使用URL直接进入SAP CRM WebClient UI某个订单的明细页面
使用URL直接进入SAP CRM WebClient UI某个订单的明细页面
49 0
SAP UI5 sap-ui-core.js的加载逻辑
SAP UI5 sap-ui-core.js的加载逻辑
33 0
SAP成都研究院C4C光明左使:SAP Cloud for Customer 使用SAP UI5的独特之处
大家好,今天的文章来自我的同事,Yang Joey。 2017年7月,SAP成都研究院C4C开发团队刚刚建立。某个周一早晨的Scrum meeting,新出现一位眉清目秀的小伙子,向大家自我介绍:“大家好,我叫杨xiao”。
2185 0
smarty模版目录疑问
2013年4月5日 15:46:25 今天鼓捣yaf和smarty整合,用var_dump();打印出来了smarty对象,看到他其中存放模版目录的变量是用数组保存的,如下: objSmarty 1 object(Smarty)[15] 2 public 'auto_liter...
955 0
利用 Spring 与 Log4J 巧妙地进行动态日志配置切换并立即生效
  引言:     在开发与生产环境中,我们有时候需要对日志的配置进行动态切换,要调试、监控和检查系统的运行时信息。    一般有两种方法     1、通过 Spring 的 Log4jConfigListener 在启动时开启定时器进行定时加载配置文件     2、通过 JMX 动态控制     以上可以从我的《利用Spring来管理控制自己的应用程序》专题演讲资料中获取到更加详细的信息,包
1275 0
+关注
86
文章
4
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载