This article describes how to use variables in PHP template engine Smarty. Share it with everyone for your reference, the details are as follows:
1. Overview:
Smarty is one of many template engines for PHP. It is a class library written in PHP.
Advantages of Smarty:
1. Optimize website access speed;
2. Separation of web front-end design and program;
2. Smarty installation
1. You need to download the latest Smarty version from Smarty’s official website http://www.smarty.net/download.php. For example, the downloaded version is: Smarty-2.6.18.tar.tar;
2. Unzip the Smarty-2.6.18.tar.tar compressed package and you will find many files and folders. Except for the libs folder, it is useless to delete all others;
3. When calling the Smarty template engine, you should first use PHP's require statement to load the file libs/Smarty.class.php.
3. Default settings of Smarty class library
require After entering the Smarty.class.php file, if you need to set the members in the Smarty class library, there are two methods: one is to modify it directly in the Smarty.class.php file; the other is to initialize the class The library is respecified later, generally using the latter. The following is a description of the member properties in the Smarty class library:
1. $template_dir: Set the directory where template files in the website are stored. The default directory is templates
2. $compile_dir: Set the directory where compiled files in the website are stored. The default directory is templates_c
3. $config_dir: Defines the directory used to store special configuration files for templates. The default is configs
4. $left_delimiter: used for the left terminator variable in the template, the default is '{'
5. $right_delimiter: used for the right terminator variable in the template, the default is '}'
4. Use of variables:
All access in Smarty is based on variables. The following is an example to illustrate.
Example idea: The main file introduces the template initialization configuration file (init.inc.php) and a class, and assigns values to the variables in the template.
First, set the init.inc.php file as the initialization configuration file of the Smarty template
init.inc.php
<?php define('ROOT_PATH', dirname(__FILE__)); //定义网站根目录 require ROOT_PATH.'/libs/Smarty.class.php'; //载入 Smarty 文件 $_tpl = new Smarty(); //实例化一个对象 $_tpl->template_dir = ROOT_PATH.'/tpl/'; //重新设置模板目录为根目录下的 tpl 目录 $_tpl->compile_dir = ROOT_PATH.'./com/'; //重新设置编译目录为根目录下的 com 目录 $_tpl->left_delimiter = '<{'; //重新设置左定界符为 '<{' $_tpl->right_delimiter = '}>'; //重新设置左定界符为 '}>' ?>
Main file index.php
<?php require 'init.inc.php'; //引入模板初始化文件 require 'Persion.class.php'; //载入对象文件 global $_tpl; $title = 'This is a title!'; $content = 'This is body content!'; /* * 一、从 PHP 中分配给模板变量; * 动态的数据(PHP从数据库或文件,以及算法生成的变量) * 任何类型的数据都可以从PHP分配过来,主要包括如下 * 标量:string、int、double、boolean * 复合:array、object * NULL * 索引数组是直接通过索引来访问的 * 关联数组,不是使用[关联下标]而是使用 . 下标的方式 * 对象是直接通过->来访问的 * */ $_tpl->assign('title',$title); $_tpl->assign('content',$content); //变量的赋值 $_tpl->assign('arr1',array('abc','def','ghi')); //索引数组的赋值 $_tpl->assign('arr2',array(array('abc','def','ghi'),array('jkl','mno','pqr'))); //索引二维数组的赋值 $_tpl->assign('arr3',array('one'=>'111','two'=>'222','three'=>'333')); //关联数组的赋值 $_tpl->assign('arr4',array('one'=>array('one'=>'111','two'=>'222'),'two'=>array('three'=>'333','four'=>'444'))); //关联二维数组的赋值 $_tpl->assign('arr5',array('one'=>array('111','222'),array('three'=>'333','444'))); //关联和索引混合数组的赋值 $_tpl->assign('object',new Persion('小易', 10)); //对象赋值 //Smarty 中数值也可以进行运算(+-*/^……) $_tpl->assign('num1',10); $_tpl->assign('num2',20); $_tpl->display('index.tpl'); ?>
The template file index.tpl of the main file index.php (stored in the /tpl/ directory)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><{$title}></title> </head> <body> 变量的访问:<{$content}> <br /> 索引数组的访问:<{$arr1[0]}> <{$arr1[1]}> <{$arr1[2]}> <br /> 索引二维数组的访问: <{$arr2[0][0]}> <{$arr2[0][1]}> <{$arr2[0][2]}> <{$arr2[1][0]}> <{$arr2[1][1]}> <{$arr2[1][2]}> <br /> 关联数组的访问:<{$arr3.one}> <{$arr3.two}> <{$arr3.three}> <br /> 关联二维数组的访问:<{$arr4.one.one}> <{$arr4.one.two}> <{$arr4.two.three}> <{$arr4.two.four}> <br /> 关联和索引混合数组的访问:<{$arr5.one[0]}> <{$arr5.one[1]}> <{$arr5[0].three}> <{$arr5[0][0]}> <br /> 对象中成员变量的访问:<{$object->name}> <{$object->age}> <br /> 对象中方法的访问:<{$object->hello()}> <br /> 变量的运算:<{$num1+$num2}> <br /> 变量的混合运算:<{$num1+$num2*$num2/$num1+44}> <br /> </body> </html>
Persion.class.php
<?php class Persion { public $name; //为了访问方便,设定为public public $age; //定义一个构造方法 public function __construct($name,$age) { $this->name = $name; $this->age = $age; } //定义一个 hello() 方法,输出名字和年龄 public function hello() { return '您好!我叫'.$this->name.',今年'.$this->age.'岁了。'; } } ?>
Execution result:
变量的访问:This is body content! 索引数组的访问:abc def ghi 索引二维数组的访问: abc def ghi jkl mno pqr 关联数组的访问:111 222 333 关联二维数组的访问:111 222 333 444 关联和索引混合数组的访问:111 222 333 444 对象中成员变量的访问:小易 10 对象中方法的访问:您好!我叫小易,今年10岁了。 变量的运算:30 变量的混合运算:94
Readers who are interested in more PHP-related content can check out the special topics of this site: "Basic Tutorial for Getting Started with Smarty Templates", "Summary of PHP Template Technology", "Summary of PHP Database Operation Skills Based on PDO", "PHP Operations and Operators" Usage summary", "PHP network programming skills summary", "PHP basic syntax introductory tutorial", "php object-oriented programming introductory tutorial", "php string (string) usage summary", "php mysql database operation introductory tutorial" and "Summary of Common Database Operation Skills in PHP"
I hope this article will be helpful to everyone’s PHP program design based on smarty templates.