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

简介:

   接触一个新东西,往往搭建最初始的环境最让人捉急。

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

    wKioL1OMNQeQeUcgAAGJpK_02do084.jpg

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

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

    wKiom1OMOJ-CLDHIAACq1mv7UDI156.jpg


    

 接下来就是一个Hello Smarty的体验了。

     1.编一个提供数据的PHP文件(index.php)

       

1
2
3
4
5
6
7
8
9
10
11
<?php
     
     require ( './smarty/Smarty.class.php' );
 
     $_smarty = new  Smarty();
 
     $_smarty ->assign( 'title' '欢迎' );
     $_smarty ->assign( 'name' 'Smarty' );
 
     $_smarty ->display( 'index.tpl' );
?>

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

 

1
2
3
4
5
6
7
8
9
<!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代码如下:

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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):

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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:

 

1
2
3
4
5
6
7
8
9
10
11
<?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文件中的配置即可。




本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1421211,如需转载请自行联系原作者


   smarty3.7的目录结果如下图:

   wKiom1OMRuizQokQAAA5v8HYgJ4822.jpg

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

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

   

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

相关文章
|
8天前
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
24 3
|
2月前
|
关系型数据库 MySQL PHP
php wampserver的使用配置
本文介绍了WampServer在Windows系统下的配置和使用方法,包括如何修改PHP时区为中国标准时区PRC、更改Apache服务器端口号以避免冲突、设置起始页以及如何创建和管理虚拟目录。通过这些步骤,用户可以更有效地在本地环境中开发和测试PHP程序。
php wampserver的使用配置
|
1月前
|
应用服务中间件 Shell PHP
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
|
2月前
|
Unix PHP
PHP-FPM 配置
PHP-FPM 配置
|
1月前
|
缓存 NoSQL 数据处理
原生php实现redis缓存配置和使用方法
通过上述步骤,你可以在PHP项目中配置并使用Redis作为高性能的缓存解决方案。合理利用Redis的各种数据结构和特性,可以有效提升应用的响应速度和数据处理效率。记得在实际应用中根据具体需求选择合适的缓存策略,如设置合理的过期时间,以避免内存过度消耗。
52 0
|
PHP 安全 开发者
PHP使用Smarty模板目录结构配置
在使用PHP模板Smarty过程中,如果不涉及自定义目录结构的话,按照下面的目录组织就可以直接使用了(前提是需要阅读以下用户手册)。          图上的每个目录都有了相应的说明,关于smarty的工作原理就是按照Smarty的语法规则编写模本文件,然后PHP脚本提供对应的数据,二者通过Smarty模板引擎最终输出可以展示的文件(包含格式+数据)。     如下图
1137 0
|
2月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
2月前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
138 9
|
3月前
|
存储 SQL 关系型数据库
PHP与MySQL交互的奥秘
【8月更文挑战第29天】在编程的世界里,PHP和MySQL就像是一对默契的舞伴,共同演绎着数据的交响曲。本文将带你探索它们之间的互动,从连接数据库到执行查询,再到处理结果,每一步都充满了节奏与和谐。我们将一起走进这段代码的旅程,感受数据流动的魅力。
|
9天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
24 1