PHP高级课 Smarty模板笔记整理.docx
《PHP高级课 Smarty模板笔记整理.docx》由会员分享,可在线阅读,更多相关《PHP高级课 Smarty模板笔记整理.docx(12页珍藏版)》请在冰点文库上搜索。
![PHP高级课 Smarty模板笔记整理.docx](https://file1.bingdoc.com/fileroot1/2023-6/8/ef0d360c-c831-420f-aa9c-3e12cd77ee4f/ef0d360c-c831-420f-aa9c-3e12cd77ee4f1.gif)
PHP高级课Smarty模板笔记整理
Smarty笔记day01
1.什么是模板引擎
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
模板引擎不属于特定技术领域,它是跨领域跨平台的概念。
在Asp下有模板引擎,在PHP下也有模板引擎,在C#下也有,甚至JavaScript、WinForm开发都会用到模板引擎技术。
2.原理:
模板引擎的实现方式有很多,最简单的是“置换型”模板引擎,这类模板引擎只是将指定模板内容(字符串)中的特定标记(子字符串)替换一下便生成了最终需要的业务数据(比如网页)。
置换型模板引擎实现简单,但其效率底下,无法满足高负载的应用需求(比如有海量访问的网站),因此还出现了“解释型”模板引擎和“编译型”模板引擎等。
Smarty模版引擎属于“编译型”模板引擎。
3.用途:
模板引擎可以让(网站)程序实现界面与数据分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。
我们司空见惯的模板安装卸载等概念,基本上都和模板引擎有着千丝万缕的联系。
模板引擎不只是可以让你实现代码分离(业务逻辑代码和用户界面代码),也可以实现数据分离(动态数据与静态数据),还可以实现代码单元共享(代码重用),甚至是多语言、动态页面与静态页面自动均衡(SDE)等等与用户界面可能没有关系的功能。
4.什么是smarty?
Smarty是采用php写的一个模版引擎,设计的目的是要将php代码与html代码分离,使php程序员只专注于php代码的编写,网页美工只专注于网页的美化。
传统的php文件,没有模版引擎时出现的问题?
html中php代码比重越来越大,php与html混编在一起。
页面的数量越来越多
程序设计与美工设计分工不明确
不便于以后的维护和扩展。
5.Smarty模板的优点如下:
速度:
相对于其他模板引擎技术而言。
编译型:
采用Smarty编写的程序在运行时要编译(组合)成一个非模板技术的PHP文件,使后续的调用速度更快。
缓存技术:
Smarty提供了一种可选择使用的缓存技术,它可以将用户最终看到HTML文件缓存成一个静态的HTML页。
插件技术:
Smarty采用面向对象实现,可以非常方面的定义一些插件。
强大的表现逻辑:
PHP负责后台,Smarty负责前端。
模板继承:
这使得模板更直观、更有效和易管理。
6.初始化Smarty类库的默认设置
requireROOT.'libs/Smarty.class.php';//加载Smarty类文件
$smarty=newSmarty();//实例化Smarty类的对象$smarty
/*推荐用Smarty以上版本方式设置默认路径,成功后返回$smart对象本身,可连贯操作*/
$smarty->setTemplateDir(ROOT.'templates/')//设置所有模板文件存放的目录
//->addTemplateDir(ROOT.'templates2/')//可以添加多个模板目录(前后台各一个)
->setCompileDir(ROOT.'templates_c/')//设置所有编译过的模板文件存放的目录
->setPluginsDir(ROOT.'plugins/')//设置为模板扩充插件存放的目录
->setCacheDir(ROOT.'cache/')//设置缓存文件存放的目录
->setConfigDir(ROOT.'configs');//设置模板配置文件存放的目录
$smarty->caching=false;//设置Smarty缓存开关功能
$smarty->cache_lifetime=60*60*24;//设置模板缓存有效时间段的长度为1天
$smarty->left_delimiter='<{';//设置模板语言中的左结束符
$smarty->right_delimiter='}>';//设置模板语言中的右结束符
7.第一个Smarty的简单示例
/*第一步:
加载自定义的Smarty初使化文件*/
require"init.inc.php";
/*第二步:
用assign()方法将变量置入模板里*/
$smarty->assign("title","测试用的网页标题");
/*也属于第二步,分配其他变量置入模板里,可以是任何类型变量*/
$smarty->assign("content","测试用的网页内容");
/*利用Smarty对象中的display()方法将网页输出*/
$smarty->display("test.html");
8.模板的初始化信息
$mysmarty->template_dir="./templates";//指定模板目录
$mysmarty->compile_dir="./templates_c";//指定编译目录(自动生成的)
$mysmarty->config_dir="./configs";//指定配置目录
$mysmarty->cache_dir="./cache";//模板静态缓存目录(自动生成的)
$mysmarty->caching=false;//是否开启静态缓存目录
$mysmarty->cache_lifetime=-1;//静态缓存生存时间(-1代表的是不过期)
$mysmarty->left_delimiter="<{";//左定界符
$mysmarty->right_delimiter="}>";//右定界符
9.加载配置文件
{config_loadfile="my.ini"}
{config_loadfile="smarty.conf"section="{$lg}"}//section配置文件中待加载节块的名称
10.忽略smarty解析
{literal}{/literal}
11.分配变量
Assign(“$key”,”$value”);
12.加载模块
Display(“1.html”)//1.html是需要解析的页面
13.基本语法
$mysmarty->assign("id","18");//int整型
$mysmarty->assign("str","laoyao");//字符串型
$mysmarty->assign("a",array("xiaoguang","xiaohei","xiaoyao"));//索引数组
$mysmarty->assign("a1",array("name"=>"dahu","age"=>25));//关联数组
$mysmarty->assign("ob",newPerson());//对象
classPerson{
//成员属性
public$name="小翠";
public$age=25;
//成员方法
publicfunctioninfo(){
return$this->name.":
".$this->age;
}
}
14.Smarty的注释
{*.......*}
Smarty笔记day02
1.Smarty的增删改查
php
//将来框架的控制层的写法
//导入各种文件信息
require("./model/Model.class.php");
require("init.php");
require("/configs/config.php");
//Model类的实例化
$mod=newModel("sutdent");
switch($_GET['a']){
//执行添加
case"insert":
$m=$mod->insert();
if($m>0){
//分配变量
$mysmarty->assign("info","添加成功");
}else{
$mysmarty->assign("info","添加失败");
}
//加载模板
$mysmarty->display("stu/info.html");
break;
//执行删除
case"del":
$m=$mod->delete($_GET['id']);
//分配变量
if($m>0){
$mysmarty->assign("info","删除成功");
}else{
$mysmarty->assign("info","删除失败");
}
//加载模板
$mysmarty->display("stu/info.html");
break;
//执行修改
case"update":
$m=$mod->update();
//分配变量
if($m>0){
$mysmarty->assign("info","修改成功");
}else{
$mysmarty->assign("info","修改失败");
}
//加载模板
$mysmarty->display("stu/info.html");
break;
//加载添加页面
case"add":
$mysmarty->display("stu/add.html");
break;
//加载修改页面
case"edit":
$ob=$mod->find($_GET['id']);
//分配变量
$mysmarty->assign("ob",$ob);
//加载模板
$mysmarty->display("stu/edit.html");
break;
//浏览
case"index":
default:
$list=$mod->select();
//分配变量
$mysmarty->assign("list",$list);
//加载模板
$mysmarty->display("stu/index.html");
break;
}
?
>
2.Smarty中的引入方式
{includefile=”跳转页面”}
3.如何在增删改查中拿到原有的数据
在value当中用{$数据.id}
4.在Smarty中进行value的值的判断
可以用{if$数据.sex==m}checked{/if}
5.在Smarty中遍历数据的方式
{foreach$数据as$v}
{$v.id} | ,{$v.name}等等//使用遍历赋值的时候返回的数据的$v来定义数据
6.Smarty中id跳转页面的方法
a=del(删除ID)&id={$v(数据).id}”>删除>
a=update(添加ID)&id{$v(数据).id}”>修改>
7.怎么获取保留变量?
//获取当前时间戳
{$smarty.now};
//获取本地化时间
{$smarty.now|date_format:
‘%Y-%m-%d%:
H:
%M:
%S’};
//获取常量
{$smarty.const.PI}
//捕捉信息
{$smarty.capture.mycapture}
获取配置文件信息
{$smarty.config.name}
获取模板名
{$smarty.template}
获取模板目录
{$smarty.current_dir}
获取版本号
{$smarty.version}
获取左右定界符
{$smarty.ldelim},{$smarty.rdelim}
Smarty笔记day03
一.内置函数
//var和append(追加数组变量)
{appendvar=”数组”value=”值”index=”索引”}//可以直接在模块中赋值
//assign给变量赋值
{assignvar=”name”value=”值”}//赋值
{$name}//取值
//call函数调用
{functionname=”fun”}
.....函数内容....
{/function}
{call“fun”}//调用函数
//debug调试(错误调试)
{debug}//只显示分配的变量值,不显示模板
1.For循环遍历
{for$ito10}
{$i}
{/for}//步长为1的简单循环
2.for遍历偶数
{for$j=0to10step2}
{$j}
{/for}
3.Foreach遍历
{foreach$aas$v}
{$v}
{foreachelse}//代替数组的遍历
{/foreach}
4.section遍历数组
{sectionname=”i”loop=”$a”}
{$a[i]}
{/section}
5.Section遍历二维数组
{sectionname=”sid”loop=”$list”}
{$list[sid].name}
{/section}
{$c@total}//获取多少数据
{$smarty.section.sid.iteration}//是否已被缓存
{$smarty.section.total}//获取数据
{$sectionelse}//判断条件
2.自定义函数
1.registerPlugin(“函数function”,”函数名”,”系统函数”);注册插件//将系统的time函数注册到新的函数名.模板当中使用
{time()}//获取系统事件函数
{mytime}//注册函数
2.registerPlugin(“函数名”,”新函数名”,”自定义函数名”);//将自定义的fun函数起个别名mytable名字注册到模板里面使用
Functionfun(){
Return111;
}
3.自定义表格数组
$list=array(
Array(“name”=>”ccc”,”age”=>19),
Array(“name”=>”dddd”,”age”=>29)
);
//分配变量
$bankuai->assign(“list”,$list);
Functionfun($dd){
Var_dump(“$dd”);
//遍历
Foreach($dd[‘name’]as$v){
$str.=”
”;$str.=”
{$v.[‘name’]} | ”;$str.=”
{$v.[‘age]} | ”;$str=”
”
Return$str;
}
}
//注册fun
$bankuai->registerPlugin(“function”,”mytime”,”fun”);
//模块页面调用
{自定义函数名name=”$list”}
3.模板继承
Block:
块模板
Extends:
继承
1.继承模板的写法:
{extendsfile=”页面”}
{blockname=”body”}
{foreach$listas$v}
{$v.name}{$v.age}
{/foreach}
{/block}
父模板的继承
{blockname=”body”}{/block}
四.静态缓存
$bankuai->isCached(“页面”);//判断是否开启静态缓存
$bankuai->clearCache(“页面”)//清除缓存