$time1 = date("Y-m-d H:i:s", gmtime());  
$time = date("Y-m-d H:i:s", time());

//gmtime获取到的时间比当前时间少了8小时,在模板里显示的时候使用{$goods_detail.description|date:complete"}

http://www.nowamagic.net/librarys/veda/detail/1482

在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 属性,该属性指明模板资源的位置。实例:

1{includefile="header.html"}
2{* body of template goes here *}
3{includefile="footer.html"}

模板变量

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程序文件中进行赋值

1//在app/default.app.php文件的index方法中$this->display前添加赋值语句
2$this->assign('name', 'Tom'); //普通变量
3$this->assign('user', array(
4    'name'=> 'Tom',
5    'age'    => '28'
6)); //数组变量
7$this->display('index.html');

在themes/mall/default/index.html中显示变量

1Hello,{$name},your age are {$user.age}!

在模板中赋值变量。assign标签,例在themes/mall/default/index.html中赋值变量

1{assign var="name"value="Tom"}
2Hello,{$firstname}!

3.模板上使用语言项

说明:为了满足多语言需求,ECMall采用了语言包机制,除挂件外,在模板、js文件中均使用语言项代替直接显示语言文字。

语言文件:语言文件位于商城根目录下的languages目录下,为当前语言建了一个目录,如果您用的是sc-gbk版本,则会有sc-gbk目 录,进去之后就能看到属于前台控制器的全部语言文件了。除common.lang.php属于所有app外,每一个语言文件都只属于一个 app(ECMall中称为控制器)。语言文件属于某个控制器而不属于某个模板,同一个模板如果被不同控制器调用将使用不同语言文件进行语言解析。

在默认控制器对应的语言文件default.lang.php添加语言项"test":

1<?php
2returnarray(
3    'hot_search'=> '热门搜索',
4    ... ...
5    'best_recommended'=> '精品推荐',
6    'test'=> '测试语言项'
7);
8?>

在index.html模板中显示语言项"test"

1{$lang.test}

模板中还支持数组形式语言项,在默认控制器对应的语言文件default.lang.php添加语言项"test_array"

01<?php
02returnarray(
03    'hot_search'=> '热门搜索',
04    ... ...
05    'best_recommended'=> '精品推荐',
06    'test_array'=> array(
07        'key1'=> '测试数组语言项',
08        'key2'=> '太好了'
09    ),
10);
11?>

在index.html模板中显示语言项"test"

1{$lang.test_array.key1}

4. 变量调节器

* escape

功能:提供各种编码功能。

参数:可选参数html、url、quotes、input、editor,缺省为html    html:分别替换变量中的如下字符&  <  >  "为其html实体代码,用于按原样输出html源代码。

  • url:如果该变量用于储存url地址,需要进行url编码

  • quotes:在单双引号字符前添加反斜杠

  • input:给输入框赋值时使用

  • editor:当显示通过文本编辑器录入的内容,需要用此参数

例如php赋值:

1$this->assign('goods_name', "L'oreal/欧莱雅"  .  '"'   . "清润全日保湿乳霜"  .  '"'   . "50ml<br /><script>");
2$this->display('index.tpl');

模板

1{$goods_name}
2{$goods_name|escape}
3{$goods_name|escape:"html"}
4{$goods_name|escape:"url"}
5{$goods_name|escape:"quotes"}
6{$goods_name|escape:"input"}
7{$goods_name|escape:"editor"}

输出结果为

1L'oreal/欧莱雅"清润全日保湿乳霜"50ml<br /><script>
2L'oreal/欧莱雅"清润全日保湿乳霜"50ml<br /><script>
3L'oreal/欧莱雅"清润全日保湿乳霜"50ml<br /><script>
4L%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
5%9D%E6%B9%BF%E4%B9%B3%E9%9C%9C%2250ml%3Cbr+%2F%3E%3Cscript%3E
6L\'oreal/欧莱雅\"清润全日保湿乳霜\"50ml<br /><script>
7L'oreal/欧莱雅\"清润全日保湿乳霜\"50ml<br /><script>
8L'oreal/欧莱雅"清润全日保湿乳霜"50ml<br /><script>

* nl2br

功能:将换行符替换成<br />

1{$var|nl2br}

* default

功能:为变量设置一个默认值,当变量为空或者未分配的时候,将由默认值替代输出

1{$var|default:"no title"}

* truncate

功能:字符串截取。从字符串开始处截取某长度的字符。默认会在末尾追加省略号。

1{$content|truncate:20}

* strip_tags

功能:去除<和>标签,包括在<和>之间的任何内容。

1{assign var="content"value="<b>文章内容</b>"}
2{$content|strip_tags}

* price

功能:格式化价格。

1{assign var="goods_price"value="123456"}
2{$goods_price|price}

输出结果为:¥123,456.00

* date

功能:格式化本地时间和日期。

格式:{$var|date:format}

说明:变量$var必须是格林尼治标准时间,php中gmtime()和模板中$smarty.now得到的都是格林尼治标准时间,参数format可为simple、complete或自定义日期格式,缺省为simple。

1{$smarty.now|date}
2{$smarty.now|date:complete}
3{$smarty.now|date:Y-m-d H:i}

输出结果为:

12010-12-01
22010-12-01 22:49:46
32010-12-01 22:49

* modifier

功能:调用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、==、!=、>、<、& lt;=、>=、%、!使用这些修饰词时必须和变量或常量用空格格开.

多个条件之间用 and、or、&&、|| 连接,实现简单的逻辑运算

01{if$nameeq "Fred"}
02        Welcome Sir.
03{elseif$nameeq "Wilma"}
04        Welcome Ma'am.
05{else}
06        Welcome, whatever you are.
07{/if}
08{* 一个"或"逻辑的例子 *}
09{if$nameeq "Fred"or$nameeq "Wilma"}
10        ...
11{/if}
12{* 与上例等效 *}
13{if$name== "Fred"|| $name== "Wilma"}
14        ...
15{/if}
16{* 下面的语法无效,条件修饰符必须由空格跟其他元素分开 *}
17{if$name=="Fred"|| $name=="Wilma"}
18        ...
19{/if}
20{* 允许使用括号 *}
21{if( $amount< 0 or$amount> 1000 ) and$volume>= #minVolAmt#}
22        ...
23{/if}

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{* 该例将输出数组 $custid中的所有元素的值 *}
2{foreachfrom=$custiditem=curr_id}
3        id: {$curr_id}<br />
4{/foreach} 

输出结果为:

1id: 1000<br />
2id: 1001<br />
3id: 1002<br />
1/* 在对应的控制器中赋值 */
2$this->assign("contacts", array(
3    array("phone"=> "1", "fax"=> "2", "cell"=> "3"),
4    array("phone"=> "555-4444", "fax"=> "555-3333", "cell"=> "760-1234")
5));

模板代码:

1{* 键就是数组的下标,请参看关于数组的解释 *}
2{foreachname=outer item=contact from=$contacts}
3{foreachkey=key item=item from=$contact}
4{$key}: {$item}<br />
5{/foreach}
6{/foreach}

输出结果为:

1phone: 1<br />
2fax: 2<br />
3cell: 3<br />
4phone: 555-4444<br />
5fax: 555-3333<br />
6cell: 760-1234<br />
1{* 最后一行不显示<br />标签 *}
2{foreachname=outer item=contact from=$contactsname=my_name}
3{foreachkey=key item=item from=$contact}
4{$key}: {$item}{if!smarty.foreach.my_name.last}<br />{/if}
5{/foreach}
6{/foreach}

显示标签

* cycle

cycle 用于轮转使用一组值。该特性使得在表格中交替输出颜色或轮转使用数组中的值变得很容易。

格式:{cycle values="val1,val2,val3..."}

1{foreachfrom=$data_listitem=data}
2<tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}">
3<td>{$data}</td>
4</tr>
5{/foreach}

输出结果为:

1<tr bgcolor="#eeeeee">
2<td>1</td>
3</tr>
4<tr bgcolor="#d0d0d0">
5<td>2</td>
6</tr>
7<tr bgcolor="#eeeeee">
8<td>3</td>
9</tr>

* html_options

自定义函数 html_options 根据给定的数据创建选项组. 该函数可以指定哪些元素被选定. 要么必须指定 values 和 ouput 属性,要么指定 options 替代。

1$this->assign('cust_ids', array(1000,1001,1002,1003));
2$this->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane Johnson','Carlie Brown'));
3$this->assign('customer_id', 1001);

模板代码:

1<select>
2        {html_options values=$cust_idsselected=$customer_idoutput=$cust_names}
3</select>
1$this->assign('cust_options', array(
2    1001 => 'Joe Schmoe',
3    1002 => 'Jack Smith',
4    1003 => 'Jane Johnson',
5    1004 => 'Charlie Brown'));
6$this->assign('customer_id', 1001);

模板代码:

1<select>
2        {html_options options=$cust_optionsselected=$customer_id}
3</select>

实例1和实例2输出结果均为:

1<select>
2        <option value="1000">Joe Schmoe</option>
3        <option value="1001"selected>Jack Smith</option>
4        <option value="1002">Jane Johnson</option>
5        <option value="1003">Carlie Brown</option>
6</select>

* 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 ...}

在语言文件添加语言项:

1returnarray(
2    ... ...
3    'query_info'=> '页面执行 %0.3f 秒, 查询 %d 次,在线 %d 人'
4);

模板中显示:

1{sprintf lang=query_info var1=query_time var2=query_count var3=query_user_count}

输出结果为:

1页面执行 0.160 秒, 查询 3 次,在线 10 人

ecmall时间的问题的更多相关文章

  1. ecmall模板语法

    ECMall的模板解析语法介绍 用"{"开头,以"}"结尾就构成一个标签单元 在 2011年07月19日 那天写的     已经有 19105 次阅读了 感谢  ...

  2. ECMALL目录结构设置与数据库表

    [Ecmall]ECMALL目录结构设置与数据库表   最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方 ...

  3. [Ecmall]ECMALL目录结构设置与数据库表

    最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方论坛连二次开发板块都没有,都在哪瞎扯淡,广告一堆.可悲~ ...

  4. ECMall关于数据查询缓存的问题

    刚接触Ecmall的二次开发不久,接到一个任务.很常见的任务,主要是对数据库进行一些操作,其中查询的方法我写成这样: 01 function get_order_data($goods_id) 02 ...

  5. 【Ecmall】ECMall2.x模板制作入门系列(认识ECMall模板)

    ECMall2.x模板制作入门系列之1(认识ECMall模板) 从ECMall2.0全新架构发布以来,随着版本的不断更新,ECMall已经逐渐走向一个稳定时期,是时候整理一些实用教程了.下面给大家带来 ...

  6. [转载]ECMall模板解析语法与机制

    ECMall模板解析语法与机制 2011-05-22 在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词 ...

  7. ecmall 入口文件解析 引入了什么

    每一个框架都有自动载入的工具库,搜了半天也没搜到相关介绍,就自己看入口文件琢磨了一下, <?php define('ROOT_PATH', dirname(__FILE__)); //定义项目根 ...

  8. ecmall 的一些方法说明

    ecmall/eccore /ecmall.php 常量: define('START_TIME', ecm_microtime()); define('IS_POST', (strtoupper($ ...

  9. ecmall公告挂件分析(转)--此挂件写法已有更新的写法。

    ecmall的首页,基本上都是由挂件的形式实现的.ecmall所有的挂件程序,都在external\widgets文件下面.ecmall首页公告的插件,就是notice目录里面. 分析里面文件,con ...

随机推荐

  1. Introduction to the WinPcap Networking Libraries

    Introduction to the WinPcap Networking Libraries use wire shark or fiddler

  2. poj 1269 判断直线的位置关系

    题目链接 题意 判断两条直线的位置关系,重合/平行/相交(求交点). 直线以其上两点的形式给出(点坐标为整点). 思路 写出直线的一般式方程(用\(gcd\)化为最简), 计算\(\begin{vma ...

  3. 【Visual Studio】The project appears to be under source control, but the associated source control plug-in is not installed on this computer

    [问题描述]用 Visual Studio 2013打开一个项目时,出现下面错误: [问题原因]参考 http://codeverge.com/asp.net.web-forms/the-projec ...

  4. unity3d自动寻路教程

    U3D的自动寻路插件是不少,但是其实U3D的PRO版本就提供了相当实用的自动寻路组件了,以下教程分别讲解自动寻路的路径选择优先,上楼梯跳下的条件判断等等实用方法,教程分三编,但这个教程没有讲到Navm ...

  5. hdu 5437(优先队列模拟)

    Alisha’s Party Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  6. 如何循序渐进向.NET架构师发展

    微软的DotNet开发绝对是属于那种入门容易提高难的技术.而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的.特别是在大型软件项目中,架构师是项目核心成员,承上启下,因此RUP ...

  7. 设置USB数据监听

    设置USB数据监听   在Kali Linux中,USB也是作为一个通信端口进行存在.常见的鼠标.键盘.U盘都是通过USB接口传输数据.所以,对于USB接口也可以实施监听,类似网络接口一样.在进行US ...

  8. BZOJ1010玩具裝箱Toy

    @[斜率優化] Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中. P ...

  9. 邁向IT專家成功之路的三十則鐵律 鐵律二十九 IT人富足之道-信仰

    天地自然的循環法則,讓每一個人都必須經歷生.老.病.死.喜.怒.哀.樂,然而至始至終無盡的煩惱總是遠多於快樂,因此筆者深信每一個人在一生當中,都必須要有適合自己的正確信仰,他可以在你無法以物質力量來解 ...

  10. java线程中Exchanger使用

    有时我们须要对元素进行配对和交换线程的同步点,使用exchange方法 返回其伙伴的对象,这时我们就须要使用线程类中的Exchanger类了, 我通过一个实例 来简单说明一下他的用法及其作用: imp ...