PHP本身就是一种标签语言, <?php echo $title; ?>
允许代码用标签的形式任意嵌套在html里,
因此,我们可以用PHP自身的这种特性,完成controller与view的分离.
1:Smarty可以协助我们分离PHP与html代码, 就是记html制作人员看不到PHP标签
2:也可以对网站进行缓存(重要)
3:面试是要用到
4:体会模板的思想
1:Cotroller与view的分离是一种功能上的分离,是一种分工的思想.
而php与html代码的分离,仅是代码层面或视觉层面上的分离.
2:smarty与MVC有什么关系?
没关系.
Smarty完成的仅是代码分离.
3:不用smarty,仍然是能够完成MVC模式的开发
Smarty的一些负面思考:
1:混杂在HTML代码中smarty标签和PHP代码.
对于web前端开发人员来说,没有实质区别
2:在实际开发中,html模板-->smarty模板的制作,依然是由PHPer来完成的
3:解析,编译本身消耗性能
4:增多了很多变量,(页面内的变量,都要赋值到smarty对象-->_tpl_vars 属性上,多了一个变量的副本)
Smarty模板类的工作流程
1:引入smarty模板类
2:assign赋值, 把外界变量传到对象内部(存在一个属性上)
3:display (编译模板,把标签模板编译成 html+php混杂的形式)
4:运行编译后的模板
Smarty的引入
Smarty是一个类, 引入过程与普通的类没有区别
1:include,require包含此文件
2:实例化
Smarty的配置
$template_dir = 'templates'; // 模板文件的所在目录
$compile_dir = 'templates_c'; // 编译后的文件所在目录
$config_dir = 'configs'; // 允许独立的配置文件存在,并且配置文件如果多了,允许单独放在一个目录里,
$cache_dir = 'cache' // 代表缓存文件的存放目录
plugins_dir = array('plugins','p2','p3'); // 插件目录(如果自行开发插件,可能会用到)
left_delimiter = '{'; // 标签的左分界符
Right_delimiter = '}' // 标签的右分界符
Caching = 0/1/2 // 是否开启缓存
cache_lifetime = 3600 秒 // 缓存生命周期
Smarty的赋值
1: $smarty->assign('key',value);
发生的变化$smarty->_tpl_vars[key] = value;
2: 如果assign($arr)中的第一个参数是数组
则会循环数组,把数组的每一个单元追加到_tpl_vars属性上
3:append追加赋值
如果需要把多个值,赋给同一个标签变量, 不必把多个值形成数组然后赋值,
可以通过append,往一个标签反复追加值.
例:
$smarty->append('goods','自行车');
$smarty->append('goods','火车');
此时: 推论 $smarty->_tpl_vars['goods'] = array(自行车,火车);
如果append进去的值是数组,并且第3个merge参数为true,则会把数组单元逐个添加到goods数组里去.
$smarty->append('goods',array('name'=>'刘备','age'=>28),true);
此时, $smarty->_tpl_vars['goods'] = array(自行车,火车,'name'=>'刘备','age'=>28);
如果是$smarty->append('goods',array('name'=>'刘备','age'=>28),false);
此时, $smarty->_tpl_vars['goods'] = array(自行车,火车,array('name'=>'刘备','age'=>28));
Smarty模板中,对变量的引用
变量来源
1:assign赋值得到的变量 , 存储在_tpl_vars属性中
2:$smarty系统变量, 对于cookie,session,get,post,$_SERVER等信息,存储在_smarty属性中
Smarty会自动捕捉,并保存起来,形成系统变量,可以直接用标签来引用.
3:从配置文件读取的变量 , 存储在_config属性中
1.1 对于assign赋值得到的变量
对于字符串型,数值型, 直接通过 $标签名 来引用
1.2 对于数组变量
如果键是字符串,则用$标签名.键
如果键是数字, 则用 $标签名[键]
1.3 对于对象方式
用$标签名->属性名 来引用对象的属性值
用$标签名->方法() 来调用对象的方法的返回值
2.1 smarty中的系统变量
以$smarty开头
例: $smarty.now, 被 解析成 time();
$smarty.get.key ---> $_GET[key]
$smarty.const.常量名 ---> echo 常量名
3.1 从配置文件得到的变量
配置文件可以用来存储常用且很少变的数据,比如网站名,备案号
通过配置文件得到这些信息,不必去读数据库,可以省一些数据库的开销.
配置文件的写法;
配置项1=值1
配置项2=值2
配置文件的载入
Config_load file="xxx.conf"
配置文件中变量的引用
$smarty.config.配置项
或者 #配置项#
模板中的逻辑控制
从MVC的角度看,在模板中加逻辑控制不正确的,
但是, 有时,不同的场景下,模板的差异非常小时, 就比较适合在模板里加逻辑控制,
可以减少模板的数量.
$smarty->_foreach 属性, 是一个数组
如果smarty的foreach有name属性, 设name="abc"
则smarty->_foreach['abc'] = array(total=>循环体个数,iteration=0);
然后每循环一次,iteration 递增1
可以引用$smarty.foreach.foreahcname.key的属性
Key =
total : 循环个数
Iteration: 当前循环次数
Index : 当前索引, iteration-1
First: 判断是否是第1次循环
Last: 判断是否是最后一次循环
注意:foreach的name不能重复
Foreach中的key=k, item=v
会影响到同名的标签,请注意,标签不要和foreach中的标签同名.