$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. svn不是内部或外部命令?

    svn不是内部或外部命令? 我的系统是Win7, [计算机]-->右键[属性]-->[高级系统设置]-->[环境变量]-->[系统变量 (S)]-->[Path]--&g ...

  2. Yii关联查询(转载)

    原文链接:http://keshion.iteye.com/blog/1607994 一.多表关联的配置 在我们使用 AR 执行关联查询之前,我们需要让 AR 知道一个 AR 类是怎样关联到另一个的. ...

  3. dedecms--将静态页面转化为动态页面

    最近在用dedecms二次开发项目,需要对文章内容页设置权限,会员未登录不允许查看,这个需要先在后台设置将静态页面转化为动态页面 具体步骤: 1:将主页设置为动态浏览 2:进入后台→系统→SQL命令行 ...

  4. 使用Zint和Zxing实现二维码的编码与解码(Using open-source tools to generate and decode Q-R code)

    1.Zint生成二维码 http://sourceforge.net/projects/zint/ [1]从上述站点下载Zint工具 [2]安装Zint工具 [3]使用Zint工具生成二维码,注意选择 ...

  5. SRM1154--Topcoder初体验

    SRM 711 DIV2 <br > 在frank_c1的帮助下,辣鸡Xiejiadong也开始做Topcoder辣...... <br > 这算是一次Topcoder的初体验 ...

  6. Deep learning with PyTorch: A 60 minute blitz _note(1) Tensors

    Tensors 1. construst matrix 2. addition 3. slice from __future__ import print_function import torch ...

  7. Spring MVC中@ControllerAdvice注解实现全局异常拦截

    在网上很多都把Advice翻译成增强器,其实从翻译工具上看到,这个单词翻译是忠告,通知的意思. 首先这个注解实在Spring Web包下,而Spring MVC离不开Spring Web的依赖,所以经 ...

  8. go语言:函数参数传递详解

    参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程.比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数. 1.常规传递 使用普 ...

  9. 【spring boot】在Spring mvc中controller中可以拿到对象信息,但是返回给前台却是什么也没有,解决方案

    如图所示: 最后: 问题解决: 这个原因是因为,User类并未给字段提供get/set方法,所以给前台传递过去的值是空的. 解决方案: 为User类添lombok的注解@Data,为实体类提供get/ ...

  10. ios You app information could not be saved. Try again. If the problem persists, contact us

    ios You app information could not be saved. Try again. If the problem persists, contact us  大概意思:你的a ...