ECMall2.x模板制作入门系列之2(模板标签/语法)
ECMall2.x模板制作入门系列之2(模板标签/语法)今天给大家带来一个模板语法的教程。希望能为ECMall模板制作者提供一份参考资料。如有问题、建议和意见,欢迎提出。在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词就是标签名。在标签单元中单词前含"$"(美元符)的为变量名。一、资源引用res标签功能:返回当前模板当前风格目录的url路径 实例:{res file=css/ecmall.css}这个标签在模板编译后将变成http://商城域名/themes/default/styles/default,注意末尾没有"/",返回结果会随后台设置的主题变化 lib标签 功能:返回javascript库的url路径 实例:{lib file=ecmall.js}这个标签在模板编译后将变成http://商城域名/includes/libraries/javascript,注意末尾没有"/",返回结果不会随后台设置的主题变化 url标签功能:url解析器,可根据后台伪静态状态返回相应url等。 说明:如果一个链接的目标页面需要伪静态功能,请使用该url标签,只有当后台开启伪静态并在.htaccess文件为目标页面设置了伪静态规则时url标签才能解析为静态url地址。 实例:{url app=goods&id=$goods_id}解析后如果伪静态成功则返回"goods/19"include标签 功能: Include 标签用于在当前模板中包含其它模板. 当前模板中的变量在被包含的模板中可用. 必须指定 file 属性,该属性指明模板资源的位置.实例:[tpl]{include file="header.html"} {* body of template goes here *} {include file="footer.html"}[/tpl]二、模板变量1.模板保留变量 模板预置的一些系统变量,包括$smarty.now 当前时刻对应的格林尼治时间戳,可以用{$smarty.now|date}显示当前日期时间,关于date变量调节器请看下文讲解。$smarty.get $smarty.post $smarty.cookie $smarty.env $smarty.server$smarty.request $smarty.session同php的$_GET、$_POST、$_COOKIE、$_ENV、$_SEVER、$_REQUEST、$_SESSION变量。非程序人员如果需要了解请参考php相关手册了解2.自定义变量从php赋值变量: 例如在调用该模板的app程序文件中进行赋值 //在app/default.app.php文件的index方法中$this->display前添加赋值语句 $this->assign('name', 'Tom'); //普通变量 $this->assign('user', array('name' => 'Tom','age' => '28' )); //数组变量 $this->display('index.html'); 复制代码 在themes/mall/default/index.html中显示变量[tpl]Hello,{$name},your age are {$user.age}! [/tpl] 在模板中赋值变量:assign标签例在themes/mall/default/index.html中赋值变量 [tpl]{assign var="name" value="Tom"} Hello,{$firstname}! [/tpl]3.模板上使用语言项说明:为了满足多语言需求,ECMall采用了语言包机制,除挂件外,在模板、js文件中均使用语言项代替直接显示语言文字。 语言文件:语言文件位于商城根目录下的languages目录下,为当前语言建了一个目录,如果您用的是sc-gbk版本,则会有sc-gbk目录,进去之后就能看到属于前台控制器的全部语言文件了。除common.lang.php属于所有app外,每一个语言文件都只属于一个app(ECMall中称为控制器)。 语言文件属于某个控制器而不属于某个模板,同一个模板如果被不同控制器调用将使用不同语言文件进行语言解析实例1: 在默认控制器对应的语言文件default.lang.php添加语言项"test" <?php return array('hot_search' => '热门搜索',... ...'best_recommended' => '精品推荐','test' => '测试语言项' ); ?> 复制代码 在index.html模板中显示语言项"test" [tpl]{$lang.test}[/tpl]输出结果为: 测试语言项实例2:模板中还支持数组形式语言项: 在默认控制器对应的语言文件default.lang.php添加语言项"test_array" <?php return array('hot_search' => '热门搜索',... ...'best_recommended' => '精品推荐','test_array' => array('key1' => '测试数组语言项','key2' => '太好了'), ); ?> 复制代码 在index.html模板中显示语言项"test" [tpl]{$lang.test_array.key1}[/tpl]输出结果为: 测试数组语言项4.变量调节器escape功能:提供各种编码功能 参数:可选参数html、url、quotes、input、editor,缺省为html html:分别替换变量中的如下字符& < > "为其html实体代码,用于按原样输出html源代码 url:如果该变量用于储存url地址,需要进行url编码quotes:在单双引号字符前添加反斜杠input:给输入框赋值时使用editor:当显示通过文本编辑器录入的内容,需要用此参数实例 php赋值 $this->assign('goods_name', "L'oreal/欧莱雅" . '"' . "清润全日保湿乳霜" . '"' . "50ml<br /><script>"); $this->display('index.tpl'); 复制代码 模板 [tpl]{$goods_name} {$goods_name|escape} {$goods_name|escape:"html"} {$goods_name|escape:"url"} {$goods_name|escape:"quotes"} {$goods_name|escape:"input"} {$goods_name|escape:"editor"} [/tpl]输出结果为 L'oreal/欧莱雅"清润全日保湿乳霜"50ml<br /><script> L'oreal/欧莱雅"清润全日保湿乳霜"50ml<br /><script> L'oreal/欧莱雅"清润全日保湿乳霜"50ml<br /><script> L%27oreal%2F%E6%AC%A7%E8%8E%B1%E9%9B%85%22%E6%B8%85%E6%B6%A6%E5%85%A8%E6%97%A5%E4%BF%9D%E6%B9%BF%E4%B9%B3%E9%9C%9C%2250ml%3Cbr+%2F%3E%3Cscript%3E L\'oreal/欧莱雅\"清润全日保湿乳霜\"50ml<br /><script> L'oreal/欧莱雅\"清润全日保湿乳霜\"50ml<br /><script> L'oreal/欧莱雅"清润全日保湿乳霜"50ml<br /><script> nl2br功能:将换行符替换成<br /> 例子 [tpl]{$var|nl2br}[/tpl]default功能:为变量设置一个默认值,当变量为空或者未分配的时候,将由默认值替代输出 例子 [tpl]{$var|default:"no title"}[/tpl]truncate功能:字符串截取。从字符串开始处截取某长度的字符。默认会在末尾追加省略号。 例子: [tpl]{$content|truncate:20}[/tpl]strip_tags功能:去除<和>标签,包括在<和>之间的任何内容。 例子: [tpl]{assign var="content" value="<b>文章内容</b>"} {$content|strip_tags}[/tpl]输出结果为:文章内容price功能:格式化价格。 例子: [tpl]{assign var="goods_price" value="123456"} {$goods_price|price}[/tpl]输出结果为:¥123,456.00date功能:格式化本地时间和日期。 格式:{$var|date:format} 说明:变量$var必须是格林尼治标准时间,php中gmtime()和模板中$smarty.now得到的都是格林尼治标准时间参数format可为simple、complete或自定义日期格式,缺省为simple。simple和complete均可由后台设置,自定义日期格式请参考http://docs.php.net/manual/zh/function.date.php 例子: [tpl]{$smarty.now|date} {$smarty.now|date:complete} {$smarty.now|date:Y-m-d H:i} [/tpl]输出结果为: 2010-12-01 2010-12-01 22:49:46 2010-12-01 22:49modifier功能:调用php自定义函数。 格式:{$var|modifier:user_func}三、流程控制标签1.条件判断(if,elseif,else)说明模板中的 if 语句和 php 中的 if 语句一样灵活易用,并增加了几个特性以适宜模板引擎. if 必须于 /if 成对出现. 可以使用 else 和 elseif 子句. 可以使用以下条件修饰词:eq、ne/neq、gt、lt、lte/le、gte/ge、mod、not、==、!=、>、<、<=、>=、%、!使用这些修饰词时必须和变量或常量用空格格开.多个条件之间用 and、or、&&、|| 连接,实现简单的逻辑运算实例 [tpl]{if $name eq "Fred"}Welcome Sir. {elseif $name eq "Wilma"}Welcome Ma'am. {else}Welcome, whatever you are. {/if}{* 一个"或"逻辑的例子 *} {if $name eq "Fred" or $name eq "Wilma"}... {/if}{* 与上例等效 *} {if $name == "Fred" || $name == "Wilma"}... {/if}{* 下面的语法无效,条件修饰符必须由空格跟其他元素分开 *} {if $name=="Fred" || $name=="Wilma"}... {/if}{* 允许使用括号 *} {if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}... {/if} [/tpl]2.数组遍历(foreach,foreachelse)说明:foreach 用于处理简单数组(数组中的元素的类型一致)。foreach 必须和 /foreach 成对使用,且必须指定 from 和 item 属性。foreach 可以嵌套,但必须保证嵌套中的 foreach 名称唯一。 foreachelse 语句在 from 变量没有值的时候被执行。from 属性:指定被循环的数组,数组长度决定了循环的次数。item属性:单个循环项目的变量名,在循环内部使用。name 属性为可选属性,可以任意指定(字母、数字和下划线的组合)。name 属性如果指定,foreach循环体内会自动生成如下变量$smarty.foreach.foreach_name.index表示本次循环索引,从0开始递增的整数$smarty.foreach.foreach_name.iteration表示本次的循环次数,从1开始递增的整数$smarty.foreach.foreach_name.first表示是否是第一次循环$smarty.foreach.foreach_name.last表示是否是最后一次循环$smarty.foreach.foreach_name.show表示是否有数据$smarty.foreach.foreach_name.total表示循环总次数,也可在循环体外使用实例1 [tpl]{* 该例将输出数组 $custid 中的所有元素的值 *} {foreach from=$custid item=curr_id}id: {$curr_id}<br> {/foreach} [/tpl] 输出结果为: id: 1000<br> id: 1001<br> id: 1002<br>实例2 /* 在对应的控制器中赋值 */ $this->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234") )); 复制代码 [tpl]{* 键就是数组的下标,请参看关于数组的解释 *}{foreach name=outer item=contact from=$contacts} {foreach key=key item=item from=$contact} {$key}: {$item}<br> {/foreach} {/foreach} [/tpl]输出结果为: phone: 1<br> fax: 2<br> cell: 3<br> phone: 555-4444<br> fax: 555-3333<br> cell: 760-1234<br>[tpl]{* 最后一行不显示<br>标签 *}{foreach name=outer item=contact from=$contacts name=my_name} {foreach key=key item=item from=$contact} {$key}: {$item}{if !smarty.foreach.my_name.last}<br>{/if} {/foreach} {/foreach} [/tpl]输出结果为: phone: 1<br> fax: 2<br> cell: 3<br> phone: 555-4444<br> fax: 555-3333<br> cell: 760-1234四、显示标签cycle格式:{cycle values="val1,val2,val3..."} 说明cycle 用于轮转使用一组值。该特性使得在表格中交替输出颜色或轮转使用数组中的值变得很容易。 实例 [tpl]{foreach from=$data_list item=data} <tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}"> <td>{$data}</td> </tr> {/foreach} [/tpl]输出结果为: <tr bgcolor="#eeeeee"> <td>1</td> </tr> <tr bgcolor="#d0d0d0"> <td>2</td> </tr> <tr bgcolor="#eeeeee"> <td>3</td> </tr>html_options说明自定义函数 html_options 根据给定的数据创建选项组. 该函数可以指定哪些元素被选定. 要么必须指定 values 和 ouput 属性,要么指定 options 替代。实例1 $this->assign('cust_ids', array(1000,1001,1002,1003)); $this->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane Johnson','Carlie Brown')); $this->assign('customer_id', 1001); 复制代码 [tpl]<select>{html_options values=$cust_ids selected=$customer_id output=$cust_names} </select> [/tpl]实例2 $this->assign('cust_options', array(1001 => 'Joe Schmoe',1002 => 'Jack Smith',1003 => 'Jane Johnson',1004 => 'Charlie Brown')); $this->assign('customer_id', 1001); 复制代码 [tpl]<select>{html_options options=$cust_options selected=$customer_id} </select> [/tpl]实例1和实例2输出结果均为: <select><option value="1000">Joe Schmoe</option><option value="1001" selected>Jack Smith</option><option value="1002">Jane Johnson</option><option value="1003">Carlie Brown</option> </select>html_radios说明自定义函数 html_radios 根据给定的数据创建选项组. 该函数可以指定哪些元素被选定. 要么必须指定 values 和 ouput 属性,要么指定 options 替代。与html_options不同的是html_radios有一个checked属性html_radios说明自定义函数 html_radios 根据给定的数据创建单选按钮组。该函数可以指定哪个元素被选定。要么必须指定 values 和 ouput 属性,要么指定 options 替代。与html_options不同的是html_radios有一个checked属性。html_checkbox说明自定义函数 html_checkboxes 根据给定的数据创建复选按钮组。该函数可以指定哪些元素被选定。 要么必须指定 values 和 ouput 属性,要么指定 options 替代.。与html_options不同的是html_checkbox有一个checked属性。sprintf说明: 对变量进行格式化 格式{sprintf lang=my_lang var1=my_var1 var2=my_var2 ...} 实例 在语言文件添加语言项 return array(... ...'query_info' => '页面执行 %0.3f 秒, 查询 %d 次,在线 %d 人' ); 复制代码 模板中显示 [tpl] {sprintf lang=query_info var1=query_time var2=query_count var3=query_user_count} [/tpl]输出结果为: 页面执行 0.160 秒, 查询 3 次,在线 10 人
转载于:https://www.cnblogs.com/archoncap/p/4933235.html
ECMall2.x模板制作入门系列之2(模板标签/语法)相关推荐
- html5游戏制作入门系列教程(八)
今天,我已经准备了一个新的游戏 – SkyWalker.基本上 – 这是用飞飞行模拟射击类游戏.我们的目标到达终点线.这个游戏还有其它一些特点,例如使用飞机运动动画和爆炸动画,多按键处理(例如同时移动 ...
- html5游戏制作入门系列教程(七)
我们继续这一系列文章,使用HTML5的canvas组件进行游戏开发.我们将要更新完善我们的第4课html5游戏制作入门系列教程(四)的游戏实例,并增加了火球,敌人和碰撞检测等功能模块.所以,现在我们的 ...
- html5游戏制作入门系列教程(六)
我们继续这一系列文章,使用HTML5的canvas组件进行游戏开发.今天,我们将创建我们的第一个完整的游戏 – 打砖块.在这一课中,我会告诉你如何检测基本的碰撞和HTML5的本地存储.您可以使用鼠标和 ...
- html5游戏制作入门系列教程(五)
我们继续这一系列文章,使用HTML5的canvas组件进行游戏开发.今天,这是相当完整的游戏例子 – 它会回顾经典的旧电脑游戏 – 坦克大战.我会教你使用阵列地图并教你如何检测活动对象(坦克)与环境( ...
- html5游戏制作入门系列教程(四)
今天,我们继续一系列文章,使用HTML5的canvas组件进行游戏开发.今天我们要学习下元素:声音控制与动画.在我们的演示中,你会 看到一个飞龙.我们会听到持续的翅膀拍打的声音(我们将循环这个声音), ...
- html5游戏制作入门系列教程(三)
今天,我们继续一系列文章,使用HTML5的canvas组件进行游戏开发.接下来,我们将开始学习如何添加动画以及一些更有趣的功能.我 们的演示将包括一艘太空船飞越时空,并使用一个新的游戏元素 – 对话框 ...
- html5游戏制作入门系列教程(二)
今天,我们继续html5游戏制作入门系列的系列文章.今天,我们将继续基础知识(也许甚至是高级技巧的基础).我要告诉你如何具有渐变颜色填充对象,绘制文本,使用自定义的字体绘制文本,基本的动画,以及最重要 ...
- html5游戏制作入门系列教程(一)
从今天开始,我们将开始HTML5游戏开发一系列的文章.在我们的第一篇文章中,我们将讲解在画布canvas上的基础工作,创建简单的对象,填充和事件处理程序.另外,要注意在这个阶段中,我们不会立即学习We ...
- 视频教程-零基础JS入门系列课程(2)之JS语法基础精讲-JavaScript
零基础JS入门系列课程(2)之JS语法基础精讲 螺钉课堂讲师,擅长Vue.React.ReactNative.NodeJS等前端框架及技术 邓老师 ¥59.00 立即订阅 扫码下载「CSDN程序员学院 ...
最新文章
- oracle rodo 查看大小,Checkpoint not complete故障
- Android java判断字符串包含某个字符段(或替换)
- Jscript 内部对象
- 使用实体框架、Dapper和Chain的仓储模式实现策略
- POJ 3017 DP + 单调队列 + 堆
- git clone时出现 error:inflate:data stream error(incorrect data check)
- VUE中 ref $refs 使用详解,扩展到$parent 、$children 的使用
- 微型计算机三总线是指,微机原理复习题(完整参考答案版)
- outlook 2013 卡在正在加载配置文件
- 从源码入手,一文带你读懂Spring AOP面向切面编程
- 免费下载文档:给你介绍几个实用的免费下载网址
- 复试口语常见话题整理以及华师18 19年topic
- 网络公司网站源码介绍Version1.0
- [教程] 虚拟机安装MAC lion 10.7.3教程 附送原版提取镜像! 安装
- 用Keil工具搭建S3C2440编译环境
- Spring Boot使用RabbitMQ出现诡异异常:Failed to send reply with payload 'OK',Cannot determine ReplyTo message
- BZOJ2716天使玩偶
- Linux 远程工具
- AD_PCB 快捷键
- T-Bootstrap-day02-辅助类、栅格布局
热门文章
- 问题反馈信息处理平台开发过程
- 欧几里得算法和扩展欧几里得算法详解
- 深度优先搜索重要模板
- sql server限制查询条数_18. Django 2.1.7 查询集 QuerySet
- php解决mysql主从同步_Mysql读写分离,主从同步实现
- 如何把项目改成微服务项目_【日记】148微服务项目第18天
- HTML+CSS+JS实现美女canvas仿ps橡皮擦刮刮卡
- android mp4语音识别,怎样用语音识别将一段视频转化为文字, 比如:百度的语音识别api...
- java方法的传递方式_JAVA基础--方法传参
- oracle acfs snap 恢复,删除ACFS系统碰到的问题