标签:包括 自动调用 包含 定义函数 pre 开发 php程序 and 有用
smarty是模板引擎,它的作用是便于团队开发,PHP程序员负责PHP程序编写 提供数据,前端程序员负责编写静态页面,Smarty在中间负责一种类似于桥梁的作用。
其实模板引擎很多,但为什么要学习Smarty呢?
www.smarty.net/download下载后将libs文件夹导入到项目目录。
在项目中创建两个文件夹:1、templates(模板目录),2、templates_c(编译目录)
创建index.php(php人员的工作) 代码如下:
<?php /** * Created by PhpStorm. * User: Alex * Date: 2017/1/10 * Time: 12:46 */ include "libs/Smarty.class.php"; // 实例化smarty对象 $smarty = new Smarty(); // 设置相关属性 $smarty->setTemplateDir(‘templates‘); // 模板目录 $smarty->setCompileDir(‘templates_c‘); // 编译目录 // 分配数据 $smarty->assign(‘title‘, ‘smarty模板引擎‘); $smarty->assign(‘content‘, ‘smarty是一个很好的模板引擎‘); // 载入视图 $smarty->display(‘index.html‘);
创建index.html(前端人员工作) 代码如下:
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <h1>{$title}</h1> <p>{$content}</p> </body> </html>
上面只是简单的例子,下面我们来正式学习下smarty
上面在index.html中使用的“{}”就是定界符,用户解析数据来显示。
注意点:
// 重新定义定界符 $smarty->left_delimiter = ‘<{‘; $smarty->right_delimiter = ‘}>‘;
<!DOCTYPE html> <html> <head> <title></title> <style> {literal} h1{ color: red; } p{ font-size: 20px; } {/literal} </style> </head> <body> <h1>{$title}</h1> <p>{$content}{*这是注释*}</p> </body> </html>
注释写法:左定界符+注释内容+右定界符,默认为 {*注释内容*}
在smarty中变量有3种:
我们最常用的。其中分类有三种:
<?php /** * Created by PhpStorm. * User: Alex * Date: 2017/1/10 * Time: 12:46 */ include ‘libs/Smarty.class.php‘; // 初始化smarty对象 $smarty = new Smarty(); // 配置 $smarty->setTemplateDir(‘templates‘); $smarty->setCompileDir(‘templates_c‘); // 分配变量 $smarty->assign(‘score‘,100); $smarty->assign(‘is_show‘,false); $user = array(‘alex‘,‘alice‘,‘sky‘); $smarty->assign(‘user‘,$user); $book = array(‘id‘=>1,‘name‘=>‘learn Smarty‘,‘author‘=>‘xxx‘); $smarty->assign(‘book‘,$book); // 载入 $smarty->display(‘index.html‘);
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <h1>标量变量</h1> <p>{$score}</p> <p>{$is_show}</p> <h1>索引数组</h1> <ul> <li>{$user[0]}</li> <li>{$user.1}</li> <li>{$user[2]}</li> </ul> <h1>关联数组</h1> <ul> <li>{$book[‘id‘]}</li> <li>{$book[‘name‘]}</li> <li>{$book.author}</li> </ul> </body> </html>
无需用assign分配,直接可以在模板页面中引用的变量。其中包括PHP的超全局变量($_GET , $_SERVER)还有一些Smarty自带的一些变量。
使用格式:{$smarty.变量名}
<?php /** * Created by PhpStorm. * User: Alex * Date: 2017/1/10 * Time: 12:46 */ include ‘libs/Smarty.class.php‘; // 初始化smarty对象 $smarty = new Smarty(); // 配置 $smarty->setTemplateDir(‘templates‘); $smarty->setCompileDir(‘templates_c‘); // 定义常量(无需调用assign) define(‘ROOT‘,getcwd()); // 载入 $smarty->display(‘index.html‘);
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <h1>保留变量</h1> <p>{$smarty.server.SERVER_NAME}</p> <p>{$smarty.now}</p> <p>{$smarty.version}</p> {* 这是PHP中定义的常量 引用格式为:$smarty.const.常量名 *} <p>{$smarty.const.ROOT}</p> </body> </html>
无需assign分配,多为前端开发人员使用,首先在项目中创建一个configs文件夹,在configs文件夹下创建配置文件test.conf
格式:{#配置变量#}或{$smarty.config.配置变量}
配置文件(test.conf):
number = ‘a2589‘ lang = ‘en‘ [style1] color = #ff00ff [style2] color = red
用法:
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <h1>配置变量</h1> <p>首先需要引入配置文件后使用</p> {config_load file = ‘test.conf‘ section=‘style1‘} <p>{$smarty.config.number}</p> <p>{#number#}</p> <p>{#color#}</p> </body> </html>
配置文件可以分段载入,只需要设置section参数即可。
可分为三大类:
和php完全一样,实现选择分支,可用数学运算。
<?php /** * Created by PhpStorm. * User: Alex * Date: 2017/1/10 * Time: 12:46 */ include ‘libs/Smarty.class.php‘; // 初始化smarty对象 $smarty = new Smarty(); // 配置 $smarty->setTemplateDir(‘templates‘); $smarty->setCompileDir(‘templates_c‘); // 分配变量 $smarty->assign(‘iq‘,60); // 载入 $smarty->display(‘if.tpl‘);
<html> <head> </head> <body> <h1>if/else使用</h1> <p>已读取您的IQ:{$iq}</p> <p>您的潜力分析: {if $iq >= 130} 您的潜力很高,天生的天才。 {elseif $iq >= 110 && $iq < 130} 您的天资较高,如果付出相应的努力肯定会成为一个人才。 {elseif $iq >= 90 && $iq < 110} 您的天资一般,但是如果能够比别人付出更多些,肯定会得到相应的回报。 {else} 。。。早点休息吧 {/if} </p> </body> </html>
和PHP一样 foreach是循环遍历用的,格式:{foreach $array as $item} 或 {foreach $array as $key => $item}
例子:
<?php /** * Created by PhpStorm. * User: Alex * Date: 2017/1/10 * Time: 12:46 */ include ‘libs/Smarty.class.php‘; // 初始化smarty对象 $smarty = new Smarty(); // 配置 $smarty->setTemplateDir(‘templates‘); $smarty->setCompileDir(‘templates_c‘); // 分配变量 $user = array(‘alex‘,‘alice‘,‘alisa‘); $child = array(‘id‘ => 5, ‘name‘ => ‘Ben‘, ‘age‘ => 4); $class = array( array(‘id‘ => 0, ‘name‘ => ‘Crystal‘, ‘age‘ => 6), array(‘id‘ => 1, ‘name‘ => ‘Candy‘, ‘age‘ => 5), array(‘id‘ => 2, ‘name‘ => ‘Gina‘, ‘age‘ => 7), array(‘id‘ => 3, ‘name‘ => ‘Zoe‘, ‘age‘ => 6) ); $smarty->assign(‘user‘, $user); $smarty->assign(‘child‘, $child); $smarty->assign(‘class‘, $class); // 载入 $smarty->display(‘if.tpl‘);
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <h1>枚举数组</h1> <ul> {foreach $user as $name} <li>{$name}</li> {/foreach} </ul> <h1>关联数组</h1> <ul> {foreach $child as $key => $item} <li>{$key} ------ {$item}</li> {/foreach} </ul> <h1>二维数组</h1> <table width="500" border="1"> <tr> <td>id</td> <td>name</td> <td>age</td> </tr> {foreach $class as $childs} <tr> {foreach $childs as $item} <td>{$item}</td> {/foreach} </tr> {/foreach} </table> <h1>二维数组(第二种写法)</h1> <table width="500" border="1"> <tr> <td>id</td> <td>name</td> <td>age</td> </tr> {foreach $class as $childs} <tr> <td>{$childs.id}</td> <td>{$childs.name}</td> <td>{$childs.age}</td> </tr> {/foreach} </table> </body> </html>
foreach还有一些属性 非常有用:
<table width="500" border="1"> <tr> <td>id</td> <td>name</td> <td>age</td> </tr> {foreach $class as $childs} <tr class = "{if $childs@first}first{elseif $childs@last}last{/if}"> <td>{$childs.id}</td> <td>{$childs.name}</td> <td>{$childs.age}</td> </tr> {/foreach} </table>
foreach拓展:可以使用{foreachelse}分支,当数组没有内容时会分配到此分支。
section也是用于循环的,只不过它只适用于枚举数组,关联数组不能使用,介绍下section的参数:
例子:
<?php /** * Created by PhpStorm. * User: Alex * Date: 2017/1/10 * Time: 12:46 */ include ‘libs/Smarty.class.php‘; // 初始化smarty对象 $smarty = new Smarty(); // 配置 $smarty->setTemplateDir(‘templates‘); $smarty->setCompileDir(‘templates_c‘); // 分配变量 $user = array(‘alex‘,‘alice‘,‘alisa‘,‘ben‘); $smarty->assign(‘user‘,$user); // 载入 $smarty->display(‘index.html‘);
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <h1>section</h1> <ul> {section name = ‘index‘ loop = $user} <li>{$user[index]}</li> {/section} </ul> </body> </html>
section也可以使用:total、first、last、iteration、index等属性
标签:包括 自动调用 包含 定义函数 pre 开发 php程序 and 有用
原文地址:http://www.cnblogs.com/Alex-sk/p/6267449.html