作为一个开发者,使用模板引擎来生成动态网页已经成为一种必备的技能。而Smarty则是PHP语言中最受欢迎的模板引擎之一,它提供的功能强大却易于使用,因此在PHP的世界中广受欢迎。本篇文章将通过详尽的Smarty手册,帮助读者更好地应用Smarty模板引擎。
1. 安装Smarty
首先,我们需要通过Composer安装Smarty。在composer.json文件中加入如下内容:
```
"require": {
"smarty/smarty": "^3.1"
}
```
然后运行`composer install`,Composer就会下载Smarty。
2. 配置Smarty
Smarty需要配置一些常规选项,以便适应项目的需求。可以在项目根目录创建一个`smarty_config.php`文件,并在其中设置选项:
```php
require_once 'vendor/autoload.php';
$smarty = new Smarty();
$smarty->setTemplateDir(__DIR__ . '/templates');
$smarty->setCompileDir(__DIR__ . '/templates_c');
$smarty->setCacheDir(__DIR__ . '/cache');
$smarty->setConfigDir(__DIR__ . '/configs');
$smarty->assign('app_name', 'My App');
```
在上面的例子中,我们设置了模板目录、编译目录、缓存目录和配置目录。我们还将应用程序名称传递给Smarty以便在模板中使用。
3. Smarty标记
Smarty使用标记(Marks)来插入动态内容到静态HTML中。Smarty的标记跟HTML的标记很类似,通常由左括号、符号、变量名、修饰符、右括号等构成。Smarty标记的常用格式如下:
```Smarty
{符号 变量名 修饰符}
```
3.1 Smarty变量
Smarty变量可用于存储和映射动态数据。Smarty变量可在标记中使用,也可以在php代码中使用。
* 标记
有两种形式的Smarty变量:静态和动态。
静态变量指的是在模板里声明的变量,例如:
```Smarty
{assign var="name" value="John Smith"}
```
而动态变量则是从应用程序中传递过来的变量,例如:
```Smarty
```
这里的`$title`是在php代码中通过`$smarty->assign('title', 'My Title');`传递过来的。
* PHP代码
在php代码中,我们可以使用以下方式设置Smarty变量:
```php
$smarty->assign('first_name', 'John');
$smarty->assign('last_name', 'Smith');
$smarty->assign('age', 30);
```
在标记中使用的方式跟在php代码中设置Smarty变量的方式是一样的。
3.2 Smarty修饰符
修饰符是一种可用于变量的操作和处理的函数。Smarty提供了许多的修饰符,包括HTML特殊字符转义、日期时间格式化、字符串格式化等等。例如:
```Smarty
{$title|htmlspecialchars}
```
这里的`htmlspecialchars`把`$title`中的HTML特殊字符转义成了普通文本。Smarty支持多个修饰符同时使用,例如:
``` Smarty
{$title|truncate:30:"...":true|capitalize}
```
这个标记将把`$title`截取前30个字符,并把分割符设置成省略号“...”,添加一个句点,并将首字母大写。
3.3 Smarty运算符
Smarty内置了一些算术、比较、逻辑、位运算等运算符。运算符的优先级与标准PHP运算符相同。例如:
```Smarty
{$a + $b}
{$a && $b}
{$a > $b ? 'Yes' : 'No'}
```
在Smarty中,任何变量都可以作为表达式和运算符的操作数。
3.4 Smarty流程控制
Smarty提供了if/else、foreach、while、break、continue等结构来控制模板的输出。
* if/else
if/else语句用于根据条件是否满足来输出不同的内容。例如:
```Smarty
{if $age >= 18}
You are an adult.
{else}
You are a minor.
{/if}
```
* foreach
foreach语句可用于遍历数组并输出每个数组元素的内容。例如:
```Smarty
- {$user.name}
{foreach $users as $user}
{/foreach}
```
* while
while语句用于反复执行某个条件下的语句。例如:
```Smarty
{while $x <= 5}
{$x}
{$x = $x + 1}
{/while}
```
* break和continue
break和continue语句可用于提前结束或跳过循环。例如:
```Smarty
{foreach $users as $user}
{if $user.status == 'deleted'}
{continue}
{else}
{/if}
{if $user.id == 1000}
{break}
{/if}
{/foreach}
```
4. Smarty模板
在模板中,我们可以使用上述标记、变量、修饰符、运算符和流程控制来生成HTML。
4.1 模板注释
注释可用于为代码添加解释或指示。Smarty提供了两种注释方式:
```Smarty
{* 注释内容 *}
{** 注释内容 **}
```
其中,第一种注释方式类似HTML的注释,而第二种注释方式可以包含文本换行符和其他Smarty标记。
```Smarty
{* This is a
multi-line comment. *}
{**
This is also
a multi-line comment.
**}
```
4.2 自定义函数
在模板中,我们也可以使用自定义函数来实现某些特殊功能。例如:
```Smarty
{function name="price_roundup" min_value=5 max_value=10}
{$price|roundup}
{/function}
```
在上面的例子中,我们定义了一个名为`price_roundup`的函数,其最小值为5,最大值为10,它将取得变量`$price`的值作为输入,然后进行向上取整操作。在我们想要实现特定功能的时候,使用自定义函数可以让我们的模板更具可重用性和灵活性。
5. 总结
Smarty是一种简单、快速、灵活和功能强大的模板引擎。无论是用于开发大型应用程序还是快速开发小型项目,Smarty都能够为开发者提供帮助。本手册详细讲解了Smarty的各种功能和特性,相信读者可以通过学习本手册更好地掌握Smarty模板引擎。