【php精品源码栏目提醒】:以下是网学会员为您推荐的php精品源码-Ecmall二次开发 - 开发文档,希望本篇文章对您学习有所帮助。
Ecmall 二次开发在 ECMall 模板中,用quotquot开头,以quotquot结尾就构成一个标签单元,quotquot紧接着的单词就是标签名。
在标签单元中单词前含quotquot美元符的为变量名。
ECMall2.x 模板制作入门系列之1(认识 ECMall 模板)从 ECMall2.0全新架构发布以来,随着版本的不断更新,ECMall 已经逐渐走向一个稳定时期,是时候整理一些实用教程了。
下面给大家带来一个模板制作入门教程。
申明:本人第一次写教程。
可能只能说一些比较浅显的基础知识。
条理性可能不是很到位,说得不对的地方欢迎拍砖并指正,目的是希望通过这次教程能让新手们对模板有一个比较系统的认识。
一.ECMall 的模板文件在网站中怎么分布的。
怎么找到一个页面所对应的模板theme/ 主题目录商城模板theme/mall/ 包含所有商城模板,里面的每个目录即为一套模板theme/mall/default/ 商城默认模板,里面的 html 文件是模板文件,theme.info.
php 主题信息配置theme/mall/default/styles/ 皮肤目录,里面每一个目录即为一套皮肤theme/mall/default/styles/default/ 默 认 皮 肤 目 录 , style.info.
php 为 皮 肤 配 置 信 息 ,screenshot.jpg 主题截图,preview.jpg 为主题预览图店铺模板theme/store/ 包含所有店铺模板theme/store/default/ 默认店铺模板theme/store/default/styles/ 皮肤目录,里面每一个目录即为一套皮肤theme/store/default/styles/default/ 默认皮肤目录,style.info.
php 为皮肤配置信息,screenshot.jpg 主题截图,preview.jpg 为主题预览图引用:与模板相关的几个概念1.主题严格意义上来讲,大家在论坛里常说的一套模板,在 ECMall2中被定义为一个主题。
一个主题是一套模板和一套皮肤的组合,这可能跟其他某些开源产品有所 区别。
一套模板可以对应多套皮肤从而形成多个主题。
比如 默认模板粉红皮肤 默认粉红主题,默认模板淡蓝皮肤 默认淡蓝主题,这样就能在网站后台(设置-gt主题设置)看到这两个主题。
模板和皮肤的概念我接着往下说。
2.模板、皮肤模板负责决定页面中都由哪些数据、信息构成。
从网页制作角度来看。
模板就是一系列 HTML 网页文件构成。
皮肤负责决定页面中的数据、信息如何展示给用户。
皮肤就包含图片、层叠样式表 CSS、JAVASCRIPT 等。
如何找到当前页面对应的模板文件引用:强烈建议不要修改默认模板,否则以后升级会很麻烦。
如果要修改我们可以新建一套,然后在后台启用新主题在制作模板前先掌握摸清模板的藏身之处是很得力的,知己知彼百战不殆,废话少说了,动真格的,举例给大家说明。
例一:分析注册页面对应哪些模板文件通过首页点注册进入注册页面,发现地址栏的地址为(需要关闭伪静态功能):引用:http://ecmall.shopex.cn/demo/index.phpappmemberampactregisterampret_url前面的 http://ecmall.shopex.cn/demo/是网站访问的路径这个不用多说,这里的 index.
php 就是网站根目录那个 index.
php 文件, 在 这个是
php 程序文件, ECMall 中是系统入口文件,所有前台页面必须通过这个入口进行访问(当然后台也有入口admin/index.
php)我们分析模板要看的是 app 和 act 两个参数:这里的是 appmember 和 actregister。
这里的 app、act 代表什么含义呢?app 是英文单词 application 的缩写, 意思是“应用”,那么这里我们访问的就是一个叫 member意为会员的应用act 是英文单词 action 的缩写,意为“行为”,那么这里我们访问的就是 member 应用的 register行为引用:插播广告通常情况下如果地址栏没有 app,那么 app 默认为 default如果地址栏没有 act,那么 act 默认为 indexapp 是放到 app 目录下的。
进去之后发现有个 member.app.
php, 这个文件就是我们要找的注册页面对应的 app 文件。
打开 member.app.
php,文件里面是
php 程序代码,通过搜索“function register”我们就找到了register act 即会员应用的注册行为。
这里 function register 开始是定义函数的代码,我们需要找到结束位置。
我们在这个函数内就能找到这段代码引用:this-gtdisplaymember.register.html这里单引号中间的“member.register.html”就是模板文件名了。
ps:可能同学们很多不是做程序的,如果你很难判断这个 function register 函数代码哪里是结束,可以借助有折叠功能的编辑器。
现在我们得知了模板文件名。
那么这个文件在哪里呢?有了上头对模板分布的基础认识,可以下结论其实可能性就两个,themes/mall/default(默认商城模板目录)或 themes/store/default(默认店铺模板目录)。
到了这一步,其实很简单了。
我们可以根据页面的含义来找。
这里的注册行为是商城的功能,所有当然在商城模板目录。
这样模板位置我们算是找到了,很简单吧 ,先喝口茶,休息下再继续。
让我们来看看这个 member.register.html 的庐山真面目。
打开后我们看到了大部分模板都有的这样的结构复制内容到剪贴板代码:include filequotheader.htmlquot......include filequotfooter.htmlquot首尾都有include filequotxxxquot这样的模板标签,这代表这个模板含有嵌套模板,我们当前的这个模板嵌套了两个模板 header.html 和 footer.html,他们的位置与 member.register.html 同级目录的。
到目前为止已经教给大家一种比较通用的找模板的方法。
通过这种方法你可以应付大部分情况了。
希望大家通过这个教程能对 ECMall 模板有个全局的认识。
强烈建议经常问“这个页面的模板在哪里”的同学认真看看。
二.如何新建一套商城主题。
第一步:复制默认主题进入 theme/mall/目录,找到 default 目录 复制一个复件,重命名,起一个我们想要的名字“mytheme”第二步:修改主题配置修改程序文件需要程序编辑器,这里给大家推荐本人一直使用的 editplus 编辑器,比较小巧而且灰常靠谱。
下载后,需要进行“去 BOM”设置,菜单“工具”--gt“首选项”,在设置面板设置为“总是删除签名”如下图:进入刚刚复制的那个文件夹(mytheme)里面,如下图打开 theme.info.
php 文件上面这段代码是主题的配置信息,其中version:主题版本,主题作者自行设定版本号author:主题作者description:主题描述。
请自行进行修改,修改好后保存。
如果你的版本是 UTF-8的需要在保存时用文件菜单里的“另存为”,选择 UTF-8编码,这时弹出的提示是否替换,选择“是”。
第三步:修改预览图和缩略图主题预览图在 themes/mall/mytheme/styles/default 下这里我们的新主题只有一套默认皮肤,如果再复制 styles 目录下的 default 文件夹,重命名为newstyle,这时我们就得到了由一套模板和两套皮肤组成的两套主题了。
这里再次巩固一下上面讲到的 ECMall 主题的定义。
第四步:启用新主题进入后台“设置”--gt“主题设置”,发现我们新建的主题显示出来了点击“应用”后。
即可切换到我们自己的主题了。
一、资源引用 res 标签 功能:返回当前模板当前风格目录的 url 路径 实 例 : res filecss/ecmall.css 这 个 标 签 在 模 板 编 译 后 将 变 成 http:// 商 城 域 名 /themes/default/styles/default,注意末尾没有quot/quot,返回结果会随后台设置的主题变化 lib 标签 功能:返回 javascript 库的 url 路径 实 例 : lib fileecmall.js 这 个 标 签 在 模 板 编 译 后 将 变 成 http:// 商 城 域 名 /includes/libraries/javascript,注意末尾没有quot/quot,返回结果不会随后台设置的主题变化 url 标签 功能:url 解析器,可根据后台伪静态状态返回相应 url 等。
说明:如果一个链接的目标页面需要伪静态功能,请使用该 url 标签,只有当后台开 启伪静态并在.htaccess 文件为目标页面设置了伪静态规则时 url 标签才能解析为静态 url 地址。
实例:url appgoodsampidgoods_id解析后如果伪静态成功则返回quotgoods/19quot include 标签 功能:Include 标签用于在当前模板中包含其它模板. 当前模板中的变量在被包含的模板中可用. 必须指定 file 属性,该属性指明模板资源的位置.实例:模板代码:include filequotheader.htmlquot body of template goes here include filequotfooter.htmlquot 二、模板变量 1.模板保留变量 模板预置的一些系统变量,包括 smarty.now 当前时刻对应的格林尼治时间戳,可以用smarty.nowdate显示当前 日期时间,关于 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-gtdisplay 前添加赋值语句this-gtassignname Tom //普通变量this-gtassignuser array name gt Tom age gt 28 //数组变量this-gtdisplayindex.html在 themes/mall/default/index.html 中显示变量模板代码:Hellonameyour age are user.age! 在模板中赋值变量: assign 标签 例在 themes/mall/default/index.html 中赋值变量模板代码:assign varquotnamequot valuequotTomquotHellofirstname! 3.模板上使用语言项 说明:为了满足多语言需求,ECMall 采用了语言包机制,除挂件外,在模板、js 文件中 均使用语言项代替直接显示语言文字。
语 言文件:语言文件位于商城根目录下的 languages 目录下,为当前语言建了一个目 录,如果您用的是 sc-gbk 版本,则会有 sc-gbk 目录,进去之 后就能看到属于前台控制器 的全部语言文件了。
除 common.lang.
php 属于所有 app 外,每一个语言文件都只属于一个 app(ECMall 中称为 控制器) 。
引用:语言文件属于某个控制器而不属于某个模板,同一个模板如果被不同控制器调用将使用不同语言文件进行语言解析 实例1:在默认控制器对应的语言文件 default.lang.
php 添加语言项quottestquot复制内容到剪贴板代码:ltphpreturn array hot_search gt 热门搜索 ... ... best_recommended gt
精品推荐 test gt 测试语言项gt在 index.html 模板中显示语言项quottestquot模板代码:lang.test 输出结果为: 测试语言项 实例2:模板中还支持数组形式语言项:在默认控制器对应的语言文件 default.lang.
php 添加语言项quottest_arrayquot复制内容到剪贴板代码:ltphpreturn array hot_search gt 热门搜索 ... ... best_recommended gt
精品推荐 test_array gt array key1 gt 测试数组语言项 key2 gt 太好了 gt在 index.html 模板中显示语言项quottestquot模板代码:lang.test_array.key1输出结果为:测试数组语言项 4.变量调节器 escape功能:提供各种编码功能参数:可选参数 html、url、quotes、input、editor,缺省为 html html:分别替换变量中的如下字符amp lt gt quot为其 html 实体代码,用于按原样输出 html 源代码 url:如果该变量用于储存 url 地址,需要进行 url 编码 quotes:在单双引号字符前添加反斜杠 input:给输入框赋值时使用 editor:当显示通过文本编辑器录入的内容,需要用此参数实例
php 赋值复制内容到剪贴板代码:this-gtassigngoods_name quotLoreal/欧莱雅quot . quot . quot清润全日保湿乳霜quot . quot .quot50mlltbr /gtltscriptgtquotthis-gtdisplayindex.tpl模板模板代码:goods_namegoods_nameescapegoods_nameescape:quothtmlquotgoods_nameescape:quoturlquotgoods_nameescape:quotquotesquotgoods_nameescape:quotinputquotgoods_nameescape:quoteditorquot 输出结果为 Loreal/欧莱雅quot清润全日保湿乳霜quot50mlltbr /gtltscriptgt Loreal/欧莱雅quot清润全日保湿乳霜quot50mlltbr /gtltscriptgt Loreal/欧莱雅quot清润全日保湿乳霜quot50mlltbr /gtltscriptgt L27oreal2FE6ACA7E88EB1E99B8522E6B885E6B6A6 E585A8E697A5E4BF9DE6B9BFE4B9B3E99C9C225 0ml3Cbr2F3E3Cscript3E Loreal/欧莱雅quot清润全日保湿乳霜quot50mlltbr /gtltscriptgt Loreal/欧莱雅quot清润全日保湿乳霜quot50mlltbr /gtltscriptgt Loreal/欧莱雅quot清润全日保湿乳霜quot50mlltbr /gtltscriptgt nl2br 功能:将换行符替换成ltbr /gt 例子模板代码:varnl2br default 功能:为变量设置一个默认值,当变量为空或者未分配的时候,将由默认值替代输出 例子模板代码:vardefault:quotno titlequot truncate 功能:字符串截取。
从字符串开始处截取某长度的字符。
默认会在末尾追加省略号。
例子:模板代码:contenttruncate:20 strip_tags 功能:去除lt和gt标签包括在lt和gt之间的任何内容。
例子:模板代码:assign varquotcontentquot valuequotltbgt文章内容lt/bgtquotcontentstrip_tags 输出结果为:文章内容 price 功能:格式化价格。
例子:模板代码:assign varquotgoods_pricequot valuequot123456quotgoods_priceprice 输出结果为:123456.00 date 功能:格式化本地时间和日期。
格式:vardate:format 说明: 变量var 必须是格林尼治标准时间,
php 中 gmtime和模板中smarty.now 得到 的都是格林尼治标准时间 参数 format 可为 simple、complete 或自定义日期格式,缺省为 simple。
simple 和 complete 均 可 由 后 台 设 置 , 自 定 义 日 期 格 式 请 参 考 http://docs.
php.net/manual/zh/function.date.
php 例子:模板代码:smarty.nowdatesmarty.nowdate:completesmarty.nowdate:Y-m-d H:i 输出结果为: 2010-12-01 2010-12-01 22:49:46 2010-12-01 22:49 modifier 功能:调用
php 自定义函数。
格式:varmodifier:user_func 三、流程控制标签 1.条件判断(if,elseif,else) 说明 模板中的 if 语句和
php 中的 if 语句一样灵活易用, 并增加了几个特性以适宜模板 引擎. if 必须于 /if 成对出现. 可以使用 else 和 elseif 子句. 可以使用以下条件修饰词: eq、ne/neq、gt、lt、lte/le、gte/ge、mod、not、、、gt、lt、amp lt、gt、、使用这 些修饰词时必须和变量或常量用空格格开. 多个条件之间用 and、or、ampamp、 连接,实现简单的逻辑运算 实例模板代码:if name eq quotFredquot Welcome Sir.elseif name eq quotWilmaquot Welcome Maam.else Welcome whatever you are./if 一个quot或quot逻辑的例子 if name eq quotFredquot or name eq quotWilmaquot .../if 与上例等效 if name quotFredquot name quotWilmaquot .../if 下面的语法无效,条件修饰符必须由空格跟其他元素分开 if namequotFredquot namequotWilmaquot .../if 允许使用括号 if amount lt 0 or amount gt 1000 and volume gt minVolAmt .../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 中的所有元素的值 foreach fromcustid itemcurr_id id: curr_idltbrgt/foreach 输出结果为: id: 1000ltbrgt id: 1001ltbrgt id: 1002ltbrgt 实例2复制内容到剪贴板代码:/ 在对应的控制器中赋值 /this-gtassignquotcontactsquot array arrayquotphonequot gt quot1quot quotfaxquot gt quot2quot quotcellquot gt quot3quot arrayquotphonequot gt quot555-4444quot quotfaxquot gt quot555-3333quot quotcellquot gt quot760-1234quot模板代码: 键就是数组的下标,请参看关于数组的解释 foreach nameouter itemcontact fromcontactsforeach keykey itemitem fromcontactkey: itemltbrgt/foreach/foreach输出结果为:phone: 1ltbrgtfax: 2ltbrgtcell: 3ltbrgtphone: 555-4444ltbrgtfax: 555-3333ltbrgtcell: 760-1234ltbrgt模板代码: 最后一行不显示ltbrgt标签 foreach nameouter itemcontact fromcontacts namemy_nameforeach keykey itemitem fromcontactkey: itemif smarty.foreach.my_name.lastltbrgt/if/foreach/foreach输出结果为:phone: 1ltbrgtfax: 2ltbrgtcell: 3ltbrgtphone: 555-4444ltbrgtfax: 555-3333ltbrgtcell: 760-1234四、显示标签 cycle 格式:cycle valuesquotval1val2val3...quot 说明 cycle 用于轮转使用一组值。
该特性使得在表格中交替输出颜色或轮转使用数组中的 值变得很容易。
实例模板代码:foreach fromdata_list itemdatalttr bgcolorquotcycle valuesquoteeeeeed0d0d0quotquotgtlttdgtdatalt/tdgtlt/trgt/foreach 输出结果为: lttr bgcolorquoteeeeeequotgt lttdgt1lt/tdgt lt/trgt lttr bgcolorquotd0d0d0quotgt lttdgt2lt/tdgt lt/trgt lttr bgcolorquoteeeeeequotgt lttdgt3lt/tdgt lt/trgt html_options 说明 自定义函数 html_options 根据给定的数据创建选项组. 该函数可以指定哪些元素被 选定. 要么必须指定 values 和 ouput 属性,要么指定 options 替代。
实例1复制内容到剪贴板代码:this-gtassigncust_ids array1000100110021003this-gtassigncust_names arrayJoe SchmoeJack SmithJane JohnsonCarlie Brownthis-gtassigncustomer_id 1001模板代码:ltselectgt html_options valuescust_ids selectedcustomer_id outputcust_nameslt/selectgt 实例2复制内容到剪贴板代码:this-gtassigncust_options array 1001 gt Joe Schmoe 1002 gt Jack Smith 1003 gt Jane Johnson 1004 gt Charlie Brownthis-gtassigncustomer_id 1001模板代码:ltselectgt html_options optionscust_options .
上一篇:
DEDE织梦建站教程入门14zip
下一篇:
“温魅杯”会员我最红K歌大赛策划书