Smarty模板技术学习

模板引擎技术:使得php代码和html代码分离的技术就称为“模板引擎技术”

自定义smarty模板技术实现

<?php//迷你smarty原理
class MiniSmarty{public $var_arr = array();public $template_dir = "./view/";public $compile_dir = "./view_c/";//把外部声明变量设置为当前类内部的成员属性信息var_arrfunction assign($k,$v){$this ->var_arr[$k] = $v;}//显示模板内容function display($tpl){include $this->compile($tpl);}//把html模板内容引入,替换{  ---------》< ?php echo//                        }  ---------》 ; ? >//模板编译,把{}编译为php标签内容//$tpl: 被编译模板文件的名称function compile($tpl){//$tpl = "order.html";$tpl_file = $this -> template_dir.$tpl; //模板文件$com_file = $this->compile_dir.$tpl.".php"; //编译文件//判断编译文件是否存在,如果存在直接调用,并且该编译文件生成后对应的模板文件没有再修改//正常情况,编译文件的时间稍大,模板文件时间相对小一些if(file_exists($com_file) && (filemtime($tpl_file)<filemtime($com_file))){return $com_file;exit;}//把$tpl内容抓取出来,替换内部的{}内容$cont = file_get_contents($tpl_file);//替换{  ---------》< ?php echo//$cont = str_replace("{","< ?php echo ",$cont);//在模板中调用的变量即是 当前对象的属性var_arr的元素信息//< ?php  echo $this->var_arr['name']; ? >$cont = str_replace("{\$","<?php echo \$this->var_arr['",$cont);//}  ---------》 ; ? >//$cont = str_replace("}","; ? >",$cont);$cont = str_replace("}","']; ?>",$cont);//把生成好的内容放入一个文件里边,然后引入之file_put_contents($com_file, $cont);//引入$com_file编译文件return $com_file;}
}

通过MySmarty对Smarty进行初始化设置

<?php//在这个类里边设置smarty公共配置
include "./libs/Smarty.class.php";class MySmarty extends Smarty{function __construct(){parent::__construct();  //先执行父类的构造函数,避免被覆盖//更改smarty的左右标记$this -> left_delimiter = "{";$this -> right_delimiter = "}";$this -> setTemplateDir('.' . DS . 'view' . DS);//修改模板目录$this -> setCompileDir('.' . DS . 'view_c' . DS);//修改编译文件目录}
}

smarty的三种变量使用

1.smarty>assign();2.使_GET POST_SESSION COOKIE_ENV $_SERVER等等

<body>当前用户:{$smarty.session.username}<br />名字:{$name}<br />颜色:{$color}<br />地区:{$smarty.get.addr}<br />年龄:{$smarty.get.age}<br />{$smarty.now}{*当前时间戳信息*}<br />{$smarty.const.HOST}{*获得常量信息*}<br />{$smarty.template}{*当前请求的模板*}<br />{$smarty.current_dir}{*当前模板路径*}<br />{$smarty.version}<br />{$smarty.ldelim},{$smarty.rdelim} {*左右标记信息*}<br /></body>

3.配置变量信息
通过配置变量的定义 和 段 的设置可以轻松实现同一页面根据用户不同喜好显示不同的样式。

定义

[shop]
POLICE=京公网安备110000000011
NETWORK=互联网出版许可证
BROADCAST="广播电视节目制作经营许可证 (京)字第434号"[car]
POLICE=京公网安备973498378
NETWORK=互联网出版许可证02
BROADCAST="广播电视节目制作经营许可证 (京)字第978号"

通过以下语句引入配置
{config_load file=”site.conf” section=”car”}

<body>名字:{$name}<br />颜色:{$color}<br /><h2>显示相关的许可信息</h2>{#POLICE#}<br />{#NETWORK#}<br />{#BROADCAST#}<br /></body>

{}标记冲突的问题

1.把Smarty的标记变为其他标记
2.把{}符号变为不同行
3.利用literal标签把有{}的内容给括起来

数组/对象变量的使用

数组:数组[下标] 或 数组.下标
对象:对象->成员

<?php
include "./MySmarty.class.php";$smarty = new MySmarty();//索引数组
$smarty -> assign('fruit',array('banana','pear','apple','grape'));
//关联数组
$smarty -> assign('animal',array('north'=>'tiger','sichuan'=>'panda','helan'=>'pig'));
$smarty -> assign('student',array('first'=>array('tom','jack','mary')));$smarty -> display('07.html');

访问

 <body><h2>访问数组元素信息(索引)</h2><div>{$fruit[2]}<br />{$fruit[3]}<br />{$fruit.0}<br />{$fruit.1}<br /></div><h2>访问数组元素信息(关联)</h2><div>{$animal['helan']}<br />{$animal.north}<br /></div><h2>访问数组元素信息(二维)</h2><div>{$student.first.1}<br />{$student['first'][2]}<br /></div></body>

访问对象

<?php
include "./MySmarty.class.php";$smarty = new MySmarty();class Person{public $name = "xiaoming";public function run(){return "正在跑步。。。";}
}$per = new Person;$smarty -> assign('per',$per);$smarty -> display('08.html');

在HTML中访问

 <body><h2>访问对象信息</h2>{$per -> name}<br />{$per -> run()}<br /></body>

遍历数组信息foreach/section

{foreach 数组 as k=>v}
@iteration 自然数1开始序号
@index 0开始序号
@first 如果第一个项目则返回1,否则返回false
@last 如果最后一个项目则返回1,否则返回false
@show 判断数组是否为空
@total 数组的元素个数

 <body><h2>数组遍历</h2>{*元素值@iteration   获得1开始的自然数序号元素值@index       0开始的序号信息元素值@first       如果是第一个元素返回1,否则返回0元素值@last        如果是最后一个元素返回1,否则返回0元素值@total       返回数组元素的总个数元素值@show        判断当前数组是否为空*}<div>{foreach $fruit as $k => $v}{$v@first}--{$v@index}--{$v@iteration}--{$k}--->{$v}--{$v@last}<br />{foreachelse}没有任何记录信息<br />{/foreach}当前数组的总个数:{$v@total}<br />当前数组是否为空:{$v@show}</div><h2>遍历应用(第一个元素显示特殊背景色)</h2><div>{foreach $animal as $kk => $vv}{if $vv@first == 1}<p style='background-color:lightblue;'>{/if}{$kk}---->{$vv}<br />{if $vv@first == 1}</p>{/if}{/foreach}</div><h2>遍历应用(隔行显示不同颜色)</h2><div>{foreach $animal as $kkk => $vvv}{if $vvv@iteration%2 == 0}<p style='background-color:lightgreen;'>{/if}{$kkk}---->{$vvv}<br />{if $vvv@iteration%2 == 0}</p>{/if}{/foreach}</div></body>

二维数组遍历

 <body><h2>二维数组遍历</h2><div>{foreach $student as $k => $v}{foreach $v as $kk => $vv}{$kk}--》{$vv}<br />{/foreach}{/foreach}</div></body>

section遍历

{section  name=”名称”  loop=$animal  start=2  step=2  max=5  show=false}{$animal[名称]}关键字: {$smarty.section.名称.first}{$smarty.section.名称.last}{$smarty.section.名称.iteration}{$smarty.section.名称.total}
{/section }

foreach和section最大的区别是:
foreach可以遍历索引和关联数组
section只给遍历索引数组

for循环

<body><h2>for循环语句</h2><div>{for $i=1 to 10 step=3}{$i}<br />{/for}<hr />{*for($m=100 ;  $m<=90;  $m++)*}{for $m=100 to 90 step=-2 max=4}{$m}<br />{/for}</div></body>

if分支

<body><h2>if分支结构语句</h2>{*  if  else   elseif *}<div>{if $age>0 && $age<10}儿童<br />{elseif $age>=10 && $age<20}少年<br />{elseif $age>=20 && $age<30}青年<br />{elseif $age>=30}成年<br />{/if}<hr />{if $age+10>=30}10年之后就成年了<br />{/if}</div></body>

复选框、单选按钮、下拉列表

<?php
include "./MySmarty.class.php";$smarty = new MySmarty();$smarty -> assign('hobby_out',array('篮球','足球','排球','棒球'));
$smarty -> assign('hobby_val',array('a','b','c','d'));$smarty -> assign('val_out',array('A'=>'篮球','B'=>'足球','C'=>'排球','D'=>'棒球'));$smarty -> assign('sel',array('A','C','D'));$smarty -> display('13.html');
<body><h2>复选框设置</h2><div>{*<input type="checkbox" name="hobby" value='1'>篮球*}{*<input type="checkbox" name="hobby" value='2'>棒球*}{html_checkboxes name="hobby" options=$val_out selected=$sel separator="<br />" label_ids=true}</div></body>

下拉列表

<?php
include "./MySmarty.class.php";$smarty = new MySmarty();$smarty -> assign('val_out',array('0'=>'请选择','A'=>'小学','B'=>'初中','C'=>'高中','D'=>'大学'));
$smarty -> assign('sel',array('A','D'));$smarty -> assign('val_out1',array('man','girl','secret'));$smarty -> display('14.html');
<body><h2>下拉列表设置</h2><div>{html_options name="xueli" options=$val_out multiple="multiple" selected=$sel}<hr /><select name="sex" ><option value="0">请选择</option>{html_options options=$val_out1}</select></div></body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

50大产业链全景图(高清完整版)

来源&#xff1a;新材料在线摘要&#xff1a;机器人、无人驾驶、VR、光伏、核电、半导体……50大产业链全景图&#xff0c;让你一次纵观全局。&#xfeff;&#xff08;点击图片查看大图&#xff09;—1—全国各省新材料产业链全景图—2—飞机产业链全景图—3—高铁产业链全景图…

3D打印,智能砖,竹子城市……改变未来建筑业的8项技术

来源&#xff1a;资本实验室科学技术正在彻底改现代生活的方方面面&#xff0c;并且每天都在不断进步&#xff0c;没有任何减速的迹象。绝大多数行业已经并且正在受到技术进步的影响&#xff0c;并越来越接近未来。对于建筑行业而言&#xff0c;以下8种新技术将改变未来建筑业的…

分布式服务框架 Zookeeper -- 管理分布式环境中的数据

安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础&#xff0c;最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取&#xff0c;Zookeeper 的安装非常简单&#xff0c;下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置。 单机…

AI“重造”麻省理工学院!今宣布投资10亿美元成立全新计算学院,近70年来最大结构调整...

来源&#xff1a;Deep Tech深科技摘要&#xff1a;近日&#xff0c;世界顶尖名校麻省理工学院通过学校官方网站宣布重磅消息。近日&#xff0c;世界顶尖名校麻省理工学院通过学校官方网站宣布重磅消息&#xff1a;投资 10 亿美元以引领计算机技术和人工智能技术的发展及全球影响…

PHP数据库操作

PHP实现数据库的增删改查 <?php $connmysql_connect(localhost,root,root); if(!$conn){ echo "connect failed"; exit; }$sqluse test; mysql_query($sql,$conn);//增加 $sql"insert into mytest values(null,pu,20)"; $rsmysql_query($sql,$conn);…

日本机器人实力大盘点,和Atlas的高调刷屏相比,日本机器人的默默崛起更让人忌惮...

来源&#xff1a;机器人大讲堂摘要&#xff1a;近期&#xff0c;估计全球的机器人圈都沉浸在Atlas的三连跳中无法自拔&#xff0c;刷屏的Atlas代表了美国对待科研的态度&#xff1a;我能所以全世界都得膜拜我&#xff01;近期&#xff0c;估计全球的机器人圈都沉浸在Atlas的三连…

不值钱的软件人才[转]

软件人才在中国不值钱&#xff0c;不但价格只比“一文不值”多一点&#xff0c;而且地位也就是一个普通劳动者&#xff0c;和高薪等挂不上钩。这里讲的是中国大陆地区&#xff0c;因为我不知道其他国家的情况&#xff0c;如无特殊声明&#xff0c;以下所有情况均只中国大陆的情…

科学:揭示自由意志的生物学本质

来源&#xff1a;中国科学报摘要&#xff1a;神经科学家开始精确定位大脑中参与自由意志感知的区域。“外星人肢体综合征”听起来也许并非那么像外星人的事&#xff0c;虽然它仍然很怪异。病人们抱怨说&#xff0c;他们的一只手变成了“流氓”&#xff0c;会在自己不知道的情况…

ThinkPHP入门

ThinkPHP项目的创建 <?php include "../../ThinkPHP/ThinkPHP.php"; 在index.php中导入ThinkPHP.php即可&#xff0c;会自动创建目录。 tp创建流程分析 1. 入口文件index.php2. ThinkPHP/ThinkPHP.phprequire THINK_PATH.Common/runtime.php;3. ThinkPHP/…

解密:LL与LR解析 2(译,完结)

由于GFW&#xff0c;我无法联系到作者&#xff0c;所以没有授权&#xff0c;瞎翻译的。原文在这里[http://blog.reverberate.org/2013/07/ll-and-lr-parsing-demystified.html]。 这是第2部分和完结。 3. 解析树的形状 到目前为止&#xff0c;我们使用的算术表达式的那棵树&…

即时配送:新零售时代的“物流新战场”

来源&#xff1a;平安证券2018年8月2日&#xff0c;星巴克和阿里巴巴达成战略合作&#xff0c;共同推出外卖业务&#xff0c;为消费者配送旗下饮料和烘焙食品。这意味着&#xff0c;以后可以在饿了么、手机淘宝等APP上点星巴克外卖了。其实&#xff0c;新零售、新业态的快速发展…

ThinkPHP入门(二)

smarty使用 smarty引入流程 1. 控制器IndexAction.class.phpfunction index()$this -> display(); (父类Action的display) 2. 父类ThinkPHP/Lib/Core/Action.class.phpfunction display()$this->view->display 3. ThinkPHP/Lib/Core/View.class.phpfunction displa…

雁栖湖会议研讨:计算机能代替程序员吗?

来源&#xff1a;科学网写不完的代码&#xff0c;熬不完的夜&#xff0c;进度总是赶不上变化。程序开发是一项既费时费力&#xff0c;又容易出错的工作。但当前持续涌现的软件工程大数据以及快速发展的人工智能技术&#xff0c;正使得软件自动化成为可能。通过程序合成、代码补…

在 Mac OS X Lion 下修改 Hosts 的四种方法

一名刚刚使用 Mac OS X Lion 系统的朋友问我怎么该系统下修改 Hosts 文件&#xff0c;说网上搜了很多办法都不管用&#xff0c;只要编辑 Hosts 文件就出现”你不是文件 hosts 的所有者&#xff0c;因此没有权限写到该文件”的提示&#xff0c;要解决这个权限问题又比较麻烦&…

CCAI2018演讲实录 | 蒲慕明:脑科学与类脑机器学习

来源&#xff1a;人工智能前沿讲习班摘要&#xff1a;7月28-29日&#xff0c;由中国人工智能学会和深圳市罗湖区人民政府共同主办&#xff0c;马上科普承办的“2018 中国人工智能大会&#xff08;CCAI 2018&#xff09;”完美收官。大会第二天下午&#xff0c;中科院神经科学所…

Django搭建简易博客

Django简易博客&#xff0c;主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markdown与代码高亮 归档&#xff0c;AboutME和标签分类 搜索与ReadMore RSS与分页 需要添加的安装包 pip i…

HDU 4619 Warm up 2 (多校)

题意&#xff1a;在网格里面给定了 横&#xff0c;竖 两种多米诺骨牌&#xff0c;同向的不可以覆盖&#xff0c;不同向的可以覆盖&#xff0c;问你最多去掉多少个有覆盖的多米诺&#xff0c;使得网格内剩余的多米诺骨牌最多 解题思路&#xff1a; 一.搜索 &#xff08;1&…

工业智联网: 基本概念、关键技术与核心应用

来源&#xff1a;王飞跃科学网博客作者&#xff1a;王飞跃, 张军, 张俊, 王晓摘要&#xff1a;本文首先阐述了工业网联技术的演化过程&#xff0c;重点讨论了工业智联网产生的技术和时代背景.然后探讨了工业智联网的基本概念、内涵与应用领域。本文详细介绍了工业智联网的关键技…

KMP算法学习

kmp算法完成的任务是&#xff1a;给定两个字符串O和f&#xff0c;长度分别为n和m&#xff0c;判断f是否在O中出现&#xff0c;如果出现则返回出现的位置。常规方法是遍历a的每一个位置&#xff0c;然后从该位置开始和b进行匹配&#xff0c;但是这种方法的复杂度是O(nm)。kmp算法…

生命或可在星际间传播

来源&#xff1a;中国科学报去年&#xff0c;当一颗美式足球场大小的雪茄形天体Oumuamua进入太阳系时&#xff0c;它并非仅仅让人们第一次看到了一块星际岩石。根据一项新的研究&#xff0c;这也支持了太空岩石通过在遥远的恒星系统之间运送微生物&#xff0c;从而在星际间传播…