同时这里许多内容和一些Smarty 相关。假如您已经
熟悉这些内容可跳过不阅读。假如您是ECshop 新手并且想DIY 一下自己的店铺, 那您应
该认真详细地从头到尾读一遍下面章节。( ps :大家不要紧张,我会尽量用人类的语言和大
家交流,实在万不得已才会用机器语言展示给大家)
希望大家能够通过本教程,想要什么模板都能自己做出来。哈哈!一起加油吧!
第一章ECshop 模板基础
读取本部分内容,您将了解:
☆ 每个前台页面所对应的模板页面,模板文件的目录结构。
☆ 一些最基本的ECshop 模板修改方法。
☆ 模板的路径以及相关包含文件的方法(深入了解Dreamweaver 模板制作)。
☆ 一些常用模板例子讲解。
模板存放路径:
ecshop/themes/xxxxx 其中的xxxxx 就是某一套模板,如,系统一般会自带的模板文件名
叫做default ,(即,ecshop/themes/default )里面放的就是安装时的默认模板,以下所有的说
明都是针对默认模板来讲解。
操作前提,将您当前使用的模板调整为default 模板,然后清空缓存。
接下来我们进入default 目录,可以看到以下文件目录:
文件目录如下:
images/ (存放模板中用到的图片)
library/ (存放一些小模板文件及重复被用到的模板文件)
style.css (模板样式文件)
index.dwt (首页的模板index.php )
goods.dwt (商品显示页的模板goods.php )
*.dwt (表示其它.dwt 文件)
什么?难道你不相信这些就是模板吗?好,那我证明给你看看。
我们把images 里面的logo.gif 文件的名字,改为logo2.gif ,然后我们随便找一张gif
图片,起名为logo.gif 放到images 目录中,然后我们刷新首页。看到没?首页logo 被修
改了。
如果你觉得大小不合适,那么我们打开library 目录中的page_header.lib 查看源代码,
然后搜索images/logo.gif 然后看它后面width="130" height="56" 把130 和56 改为相应的
值就可以了,到前台刷新看看。
接下来我们用dreamweaver 打开index.dwt 文件,在源代码中搜索{$page_title} ,找
到后,将{$page_title} 修改为“超级无敌的大卖场”,然后到浏览器前台刷新,看看页面有
什么变化。什么?没有发现吗?看看浏览器头部啊,呵呵,是不是网站的标题被改变了?哈
哈,对,{$page_title} 就是网站标题的标签(注:标签是从“{”开始到“}”结束哦,“{”
和“}”属于标签的一部分)。整个ECshop 的模板就是一个一个这样的标签组成了,控制网
站内容和数据的动态显示。比如({$keyWords})控制网站的关键字标签,({$description})
网站描述标签,(这就是模板中的标签,每个标签都会对应程序里面的一个值,网站运行时
模板引擎会来读取模板页面,然后把对应的标签用对应的值进行替换,就显示出我们看到的
网站页面了,明白了吧)。
很简单吧,如果你上一步你操作非常的容易的话,接下来的学习也是一样的哦。接下来
要怎么改呢?
大家不要着急,欲速则不达,呵呵,下面我们真正开始做ECshop 的模板了,(不懂HTML
的观众准备好Dreamweaver 哦)。
1. 我们到/themes/default 目录中, 把index.dwt 改名为index_bak.dwt , 然后用
Dreamweaver 新建一个HTML 文件,然后保存到/themes/default 目录中, 命名为
index.dwt ,我们刷新前台看看,哈哈,什么也没有哦。好,在我们新建的index.dwt 中找到
,我们把 和 中间的内容替换为“{$page_title}”,在和
之间也放入一个{$page_title} ,刷新前台看看。嘿嘿,看到什么了?网站标题被打印出来了
吧?
如有操作时候有弹出对话框:
点击确定就可以了,:)
2. 接下来我们选择可视化界面编辑:然后在{$page_title} 后面按Enter 键换行,然后
输入:“商店公告:{$shop_notice}”,到浏览器刷新首页刷新看看。商店公告被调出来了,
可以去网站后台,系统设置-> 商店设置-> 网店信息-> 商店公告-> 修改内容,然后到浏
览器再刷新网站首页看看,呵呵,商店公告是被动态掉出来的哦。
3. 继续在{$shop_notice} 后面按Enter 键换行,然后输入:
代码如下:
网站快讯:
{foreach from=$new_articles item=article}
{$article.short_title}
{/foreach}
注:换行的地方按Enter 键哦。
刷新前台看看,呵呵,网站快讯被调出来了。好我们再到网站后台,文章管理->网站列
表-> 添加文章,选择“网站快讯”这个分类,随便添加一篇内容,完成后前台刷新看看。
两篇文章都被动态掉出来了。
注释:
代码如下:
{foreach from=$new_articles item=article} : 循环的开始,
{/foreach} : 循环的结束
$new_articles: 为要循环的东西,这里为网站快讯
{$article.short_title} : 快讯标题的标签
模式为:
{foreach from=$post item=name}
content
{/foreach}
{foreach from=$post item=name} 和{/foreach} 标签中间可以任意添加要循环的内容
content(可以为任意的东西),循环的次数受到$post 的限制(这里要填什么我都会告诉大
家的)。name 为当前这个循环的对象,方便调用数据。
以后这个循环我们会经常的用到哦。还是不懂也没有关系,每次遇到我都会讲那里要怎
模板和引擎技术:ECshop 模板制作教程— EC 新手入门模板教程
网站:
http://www.phpchina.com 投稿:[email=phper@phpchina.com]phper@phpchina.com[/email] 《PHPer》57/127
么设置的,多用就会了。
我们也可以这么来写哦,注意:在代码编辑的视图里面编辑。
代码如下:
{foreach from=$new_articles item=article}
{$article.short_title}
{/foreach}
保存,刷新首页看看,表格被一行一行的循环出来了哦。
下一章预告:
产品列表调用,还有产品缩略图!
产品分类调用!
第二章ECshop 模板进阶
在我们上一章的基础上,我们在网站快讯的循环后面,按Enter 键,输入“商品列表”,
接着建立一个2 行3 列的表格,宽度为70% ,表格边框为1(为了让大家看清楚)。
代码如下:
商品列表
1
2
3
4
5
6
注:( 1、2、3、4、5、6 这些个是序号,方便跟大家讲解)
在这里,我们暂时先把下面这一行去掉(为了大家操作简单),变成:
代码如下:
商品列表
1
2
3
我们要循环的是列,也就是,因此我们的循环标签应该在 和 的外面,
而2 和3 应该是循环出来的东西,也就是我模板里面只用保留1 这个td 就可以了,2 和3
都要去掉,于是就变成了下面的样子。
代码如下:
商品列表
1
好,现在我们开始加循环标签,我们要调用的是精品推荐商品。
代码如下:
商品列表
{foreach from=$best_goods item=goods}
{$goods.short_style_name}
{/foreach}
注意了:foreach 表示下面的内容属于要进行循环,from=$best_goods 表示循环的内容来
自$best_goods ,( $best_goods 是精品商品推荐的标签),item=goods 表示当前循环这一次
的对象叫goods ,你也可以改为其它的东东,当然{$goods.short_style_name} 这个地方的。
goods 也要相应的改了哦,{$goods.short_style_name} 表示goods 这个对象的商品名称。好
了,我们保存,前台刷新看一下。呵呵,精品商品被循环出来了吧?
接着,为了大家应用方便,我们把goods 改为jingpinshangpin 。
代码如下:
商品列表
{foreach from=$best_goods item=jingpinshangpin}
{$jingpinshangpin.short_style_name}
{/foreach}
前台刷新看看,呵呵,如果你有很多的精品商品你会发现商品变了,因为精品商品是随
机调取出来的。好,我们继续完善它,给它加上链接对应商品的链接,也就是添加“”属
性。
代码如下:
商品列表
{foreach from=$best_goods item=jingpinshangpin}
{$jingpinshangpin.short_style_name}
{/foreach}
刷新浏览器,点击链接看看链接到什么地方去了哦。呵呵!链接到了每个产品自己的页
面了。
说明:标签{$jingpinshangpin.url} 就是精品商品的商品链接的标签了,但是要记得哦,
$jingpinshangpin 是你起的名字,item=$jingpinshangpin 的这个$jingpinshangpin 改变了的
话,这里也要跟着改变。
接下来我们为商品添加上图片,也就是增加一个属性。
代码如下:
商品列表
{foreach from=$best_goods item=jingpinshangpin}
{$jingpinshangpin.short_style_name}
{/foreach}
到前台刷新浏览器看看,呵呵,商品缩略图也被调出来了。
说明:标签{$jingpinshangpin.thumb} 就是精品商品的缩略图的标签了,但是要记得,
$jingpinshangpin 是你起的名字哦,item=$jingpinshangpin 的这个$jingpinshangpin 改变了的
话,这里也要跟着改变。
如果你已经熟练理解和掌握了以上的步骤,那么下面就越来越清晰和容易了。
接下来我们调取新品上市(标签为:$new_goods)和热卖商品(标签为:$hot_goods),
接着在刚才的代码后面加上去就是了,我就不多讲了。
代码如下:
新品上市
{foreach from=$new_goods item=xinpinshangshi}
{$xinpinshangshi.short_style_name}
{/foreach}
热卖商品
{foreach from=$hot_goods item=remaishangpin}
{$remaishangpin.short_style_name}
{/foreach}
接着我们要一个Menu 菜单,也就是做一个产品的分类列表出来。相信你现在至少知道
分类的标签是什么,就知道要怎么做了吧,呵呵。
分类的标签是:$categories
代码如下:
分类列表
{foreach from=$categories item=fenlei}
{$fenlei.name}
{/foreach}
到前台刷新看看,呵呵,分类列表被调取出来了,我们试着在后台多添加几个一级分类,
然后到首页刷新看看。
子分类的标签是对应在父分类标签来调用的。
代码如下:
分类列表
{foreach from=$categories item=fenlei}
{$fenlei.name}
{foreach from=$fenlei.children item=child}
- - {$child.name|escape:html}
{/foreach}
{/foreach}
保存以后前台刷新看看呢。呵呵,怎么样?子分类也被调用出来了吧,当然可以根据自
己的需要,加上不同的表格或者图片的修饰,子分类是放在了父分类标签的基础上来调用的。
不过如果你的分类已经固定了很少改动,我建议还是做成死的,这样可以做的更漂亮一
些,比如每个分类直接是用图片来代替。呵呵,我一般就是这么处理的,我除了商品和新闻
是动态调用出来的以外,其它的都是做成固定的死的,这样就能够设计的很漂亮,因为有时
候受到代码的限制,做出来不是很好看。
E-Commerce Online Shop 网上商店系统
模板制作引导手册
by Lu Hengqi
16-Nov-07 E-Commerce Online Shop 网上商店系统
2
目录
关于ECSHOP............................................................................................................ 3
产品特点:.....................................................................................................................................................3
1. 前言..................................................................................................................... 5
1.1. 模板系统介绍........................................................................................................................................5
1.2. 涵盖内容.................................................................................................................................................5
1.3. 适用版本.................................................................................................................................................5
1.4. ECShop 团队主要成员....................................................................................................................5
2. 模板结构说明..................................................................................................... 6
2.1. 模板目录结构........................................................................................................................................6
2.2. 链接模板文件使用例子.....................................................................................................................6
2.3. 模板文件结构........................................................................................................................................6
3. 模板系统标签说明 ............................................................................................ 9
3.1. 变量调节标签........................................................................................................................................9
3.1.1. escape [编码].................................................................................................................................................9
3.1.2. nl2br [换行符替换成 <br />] ..................................................................................................................9
3.1.3. default [默认值] ............................................................................................................................................9
3.1.4. truncate [截取]...........................................................................................................................................10
3.1.5. strip_tags [去除html标签] ....................................................................................................................10
3.2. 控制标签.............................................................................................................................................. 11
3.2.1. if,elseif,else..................................................................................................................................................11
3.2.2. foreach,foreachelse................................................................................................................................12
3.3. 显示标签.............................................................................................................................................. 14
3.3.1. cycle ...............................................................................................................................................................14
3.3.2. html_options ..............................................................................................................................................15
3.3.3. html_select_date......................................................................................................................................16
3.3.4. html_radios.................................................................................................................................................19
3.3.5. html_select_time......................................................................................................................................21
3.4. 辅助标签.............................................................................................................................................. 25
3.4.1. assign.............................................................................................................................................................25
3.4.2. Include ..........................................................................................................................................................25
E-Commerce Online Shop 网上商店系统
3
关于ECSHOP
ECShop是Comsenz公司推出的一款B2C独立网店系统,适合企业及个人快速构建个性化
网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。
ECShop悉心听取每一位商家的需求与建议,不仅设计了人性化的网店管理系统帮助商家
快速上手,还根据中国人的购物习惯改进了购物流程,实现更好的用户购物体验。
经过近两年的发展,ECShop网店系统无论在产品功能、稳定性、执行效率、负载能力、
安全性和SEO支持(搜索引擎优化)等方面都居国内同类产品领先地位,成为国内最流行的购物
系统之一。
官方网站:
http://www.ecshop.com
官方论坛:
http://bbs.ecshop.com
产品特点:
灵活的模版机制
ECShop开发了独有的高效模板引擎(2.15以前版本使用smarty模板引擎),并结合了
Dreamweaver的模板和库功能,使得编辑制作模板变得更简单。
开放的插件机制
支付、配送,会员整合都是以插件形式实现。商家可以随时增加或变更的支付方式和配送体
系。ECShop支持大部分php开发的论坛系统,包括discuz,phpwind等,只需在后台做简
单参数配置,即可完成会员整合。
功能 AJAX 化
ECShop使用目前流行的 AJAX 技术,批量数据编辑变得更迅速,方便。
促销功能
ECShop提供了积分、红包、赠品,夺宝奇兵等多种促销方法。
高效率的代码和执行性能
通过优化代码与数据库结构,配合ECShop独家设计的缓存机制,在不考虑网速的情况下,
网店动态页面与纯静态页面访问速度相当。
常规功能的更完善实现
针对常规功能尤其是后台管理和购物流程,ECShop进行了更简洁的设计,实现更好的用户
体验。
E-Commerce Online Shop 网上商店系统
4
搜索引擎优化
在 SEO (搜索引擎优化)上,ECShop独家支持两种 URL 重写方式,并且是同类软件中第
一家支持google / yahoo / microsoft三家共同发布的 sitemaps 0.9 网站索引规范,能够为
站点被搜索引擎收录做到最大限度的支持和帮助。
内置手机短信网关
ECShop内置手机短信网关,支持会员信息群发,订单提醒等功能。
多语言支持
支持简体,繁体,英文。
源代码开放
用户可根据自己的需求对ECShop进行定制,扩展。
E-Commerce Online Shop 网上商店系统
5
1. 前言
1.1. 模板系统介绍
ECShop网上商店系统”的模板机制是由ECShop团队自行研发的模板控制系统,和著名的
PHP开源模板引擎程序Smarty大部分功能类似。为了方便用户开发模板,并使用了
Dreamweaver的模板和库功能,使得编辑模板变得更简单容易。
1.2. 涵盖内容
本文档主要介绍“模板结构说明”、“模板制作范例”和“模板系统标签变量”等。
1.3. 适用版本
本文档由ECShop团队编写整理;文档主要针对ECShop v2.5+版本。
如果您发现文档内容有误,或者内容尚未更新到最新版本,又或者您觉得需要添加需要了解
的资料,请Email: [email=luhengqi@gmail.com]luhengqi@gmail.com[/email],并请注明哪部分内容错误或者尚未更新,谢谢!
注意:“ecshop v2.5+” 表示此文档的适用环境为v2.5或更高版本,低于此版本的可能已
经不适用!为了获得更多更强的功能以及更安全的使用环境,请您尽快升级您的ECShop主程
序!
1.4. ECShop 团队主要成员
项目策划
Paul Gao,Weber Liu
程序开发
Weber Liu,ScottYe,WenjinZhang,YanXuan,PaulGao,Stevenliu,Hackfan,
Edisonrao
界面设计
Weber Liu,HengqiLu,Yecior
文档整理
Lily Chai,Bei Wang
E-Commerce Online Shop 网上商店系统
6
2. 模板结构说明
2.1. 模板目录结构
名称 备注(作用)
css 存放模板.css “样式表”文件目录
images 存放模板“图片”文件目录
js 存放模板.js“javascript”文件目录
library 存放模板.lbi“库文件”目录
注意:以上目录名全部都不可以更改,因为需要和程序做匹配,使用Unix系列操作系统的用
户请注意目录名称大小写。
2.2. 链接模板文件使用例子
文件格式 使用例子
.css <linkhref="style.css" rel="stylesheet" type="text/css" />
备注:注意默认的style.css文件不可以更改文件名或移动到css目录,额外添加的.css文件需要
存放到css目录路径,不可以使用其他目录名称,留意红色代码部分的使用。
例子:<linkhref="css/style.css" rel="stylesheet" type="text/css" />
.js <script type="text/javascript" src="js/ajax.js"></script>
备注:.js文件必须存放在js目录,不可以使用其他目录名称,注意红色代码部分。
.gif/.jpg/.png .dwt文件代码下面路径使用例子:
<imgsrc="images/a.gif" alt="" />
.lbi文件代码下面路径使用例子:
<imgsrc="../images/a.gif" alt="" />
.lbi <!-- #BeginLibraryItem "/library/page_header.lbi" --><!--
#EndLibraryItem -->
注意:链接代码的href、rel、type的次序需要遵行上面例子,否则程序可能无法使用。
2.3. 模板文件结构
一套完整模板应该包含以下文件:
29个 .dwt文件(模板框架文件)
50个 .lbi文件(模板库文件)
1个style.css文件 (里面包含了模板的配置代码。)
1个screenshot.png文件(用于后台管理显示安装模板。)
名称 文件类型 说明
activity.dwt 模板文件 活动列表页
article_cat.dwt 模板文件 文章列表页
article_pro.dwt 模板文件 系统文章页(如:“公司简介”、“版权信息“。)
article.dwt 模板文件 文章内容页
auction_list.dwt 模板文件 拍卖商品列表页 E-Commerce Online Shop 网上商店系统
7
auction.dwt 模板文件 拍卖商品详情页
brand.dwt 模板文件 品牌商品列表页
catalog.dwt 模板文件 所有分类、品牌页
category.dwt 模板文件 商品列表页
compare.dwt 模板文件 商品比较页
flow.dwt 模板文件 购物车和购物流程页
gallery.dwt 模板文件 商品相册页
goods.dwt 模板文件 商品详情页
group_buy_goods.dwt 模板文件 团购商品详情页
group_buy_list.dwt 模板文件 团购商品列表页
index.dwt 模板文件 首页
message.dwt 模板文件 信息提示页(如:警告信息,登陆成功。)
myship.dwt 模板文件 配送方式查询页
pick_out.dwt 模板文件 选购中心页
receive.dwt 模板文件 收货确认信息页
respond.dwt 模板文件 在线支付结果提示信息页
search.dwt 模板文件 商品高级搜索、搜索结果页
snatch.dwt 模板文件 夺宝奇兵页
tag_cloud.dwt 模板文件 标签云页
topic.dwt 模板文件 专题活动页
user_clips.dwt 模板文件 用户中心页(包含:欢迎页、我的留言、我的评论、
我
的标签、收藏商品、缺货登记、添加缺货登记、我的
推
荐、单个商品推荐。)
user_passport.dwt 模板文件 用户安全页(包含:会员登录、会员注册、找回密码
。)
user_transaction.dwt 模板文件 用户中心页(包含:个人资料、我的红包、添加红包
、我的订单、订单详情、合并订单、订单状态、商品
列表、费用总计、收货人信息、支付方式、其他信息
、会员余额、积分兑换。)
wholesale_list.dwt 模板文件 批发商品页
ad_position.lbi 库文件 广告位
article_category_tree.lbi 库文件 文章列表页“文章分类树”
auction.lbi 库文件 首页拍卖商品
brand_goods.lbi 库文件 首页品牌商品
brands.lbi 库文件 品牌列表和商品列表页“品牌筛选”
cart.lbi 库文件 购物车
cat_articles.lbi 库文件 首页分类文章
cat_goods.lbi 库文件 首页分类商品
category_tree.lbi 库文件 商品分类树
categorys.lbi 库文件 选购中心“分类列表”
comments_list.lbi 库文件 用户评论表单、内容列表
comments.lbi 库文件 用户评论 (ajax载入comments_list.lbi库文件。)
consignee.lbi 库文件 收货地址表单
email_list.lbi 库文件 邮件订阅
filter_attr.lbi 库文件 商品列表页“属性筛选”
goods_article.lbi 库文件 相关文章
goods_attrlinked.lbi 库文件 属性关联的商品
goods_fittings.lbi 库文件 相关配件 E-Commerce Online Shop 网上商店系统
8
goods_gallery.lbi 库文件 商品相册
goods_list.lbi 库文件 商品列表
goods_tags.lbi 库文件 商品标记
goods_relative.lbi 库文件 相关商品
group_buy.lbi 库文件 首页团购商品
help.lbi 库文件 网店帮助
history.lbi 库文件 商品浏览历史
invoice_query.lbi 库文件 首页发货单列表
member_info.lbi 库文件 会员登录表单和登录成功以后的会员信息
member.lbi 库文件 会员登录 (ajax载入member_info.lbi库文件。)
myship.lbi 库文件 配送查询
new_articles.lbi 库文件 最新文章、网店公告
order_query.lbi 库文件 订单查询
order_total.lbi 库文件 订单费用总计
page_footer.lbi 库文件 页面脚部(包含:版权信息、联系电话、地址、IM
软件和Ajax需要调用的javascript代码。
page_header.lbi 库文件 页面头部 (包含:网店LOGO、顶部菜单、主导
航)
pages.lbi 库文件 列表分页
price_grade.lbi 库文件 商品列表页“价格筛选”
recommend_best.lbi 库文件 精品推荐
recommend_hot.lbi 库文件 热卖商品
recommend_new.lbi 库文件 新品推荐
recommend_promotion 库文件 促销商品
search_form.lbi 库文件 搜索表单
snatch_price.lbi 库文件 夺宝奇兵最新出价列表 (必须被
id="ECS_PRICE_LIST"包含实现ajax刷新。)
snatch.lbi 库文件 夺宝奇兵出价表单 (必须被id="ECS_SNATCH"包含
实现ajax刷新。)
top10.lbi 库文件 销售排行
ur_here.lbi 库文件 当前位置
user_menu.lbi 库文件 用户中心菜单
vote_list.lbi 库文件 在线调查
vote.lbi 库文件 在线调查内容
screenshot.png 图片文件 用于后台管理显示安装模板,必须使用.png格式。
style.css 样式表文件 模板默认样式表文件,里面包含了模板的配置代码。
E-Commerce Online Shop 网上商店系统
9
3. 模板系统标签说明
3.1. 变量调节标签
3.1.1. escape [编码]
参数位置 参数类型 必需 可用参数 默认 描述
1 string No html,url,quotes html 使用何种编码格式。
描述:
用于html转码,url转码,在没有转码的变量上转换单引号,十六进制转码,十六进制美化转码。默
认是html转码。
例子:
{$articleTitle}
{$articleTitle|escape}
{$articleTitle|escape:"html"} {* escapes& " ' <> *}
{$articleTitle|escape:"url"}
{$articleTitle|escape:"quotes"}
3.1.2. nl2br [换行符替换成 <br />]
描述:
所有的换行符将被替换成 <br />.功能同PHP中的nl2br()函数一样.
例子:
{$articleTitle|nl2br}
输出:
Sun or rain expected<br />today, dark tonight
3.1.3. defaul t [默认值]
参数位置 参数类型 必需 默认 描述
1 string No empty 这是变量为空的时候的默认输出。
描述:
为空变量设置一个默认值。
当变量为空或者未分配的时候,将由给定的默认值替代输出。
例子:
{$articleTitle|default:"no title"}
{$myTitle|default:"no title"}
输出:
Dealers Will Hear Car Talk at Noon.
no title
E-Commerce Online Shop 网上商店系统
10
3.1.4. truncate [截取]
参数位置 参数类型 是否必须 默认 描述
1 integer No 80 截取字符的数量
2 string No … 截取后追加在截取词后面的字符串
3 boolean No false 是截取到词的边界(假)还是精确到字符(真
)
描述:
从字符串开始处截取某长度的字符.默认是80个.
你也可以指定第二个参数作为追加在截取字符串后面的文本字串.该追加字串被计算在截取长
度中。
默认情况下,smarty会截取到一个词的末尾。
如果你想要精确的截取多少个字符,把第三个参数改为"true"
例子:
{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}
输出:
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after...
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E...
3.1.5. strip_tags [去除html标签]
描述:
去除<和>标签,包括在<和>之间的任何内容.
例子:
{$articleTitle}
{$articleTitle|strip_tags}
输出:
Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't
Seen in <b>years</b>.
Blind Woman Gets New Kidney from Dad she Hasn't Seen in years.
E-Commerce Online Shop 网上商店系统
11
3.2. 控制标签
3.2.1. i f ,elsei f ,else
描述:
Smarty 中的 if 语句和 php 中的 if 语句一样灵活易用,并增加了几个特性以适宜模板引擎. if
必须于 /if 成对出现. 可以使用 else 和 elseif 子句. 可以使用以下条件修饰词:eq、ne、
neq、gt、lt、lte、le、gte、ge、is even、is odd、is not even、is not odd、not、mod、
div by、even by、odd by、==、!=、>、<、<=、>=. 使用这些修饰词时必须和变量或常量用
空格格开.
例子:
{if $name eq "Fred"}
Welcome Sir.
{elseif $name eq "Wilma"}
Welcome Ma'am.
{else}
Welcome, whatever you are.
{/if}
{* an example with "or" logic *}
{if $name eq "Fred" or $name eq "Wilma"}
...
{/if}
{* same as above *}
{if $name == "Fred" || $name == "Wilma"}
...
{/if}
{* the following syntax will NOT work, conditional qualifiers
must be separated from surrounding elements by spaces *}
{if $name=="Fred" || $name=="Wilma"}
...
{/if}
{* parenthesis are allowed *}
{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}
...
{/if}
{* you can also embed php function calls *}
{if count($var) gt 0}
...
{/if}
{* test if values are even or odd *}
{if $var is even}
...
{/if}
E-Commerce Online Shop 网上商店系统
12
{if $var is odd}
...
{/if}
{if $var is not odd}
...
{/if}
{* test if var is divisible by 4 *}
{if $var is div by 4}
...
{/if}
{* test if var is even, grouped by two. i.e.,
0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc. *}
{if $var is even by 2}
...
{/if}
{* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *}
{if $var is even by 3}
...
{/if}
3.2.2. foreach, foreachelse
iteration:
iteration 用于显示当前循环的执行次数[待考]
iteration 总是从 1 开始,每执行一次增加 1.[待考]
first:
当前 foreach 循环第一次执行时 first 被设置成 true.
last:
当前 foreach 循环执行到最后一遍时 last 被设置成 true.
show:
show 是 foreach 的一个参数. 取值为布尔值 true 或 false. 如果指定为 false 该循环不显示,
如果循环指定了 foreachelse 子句,该子句显示与否也取决于 show 的取值.
total:
total 用于显示循环执行的次数,可以在循环中或循环执行后调用.
属性 类型 是否必须 缺省值 描述
from string Yes n/a 待循环数组的名称
item string Yes n/a 当前处理元素的变量名称
key string No n/a 当前处理元素的键名
name string No n/a 该循环的名称,用于访问该循环
描述:
foreach 是除 section 之外处理循环的另一种方案(根据不同需要选择不同的方案). E-Commerce Online Shop 网上商店系统
13
foreach 用于处理简单数组(数组中的元素的类型一致),它的格式比 section 简单许多,缺点
是只能处理简单数组.
foreach 必须和 /foreach 成对使用,且必须指定 from 和 item 属性.
name 属性可以任意指定(字母、数字和下划线的组合).
foreach 可以嵌套,但必须保证嵌套中的 foreach 名称唯一.
from 属性(通常是数组)决定循环的次数.
foreachelse 语句在 from 变量没有值的时候被执行.
例子1:
{* 该例将输出数组 $custid 中的所有元素的值 *}
{foreach from=$custid item=curr_id}
id: {$curr_id}<br>
{/foreach}
输出:
id: 1000<br>
id: 1001<br>
id: 1002<br>
例子2:
{* The key contains the key for each looped value
assignment looks like this:
$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
*}
{* 键就是数组的下标,请参看关于数组的解释 *}
{foreach name=outer item=contact from=$contacts}
{foreach key=key item=item from=$contact}
{$key}: {$item}<br>
{/foreach}
{/foreach}
输出:
phone: 1<br>
fax: 2<br>
cell: 3<br>
phone: 555-4444<br>
fax: 555-3333<br>
cell: 760-1234<br>
foreach 循环有自己的变量名,使用该变量名可以访问该循环. 使用方法为
{$smarty.foreach.foreachname.varname},其中 foreachname 即在 foreach 中指定的
name 属性.
E-Commerce Online Shop 网上商店系统
14
3.3. 显示标签
3.3.1. cycle
属性 类型 是否必须 缺省值 描述
name string No default 轮转的名称
values mixed Yes N/A 待轮转的值,可以是用逗号分隔的列表(请查看
delimiter 属性)或一个包含多值的数组.
print boolean No true 是否输出值
advance boolean No true 是否使用下一个值(为 false 时使用当前值)
delimiter string No , 指出values 属性中使用的分隔符,默认是逗号.
assign string No n/a 输出值将被赋给模板变量的名称
描述:
Cycle 用于轮转使用一组值. 该特性使得在表格中交替输出颜色或轮转使用数组中的值变得很
容易.
如果需要在模板中使用多个轮转,需要给出唯一的 name 属性.
用户可以设置 print 属性为 false 强制不输出当前值. 该特性可以很方便地略过某个值.
advance 属性用于重复使用某个值. 当该属性设置为 false 时,下次调用该轮转时将输出同样
的值.
如果指定了 "assign" 这个特殊属性,该轮转的输出值将被赋给由 assign 指定的模板变量,而
不是直接输出.
例子:
{section name=rows loop=$data}
<tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}">
<td>{$data[rows]}</td>
</tr>
{/section}
输出:
<tr bgcolor="#eeeeee">
<td>1</td>
</tr>
<tr bgcolor="#d0d0d0">
<td>2</td>
</tr>
<tr bgcolor="#eeeeee">
<td>3</td>
</tr>
E-Commerce Online Shop 网上商店系统
15
3.3.2. html_opt ions
属性 类型 是否必须 缺省值 描述
values array Yes, unless using
options attribute
n/a 包含下拉列表各元素值的数组
output array Yes, unless using
options attribute
n/a 包含下拉列表各元素显示值的数组
selected string/array No empty 已选定的元素或元素数组
options associative
array
Yes, unless using
values and output
n/a 包含值和显示的关联数组
name string No empty 下拉菜单的名称
描述:
自定义函数 html_options 根据给定的数据创建选项组. 该函数可以指定哪些元素被选定. 要么
必须指定 values 和 ouput 属性,要么指定 options 替代.
如果给定值是数组,将作为 OPTGROUP 处理,且支持递归. 所有的输出与 XHTML 兼容.
如果指定了可选属性 name,该选项列表将将被置于<select name="groupname"></select>
标签对中. 如果没有指定,那么只产生选项列表.
上表未提到的其它参数在 <select> 标签中以"名称/属性"对的方式显示. 如果没有指定可选属
性 name 这些参数将被忽略.
例子:
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
Johnson','Carlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
index.tpl:
<select name=customer_id>
{html_options values=$cust_ids selected=$customer_id output=$cust_names}
</select>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_options', array(
1001 => 'Joe Schmoe',
1002 => 'Jack Smith',
1003 => 'Jane Johnson',
1004 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
E-Commerce Online Shop 网上商店系统
16
index.tpl:
<select name=customer_id>
{html_options options=$cust_options selected=$customer_id}
</select>
输出:
<select name=customer_id>
<option value="1000">Joe Schmoe</option>
<option value="1001" selected="selected">Jack Smith</option>
<option value="1002">Jane Johnson</option>
<option value="1003">Charlie Brown</option>
</select>
3.3.3. html_select_date
属性 类型 是否必须 缺省值 描述
prefix string No Date_ 变量名称前缀
time timestamp/
YYYY-MM-
DD
No UNIX时间戳
或年-月-日
使用时间类型(data/time)
start_year string No 年份或与当前
年份的相对值
下拉列表中第一个年份,或
与当前年份的相对值(正/负
几年)
end_year string No 同start_year 下拉列表中最后一个年份,
或与当前年份的相对值(正/
负 几年)
display_days boolean No true 是否显示天
display_months boolean No true 是否显示月
display_years boolean No true 是否显示年
month_format string No %B 月份的表示方法(strftime)
day_format string No %02d 天显示的格式(sprintf)
day_value_format string No %d 天的表示方法(sprintf)
year_as_text boolean No false 是否以文本方式显示年份
reverse_years boolean No false 逆序显示年份
field_array string No null 如果指定了名称,选定的区
域将以[Day],[Year],[Month]
的形式返回给PHP(待考)
day_size string No null 如果给定,为标签添加大小
属性
month_size string No null 如果给定,为标签添加大小
属性
year_size string No null 如果给定,为标签添加大小
属性
all_extra string No null 如果给定,为所有标签添加
附加属性
day_extra string No null 如果给定,为标签添加附加
属性
month_extra string No null 如果给定,为标签添加附加
属性 E-Commerce Online Shop 网上商店系统
17
year_extra string No null 如果给定,为标签添加附加
属性
field_order string No MDY 显示区域的顺序
field_separator string No \n 各区域间输出的分隔字符串
month_value_format string No %m 月份值的strftime表示方法
,默认为 %m
描述:
自定义函数 html_select_date 用于创建日期下拉菜单. 它可以显示任意年月日.
例子:
{html_select_date}
输出:
<select name="Date_Month">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12" selected>December</option>
</select>
<select name="Date_Day">
<option value="1">01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13" selected>13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option> E-Commerce Online Shop 网上商店系统
18
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="Date_Year">
<option value="2001" selected>2001</option>
</select>
例子:
{* start and end year can be relative to current year *}
{html_select_date prefix="StartDate" time=$time start_year="-5" end_year="+1"
display_days=false}
输出:
<select name="StartDateMonth">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12" selected>December</option>
</select>
<select name="StartDateYear">
<option value="1999">1995</option>
<option value="1999">1996</option>
<option value="1999">1997</option>
<option value="1999">1998</option>
<option value="1999">1999</option>
<option value="2000" selected>2000</option>
<option value="2001">2001</option>
</select>
E-Commerce Online Shop 网上商店系统
19
3.3.4. html_radios
属性 类型 是否必须 缺省值 描述
name string No radio 单选按钮列表的名称
values array Yes, 或指定
options 属性
n/a 包含单选按钮值的数组
output array Yes, 或指定
options 属性
n/a 包含单选按钮显示值的数组
checked string No empty 已选定的元素
options associative
array
Yes, 或指定
values 属性
n/a 包含值和显示的关联数组
separator string No empty 分隔每个单选按钮的字符串
描述:
自定义函数 html_radios 根据给定的数据创建单选按钮组. 该函数可以指定哪个元素被选定.
要么必须指定 values 和 ouput 属性,要么指定 options 替代. 所有的输出与 XHTML 兼容.
上表未提到的其它参数在 <input> 标签中以"名称/属性"对的方式显示.
例子:
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
Johnson','Carlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
index.tpl:
{html_radios values=$cust_ids checked=$customer_id output=$cust_names
separator="<br />"}
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_radios', array(
1001 => 'Joe Schmoe',
1002 => 'Jack Smith',
1003 => 'Jane Johnson',
1004 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
index.tpl:
E-Commerce Online Shop 网上商店系统
20
{html_radios name="id" options=$cust_radios checked=$customer_id separator="<br />"}
输出:
<input type="radio" name="id[]" value="1000">Joe Schmoe<br />
<input type="radio" name="id[]" value="1001" checked="checked"><br />
<input type="radio" name="id[]" value="1002">Jane Johnson<br />
<input type="radio" name="id[]" value="1003">Charlie Brown<br />
E-Commerce Online Shop 网上商店系统
21
3.3.5. html_select_t ime
属性 类型 是否必须 缺省值 描述
prefix string No Time_ 变量名称前缀
time timestamp No UNIX时间戳
或年-月-日
使用时间类型(data/time)
display_hours boolean No true 是否显示小时
display_minutes boolean No true 是否显示分钟
display_seconds boolean No true 是否显示秒
display_meridian boolean No true 是否显示正午界(上午/下午)
use_24_hours boolean No true 是否使用24小时制
minute_interval integer No 1 分钟下拉列表的间隔
second_interval integer No 1 秒钟下拉列表的间隔
field_array string No n/a 输出值到该值指定的数组
all_extra string No null 如果给定,为标签添加附加属性
hour_extra string No null 如果给定,为标签添加附加属性
minute_extra string No null 如果给定,为标签添加附加属性
second_extra string No null 如果给定,为标签添加附加属性
meridian_extra string No null 如果给定,为标签添加附加属性
描述:
自定义函数 html_select_time 用于创建时间下拉菜单. 它可以显示任意时分秒.
例子:
{html_select_time use_24_hours=true}
输出:
<select name="Time_Hour">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09" selected>09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option> E-Commerce Online Shop 网上商店系统
22
<option value="23">23</option>
</select>
<select name="Time_Minute">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20" selected>20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option> E-Commerce Online Shop 网上商店系统
23
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Second">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23" selected>23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option> E-Commerce Online Shop 网上商店系统
24
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Meridian">
<option value="am" selected>AM</option>
<option value="pm">PM</option>
</select>
E-Commerce Online Shop 网上商店系统
25
3.4. 辅助标签
3.4.1. assign
描述:
assign 用于在模板被执行时为模板变量赋值.
属性 类型 是否必须 缺省值 描述
var string Yes n/a 被赋值的变量名
value string Yes n/a 赋给变量的值
描述:
assign 用于在模板被执行时为模板变量赋值.
例子:
{assign var="name" value="Bob"}
输出:
The value of $name is Bob.
3.4.2. Include
属性 类型 是否必须 缺省值 描述
file string Yes n/a 待包含的模板文件名
assign string No n/a 该属性指定一个变量保存待包含模板的输出
[var ...] [var type] No n/a 传递给待包含模板的本地参数,只在待包含模
板中有效
描述:
Include 标签用于在当前模板中包含其它模板. 当前模板中的变量在被包含的模板中可用. 必须
指定 file 属性,该属性指明模板资源的位置.
如果设置了 assign 属性,该属性对应的变量名用于保存待包含模板的输出,这样待包含模板
的输出就不会直接显示了。
例子1:
{include file="header.tpl"}
{* body of template goes here *}
{include file="footer.tpl"}
可以在属性中传递参数给待包含模板. 传递给待包含模板的参数只在待包含模板中可见. 如果传
递的参数在待包含模板中有同名变量,那么该变量被传递的参数替代.
例子2:
{include file="header.tpl" title="Main Menu" table_bgcolor="#c0c0c0"}
{* body of template goes here *}
{include file="footer.tpl" logo="http://my.domain.com/logo.gif"}
包含 $template_dir 文件夹之外的模板请使用 模板资源 说明的格式.
E-Commerce Online Shop 网上商店系统
26
例子3:
{* absolute filepath *}
{include file="/usr/local/include/templates/header.tpl"}
{* absolute filepath (same thing) *}
{include file="file:/usr/local/include/templates/header.tpl"}
{* windows absolute filepath (MUST use "file:" prefix) *}
{include file="file:C:/www/pub/templates/header.tpl"}
{* include from template resource named "db" *}
{include file="db:header.tpl"}