Ecshop文件结构

ecshop文件架构说明 

ECShop 结构图及各文件相应功能介绍
ECShop upload 的目录
┣ activity.php 活动列表
┣ affiche.php 广告处理文件
┣ affiliate.php 生成商品列表
┣ article.php 文章内容
┣ article_cat.php文章分类
┣ auction.php 拍卖前台文件
┣ brand.php 品牌列表
┣ captcha.php 生成验证码
┣ catalog.php 列出所以分类及品牌
┣ category.php 商品分类
┣ comment.php 提交用户评论
┣ compare.php 商品比较程序
┣ cycle_image.php 轮播图片程序
┣ feed.php RSS Feed 生成程序
┣ flow.php 购物流程
┣ gallery.php 商品相册
┣ goods.php 商品详情
┣ goods_script.php 生成商品列表
┣ group_buy.php 团购商品前台文件
┣ index.php 首页文件
┣ myship.php 支付配送DEMO
┣ pick_out.php 选购中心
┣ receive.php 处理收回确认的页面
┣ region.php 地区切换程序
┣ respond.php 支付响应页面
┣ robots.txt
┣ search.php 搜索程序
┣ sitemaps.php google sitemap 文件
┣ snatch.php 夺宝奇兵前台页面
┣ tag_cloud.php 标签云
┣ topic.php 专题前台
┣ user.php 会员中心
┣ vote.php 调查程序
┣ wholesale.php 批发前台文件
┣ admin文件夹
┃ ┣ account_log.php 管理中心帐户变动记录
┃ ┣ admin_logs.php 记录管理员操作日志
┃ ┣ ads.php 广告管理程序
┃ ┣ adsense.php 站外JS投放的统计程序
┃ ┣ ad_position.php广告位置管理程序
┃ ┣ affiliate.php 程序说明
┃ ┣ affiliate_ck.php 程序说明
┃ ┣ agency.php 管理中心办事处管理
┃ ┣ area_manage.php 地区列表管理文件
┃ ┣ article.php 管理中心文章处理程序文件
┃ ┣ articlecat.php 文章分类管理程序
┃ ┣ article_auto.php
┃ ┣ attention_list.php
┃ ┣ attribute.php 属性规格管理
┃ ┣ auction.php 管理中心拍卖活动管理
┃ ┣ bonus.php 红包类型的处理
┃ ┣ brand.php管理中心品牌管理
┃ ┣ captcha_manage.php
┃ ┣ card.php 贺卡管理程序
┃ ┣ category.php 商品分类管理程序
┃ ┣ check_file_priv.php 系统文件检测
┃ ┣ comment_manage.php 用户评论管理程序
┃ ┣ convert.php 转换程序
┃ ┣ cron.php 计划任务
┃ ┣ database.php 数据库管理
┃ ┣ ebao_commend.php 易宝推荐
┃ ┣ edit_languages.php 管理中心语言项编辑(前台语言项)
┃ ┣ email_list.php 邮件列表管理
┃ ┣ favourable.php 管理中心优惠活动管理
┃ ┣ flashplay.php
┃ ┣ flow_stats.php 综合流量统计
┃ ┣ friend_link.php 友情链接管理
┃ ┣ gen_goods_script.php 生成显示商品的js代码
┃ ┣ get_password.php 找回管理员密码
┃ ┣ goods.php 商品管理程序
┃ ┣ goods_auto.php
┃ ┣ goods_batch.php 商品批量上传、修改
┃ ┣ goods_booking.php 缺货处理管理程序
┃ ┣ goods_export.php
┃ ┣ goods_type.php 商品类型管理程序
┃ ┣ group_buy.php 管理中心团购商品管理
┃ ┣ guest_stats.php 客户统计
┃ ┣ index.php 控制台首页
┃ ┣ integrate.php 第三方程序会员数据整合插件管理程序
┃ ┣ magazine_list.php
┃ ┣ mail_template.php 管理中心模版管理程序
┃ ┣ message.php 管理中心管理员留言程序
┃ ┣ navigator.php ┃ ┣ order.php 订单管理
┃ ┣ order_stats.php 订单统计
┃ ┣ pack.php 包装管理程序
┃ ┣ payment.php 支付方式管理程序
┃ ┣ picture_batch.php 图片批量处理程序
┃ ┣ privilege.php 管理员信息以及权限管理程序
┃ ┣ sale_general.php 销售概况
┃ ┣ sale_list.php 销售明细列表程序
┃ ┣ sale_order.php 商品销售排行
┃ ┣ searchengine_stats.php 搜索引擎关键字统计
┃ ┣ search_log.php
┃ ┣ shipping.php 配送方式管理程序
┃ ┣ shipping_area.php 配送区域管理程序
┃ ┣ shophelp.php 帮助信息管理程序
┃ ┣ shopinfo.php 网店信息管理页面
┃ ┣ shop_config.php 管理中心商店设置
┃ ┣ sitemap.php 站点地图生成程序
┃ ┣ sms.php 短信模块 之 控制器
┃ ┣ snatch.php 夺宝奇兵管理程序
┃ ┣ sql.php sql管理程序
┃ ┣ tag_manage.php 后台标签管理
┃ ┣ template.php 管理中心模版管理程序
┃ ┣ topic.php 专题管理
┃ ┣ users.php 会员管理程序
┃ ┣ users_order.php 会员排行统计程序
┃ ┣ user_account.php 会员帐目管理(包括预付款,余额)
┃ ┣ user_msg.php 客户留言
┃ ┣ user_rank.php 会员等级管理程序
┃ ┣ view_sendlist.php
┃ ┣ virtual_card.php 虚拟卡商品管理程序
┃ ┣ visit_sold.php 访问购买比例
┃ ┣ vote.php 调查管理程序
┃ ┣ wholesale.php 管理中心批发管理
┃ ┣ help 的目录 后台操作帮助文件
┃ ┣ images 的目录
┃ ┣ includes 的目录
┃ ┃ ┣ cls_exchange.php 后台自动操作数据库的类文件
┃ ┃ ┣ cls_google_sitemap.php Google sitemap 类
┃ ┃ ┣ cls_phpzip.php ZIP 处理类
┃ ┃ ┣ cls_sql_dump.php 数据库导出类
┃ ┃ ┣ inc_menu.php 管理中心菜单数组
┃ ┃ ┣ init.php 管理中心公用文件
┃ ┃ ┣ lib_goods.php 管理中心商品相关函数
┃ ┃ ┣ lib_main.php 管理中心公用函数库
┃ ┃ ┗ lib_template.php 管理中心模版相关公用函数库
┃ ┣ styles 的目录
┃ ┣ templates 的目录
┃ ┗ js 的目录
┃ ┣ colorselector.js
┃ ┣ common.js
┃ ┣ listtable.js
┃ ┣ md5.js
┃ ┣ selectzone.js
┃ ┣ tab.js
┃ ┣ todolist.js
┃ ┣ topbar.js
┃ ┗ validator.js 表单验证类
┣ api 的目录
┃ ┣ checkorder.php 检查订单 API
┃ ┣ cron.php
┃ ┗ init.php API 公用初始化文件
┣ cert 的目录
┣ data 的目录
┃ ┣ ffiliate.html
┃ ┣ goods_script.html
┃ ┣ order_print.html
┃ ┣ afficheimg 的目录
┃ ┣ brandlogo 的目录
┃ ┣ captcha 的目录 验证码背景图片存放位置
┃ ┣ cardimg 的目录
┃ ┣ feedbackimg 的目录
┃ ┣ images 的目录
┃ ┣ packimg 的目录
┃ ┗ sqldata 的目录
┣ images 的目录
┃ ┗ upload 的目录
┃ ┣ File 文件上传存放处
┃ ┣ Flash flash上传存放处
┃ ┣ Image 图片上传存放处
┃ ┗ Media 视频上传存放处
┣ includes 的目录
┃ ┣ cls_captcha.php 验证码图片类
┃ ┣ cls_ecshop.php 基础类
┃ ┣ cls_error.php 用户级错误处理类
┃ ┣ cls_iconv.php 字符集转换类
┃ ┣ cls_image.php 后台对上传文件的处理类(实现图片上传,图片缩小, 增加水印)
┃ ┣ cls_json.php JSON 类
┃ ┣ cls_mysql.php MYSQL 公用类库
┃ ┣ cls_rss.php RSS 类
┃ ┣ cls_session.php SESSION 公用类库
┃ ┣ cls_sms.php 短信模块 之 模型(类库)
┃ ┣ cls_smtp.php SMTP 邮件类
┃ ┣ cls_sql_executor.php SQL语句执行类。
┃ ┣ cls_template.php 模版类
┃ ┣ cls_transport.php 服务器之间数据传输器
┃ ┣ inc_constant.php 常量
┃ ┣ init.php 前台公用文件
┃ ┣ lib.debug.php
┃ ┣ lib_article.php 文章及文章分类相关函数库
┃ ┣ lib_clips.php ECSHOP 用户相关函数库
┃ ┣ lib_code.php 加密解密类
┃ ┣ lib_common.php 公用函数库
┃ ┣ lib_goods.php 商品相关函数库
┃ ┣ lib_insert.php 动态内容函数库
┃ ┣ lib_main.php 前台公用函数库
┃ ┣ lib_order.php 购物流程函数库
┃ ┣ lib_passport.php 用户帐号相关函数库
┃ ┣ lib_payment.php 支付接口函数库
┃ ┣ lib_time.php 时间函数
┃ ┣ lib_transaction.php ECSHOP 用户交易相关函数库
┃ ┣ codetable 的目录
┃ ┃ ┣ big5-gb.table
┃ ┃ ┣ big5_utf8.php
┃ ┃ ┣ gb-big5.table
┃ ┃ ┣ gb_utf8.php
┃ ┃ ┗ ipdata.dat
┃ ┣ fckeditor 的目录 fckeditor编辑器目录
┃ ┗ modules 的目录
┃ ┣ convert 的目录
┃ ┃ ┣ shopex46.php vshopex4.6转换程序插件
┃ ┃ ┗ shopex47.php shopex4.7转换程序插件
┃ ┣ cron 的目录
┃ ┃ ┣ auto_manage.php 自动上下架管理
┃ ┃ ┗ ipdel.php 定期删除
┃ ┣ integrates 的目录
┃ ┃ ┣ bmforum.php 会员数据处理类
┃ ┃ ┣ discuz.php
┃ ┃ ┣ discuz55.php
┃ ┃ ┣ dvbbs.php
┃ ┃ ┣ ecshop.php
┃ ┃ ┣ integrate.php
┃ ┃ ┣ ipb.php
┃ ┃ ┣ molyx.php
┃ ┃ ┣ phpbb.php
┃ ┃ ┣ phpwind.php
┃ ┃ ┣ phpwind5.php
┃ ┃ ┗ vbb.php
┃ ┣ payment 的目录
┃ ┃ ┣ alipay.php 支付宝插件
┃ ┃ ┣ balance.php 余额支付插件
┃ ┃ ┣ bank.php 银行汇款(转帐)插件
┃ ┃ ┣ cappay.php 首信易支付插件
┃ ┃ ┣ chinabank.php 网银在线插件
┃ ┃ ┣ cncard.php 云网支付插件
┃ ┃ ┣ cod.php 货到付款插件
┃ ┃ ┣ ctopay.php Ctopay 支付插件
┃ ┃ ┣ express.php express支付系统插件
┃ ┃ ┣ ips.php ips支付系统插件
┃ ┃ ┣ kuaiqian.php 快钱插件
┃ ┃ ┣ nps.php NPS支付插件
┃ ┃ ┣ pay800.php 800pay 支付宝插件
┃ ┃ ┣ paypal.php 贝宝插件
┃ ┃ ┣ paypalcn.php 贝宝中国插件
┃ ┃ ┣ post.php 邮局汇款插件
┃ ┃ ┣ tenpay.php 财付通插件
┃ ┃ ┣ udpay.php 网汇通插件
┃ ┃ ┣ xpay.php 易付通插件
┃ ┃ ┗ yeepay.php YeePay易宝插件
┃ ┗ shipping 的目录
┃ ┣ cac.php 上门取货插件
┃ ┣ city_express.php 城际快递插件
┃ ┣ ems.php EMS插件
┃ ┣ flat.php 邮政包裹插件
┃ ┣ fpd.php 到付运费插件
┃ ┣ post_express.php 邮政包裹插件
┃ ┣ post_mail.php 邮局平邮插件
┃ ┣ presswork.php 挂号印刷品插件
┃ ┣ sf_express.php 顺丰速运 配送方式插件
┃ ┣ sto_express.php 申通快递 配送方式插件
┃ ┣ yto.php 圆通速递插件
┃ ┗ zto.php 中通速递插件
┣ install 的目录 安装文件目录
┣ js 的目录
┃ ┣ auto_complete.js
┃ ┣ calendar.php
┃ ┣ common.js
┃ ┣ compare.js
┃ ┣ global.js
┃ ┣ lefttime.js
┃ ┣ myship.js
┃ ┣ region.js
┃ ┣ shopping_flow.js
┃ ┣ transport.js
┃ ┣ user.js
┃ ┣ utils.js
┃ ┗ calendar 的目录
┣ languages 的目录 语言风格文件
┃ ┣ zh_cn 的目录
┃ ┃ ┣
┃ ┃ ┣ admin 的目录
┃ ┃ ┣ convert 的目录
┃ ┃ ┣ cron 的目录
┃ ┃ ┣ payment 的目录
┃ ┃ ┗ shipping 的目录
┃ ┗ zh_tw 的目录
┃ ┣ admin 的目录
┃ ┣ convert 的目录
┃ ┣ cron 的目录
┃ ┣ payment 的目录
┃ ┗ shipping 的目录
┣ plugins 的目录
┣ templates 的目录
┃ ┣ backup 的目录
┃ ┃ ┗ ibrary 的目录
┃ ┣ caches 的目录
┃ ┗ compiled 的目录
┃ ┗ admin 的目录 ┣ themes 的目录
┃ ┣ default 的目录
┃ ┃ ┣ images 的目录
┃ ┃ ┗ library 的目录
┃ ┗ sport 的目录
┣ wap 的目录
┃ ┣ article.php
┃ ┣ brands.php
┃ ┣ buy.php
┃ ┣ category.php
┃ ┣ comment.php
┃ ┣ goods.php
┃ ┣ goods_list.php
┃ ┣ index.php
┃ ┣ user.php
┃ ┣ includes 的目录
┃ ┃ ┣ init.php
┃ ┃ ┣ lib_main.php
┃ ┗ templates 的目录
┃ ┣ article.wml
┃ ┣ article_list.wml
┃ ┣ brands.wml
┃ ┣ buy.wml
┃ ┣ category.wml
┃ ┣ comment.wml
┃ ┣ goods.wml
┃ ┣ goods_img.wml
┃ ┣ goods_list.wml
┃ ┣ index.wml
┃ ┣ login.wml
┃ ┣ order_list.wml
┃ ┗ user.wml
┗ widget 的目录
┣ blog_sohu.php
┣ blog_sohu.xhtml
┗ images 的目录

ECShop的库项目功能

认识一下ECShop的库项目功能。

一、认识ECShop模板管理。
1.进入EC的后台,进入“模板管理”–>“设置模板”,如图 ecshop 增加“库项目”并且添加到模板中-》非可编辑区改为可编辑区 - pepsl - Pepsl的心情 可以看到模板编辑页面在此我可以编辑不用页面的区块(库项目)是否显示、显示位置、甚至是显示商品的数量,如图
ecshop 增加“库项目”并且添加到模板中-》非可编辑区改为可编辑区 - pepsl - Pepsl的心情 在此对模板进行的修改都会显示在页面。(EC好强大呀~~^3^) 二、认识库项目
1.一个库项目眷涨个库文件。
打开ECShop的装置目录,进入 themes/default/library文件夹。你会看到许多以 “.lbi”(扩展名)结尾的文件。如图: ecshop 增加“库项目”并且添加到模板中-》非可编辑区改为可编辑区 - pepsl - Pepsl的心情 ad_position?广告位吗?
category_tree?分类树吗?
recommend_new?新品推荐吗? 对了,这里放的眷涨页面上一块一块可以编辑的库项目的文件了。没错,如果你想加一个自己的显示库项目,就在此添加。 其实ECShop提供了编辑库文件编辑的地方,就在管理后台的“模板管理”–>“库文件管理”。 那么这些库项目是如何显示在页面上的呢?让我们以“新品推荐”为例。往下看。 2.库项目的页面添加。 进入themes/default文件夹,用编辑器(文本打开也可以)打开index.dwt文件。ctrl + f ,查找recommend_new 会找到一行代码: 对,眷涨这个“东西”把recommend_new.lbi里的内容加宰出来并成为页面的一部分的。 但是这只是他的开始部分,完整的应该是: 有开始,有结束。
而这个: 和这个
将页面划分为几个不同的大区域,这样后台就可以把那些库项目在这些区域里排序了。 所以如果你仅仅想添加一块自己的定义的库文件显示,那么仅需要在library里添加了自己的lbi文件后,用加到页面合适位置就可以了。如果想以后在后台的“模板管理”里编辑它,那还需要做下面的工作。
三、为后台添加可配置(设置)的库项目 1.在根目录/themes/default/library 中添加一个”test.lbi” 空文件。 然后开打 根目录/languages/zh_cn/admin/template.php(注意大宇用的语言包是简体中文,所以是zh_cn),找到 $_LANG['template_libs'],在此上面添加一行“$_LANG['template_libs']['test'] = ‘test测试’;”。 好了,现在你可以打开你的管理后台,进入“模板管理”–>”库文件管理” 然后点开库文件列表的下拉菜单找找看,是不是有一个 “test.lbi – test测试”。哈哈,我们给它加点内容吧: 我眷涨测试一下下 ps:第一行是设置编码用的。不明白没关系。继续… 2.打开 根目录/admin/includes/lib_template.php。 大致看一下这个文件,你会发现,原来后台的“设置模板”的初始配置都是在这里声明的。 在这里可以编辑 “可以设置内容的模板”,还可以编辑“每个模板允卷设置的库项目”。也眷涨说,这里声明了哪个模板里可以设置哪些库项目。相关数组都有注释,相当方便。 下面我们要把自己定义的“test.lbi”添加到到index.dwt里。 找到 “’index’ => array(” 这一行,一般在文件的120行。这里是个数组。往数组里添加一行: “’/library/test.lbi’ => 4”,如图: ecshop 增加“库项目”并且添加到模板中-》非可编辑区改为可编辑区 - pepsl - Pepsl的心情 我们给它设置的默认显示数量为4。 好了,现在点开 “模板管理” –> “设置模板”,可以在首页的编辑模板里看到我们的库项目了。如图 ecshop 增加“库项目”并且添加到模板中-》非可编辑区改为可编辑区 - pepsl - Pepsl的心情 但是,它的“显示”框式灰色的,不能选中,而且“区域”里也不能设置显示区域。 该怎么办呢? 这么办: 打开 根目录/themes/default/libs.xml 查找“”,在region标签里添加一行“test”,如图: ecshop 增加“库项目”并且添加到模板中-》非可编辑区改为可编辑区 - pepsl - Pepsl的心情 保存后,再次进入“模板管理” –> “设置模板”,看看我们的test库项目是不是可以编辑了。呵呵 编辑好看看效果吧~~~如图 ecshop 增加“库项目”并且添加到模板中-》非可编辑区改为可编辑区 - pepsl - Pepsl的心情

ecshop 实现全站调用购物车功能

此功能是根据网友提供的方法,然后自己实际操作后发现了一些问题,更改了部分代码,完美了一些,下面的代码都贴出来了
今天给一朋友解决一个问题,需要在商城每个页面中的购物车处都显示购物车详情!其实,这个功能很简单,现在很多商城都在用(PS:虽然我的成都零食网现在还没有使用这个功能,并且以后暂时也没有打算使用这个功能,今天还是把这个写出来分享给大家。)。要实现并不是难事,就是在订单模板中加几个关于订单详情的显示嘛。如果需要在这里面加入删除或更新也只需要结合JS进行调用就行了。现在将我实现这个功能的方法公布如下:
可以从图中看出,我主要是添加了购物车详单和删除操作。其它都是一样的。以下是具体实现方法和简单原理:
要实现,首先要知道这一块是怎么出来的,做过ECSHOP二次开发的朋友对这个肯定不陌生了,模板文件在模板文件夹中的库文件夹的cart_info.lbi(找不到的同志可以搜索一下),原来这个模板里的东西很简单,就是添显示了“购物车里有X个商品,去结算”这类的信息。今天,我们要将其全部显示。
其次,我们要显示详情,肯定需要将这个详情使用弹出的方式来显示,不能直接显示,直接显示谁都会,那样有打开订单结算页有什么区别呢?占有太多地方了,这里就要用到css和js的一些基础知识了。
我的代码和注释如下:
<!--{if $goods11}-->
<ul id="mcart-mz">
{foreach from=$goods11 item=goods11 name=goods11}
<li>
<div class="p-img fl">
<a href="{$goods11.url}" target="_blank">
<img src="{$goods11.goods_thumb}" alt="" height="50" width="50">
</a>
</div>
<div class="p-name fl">
<a href="{$goods11.url}" target="_blank">{$goods11.short_name}</a>
</div>
<div class="p-detail fr ar">
<span class="p-price"><strong>{$goods11.goods_price}</strong>×{$goods11.goods_number}</span><br>
<span class="hl-green">小计:{$goods11.subtotal}</span><br>
<a class="del" href="javascript:" onClick="deleteCartGoods({$goods11.rec_id})">[删除]</a>
</div>
</li>
<hr class="hr1"/>
<!--{/foreach}-->
</ul>
<div class="smb ar">共<b>{$goods_number}</b>件商品 共计<strong>¥:{$order_amount}</strong><br><a href="flow.php">
<img src="themes/chengrenyongpin/images/car1_14.jpg" width="120" alt="去结算">
</a></div>
<!--{else}-->
您的购物车暂无商品
<!--{/if}--> 以上代码仅供参考。如需要使用,需要结合以下CSS代码,请同步复制到相应目录文件或嵌入相关文件中
.car_ul {
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #F5859D;
display: none;
float: left;
margin-top: 4px;
padding: 5px;
position: absolute;
right: -1px;
top: 20px;
width: 270px;
}
.car_ul li {
padding: 3px 0;
}
.car_ul li {
line-height: 22px;
width: 270px;
}
.car_ul .f_l {
float: left;
width: 177px;
}
.car_ul .f_r {
float: right;
padding-top: 2px;
text-align: right;
width: 90px;
}
car_ul .name {
float: left;
height: 46px;
line-height: 23px;
overflow: hidden;
padding: 2px 0 0 5px;
width: 117px;
}
.car_ul .f_r b {
color: #FF0000;
}
.car_ul .f_r .del {
color: #999999;
}
复制代码 当然。这里默认这个详单是display:none的。需要您通过js进行调用将期display:block。
接下来,就是要改程序了:
打开/include/lib_insert.php找到function insert_cart_info()。将其改成以下内容
function insert_cart_info1()
{
$sql = 'SELECT c.*,g.goods_name,g.goods_thumb,g.goods_id,c.goods_number,c.goods_price' .
' FROM ' . $GLOBALS['ecs']->table('cart') ." AS c ".
" LEFT JOIN ".$GLOBALS['ecs']->table('goods')." AS g ON g.goods_id=c.goods_id ".
" WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
$row = $GLOBALS['db']->GetAll($sql);
$arr = array();
foreach($row AS $k=>$v)
{
$arr[$k]['goods_thumb'] =get_image_path($v['goods_id'], $v['goods_thumb'], true);
$arr[$k]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
sub_str($v['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $v['goods_name'];
$arr[$k]['url'] = build_uri('goods', array('gid' => $v['goods_id']), $v['goods_name']);
$arr[$k]['goods_number'] = $v['goods_number'];
$arr[$k]['goods_name'] = $v['goods_name'];
$arr[$k]['goods_price'] = price_format($v['goods_price']);
$arr[$k]['rec_id'] = $v['rec_id'];
}
$sql = 'SELECT SUM(goods_number) AS number, SUM(goods_price * goods_number) AS amount' .
' FROM ' . $GLOBALS['ecs']->table('cart') .
" WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
$row = $GLOBALS['db']->GetRow($sql); if ($row)
{
$number = intval($row['number']);
$amount = floatval($row['amount']);
}
else
{
$number = 0;
$amount = 0;
} $GLOBALS['smarty']->assign('str',sprintf($GLOBALS['_LANG']['cart_info'], $number, price_format($amount, false)));
$GLOBALS['smarty']->assign('goods11',$arr);
$GLOBALS['smarty']->assign('goods_number',$number);
$GLOBALS['smarty']->assign('order_amount',$amount);
$output = $GLOBALS['smarty']->fetch('library/car_info.lbi');
return $output;
} 这样,就大功告成了!!购物车详细内容会显示了。但关键的是购物车中的删除。这个就要我们重新写入相应程序了才行。
我们在网站根目录建一个文件为delete_cart_goods.php。它的作用,来专门负责购物车进行更新的那么一个程序(其实只用于删除购物车的订单)
<?php
define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
include_once('includes/cls_json.php');
$result = array('error' => 0, 'message' => '', 'content' => '', 'goods_id' => '');
$json = new JSON;
if($_POST['id'])
{
$sql = 'DELETE FROM '.$GLOBALS['ecs']->table('cart')." WHERE rec_id=".$_POST['id'];
$GLOBALS['db']->query($sql);
}
$sql = 'SELECT c.*,g.goods_name,g.goods_thumb,g.goods_id,c.goods_number,c.goods_price' .
' FROM ' . $GLOBALS['ecs']->table('cart') ." AS c ".
" LEFT JOIN ".$GLOBALS['ecs']->table('goods')." AS g ON g.goods_id=c.goods_id ".
" WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
$row = $GLOBALS['db']->GetAll($sql);
$arr = array();
foreach($row AS $k=>$v)
{
$arr[$k]['goods_thumb'] =get_image_path($v['goods_id'], $v['goods_thumb'], true);
$arr[$k]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
sub_str($v['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $v['goods_name'];
$arr[$k]['url'] = build_uri('goods', array('gid' => $v['goods_id']), $v['goods_name']);
$arr[$k]['goods_number'] = $v['goods_number'];
$arr[$k]['goods_name'] = $v['goods_name'];
$arr[$k]['goods_price'] = price_format($v['goods_price']);
$arr[$k]['rec_id'] = $v['rec_id'];
}
$sql = 'SELECT SUM(goods_number) AS number, SUM(goods_price * goods_number) AS amount' .
' FROM ' . $GLOBALS['ecs']->table('cart') .
" WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
$row = $GLOBALS['db']->GetRow($sql);
if ($row)
{
$number = intval($row['number']);
$amount = floatval($row['amount']);
}
else
{
$number = 0;
$amount = 0;
}
$GLOBALS['smarty']->assign('str',sprintf($GLOBALS['_LANG']['cart_info'], $number, price_format($amount, false)));
$GLOBALS['smarty']->assign('goods11',$arr);
$GLOBALS['smarty']->assign('goods_number',$number);
$GLOBALS['smarty']->assign('order_amount',$amount);
$result['content'] = $GLOBALS['smarty']->fetch('library/car_info.lbi');
die($json->encode($result));
?> 代码如上了,但细心的人看,这其实和lib_insert中的insert_cart_info函数是一样的,只是最后一行不一样,一个是输出到json数据组,一个直接返回。
这样有了这些以后就只差模板中的JS调用了。我们给删除链接添加了代码<a class="del" href="javascript:">[删除]</a>
插入deleteCartGoods这个js就行了。在这里提示一下,使用Jquery和使用EC自带的JS写法是有一定区别的,JQuery 我在这里就不写了,因为我火柴网的确没有使用,我也就懒得写了。
<script type="text/javascript">
function deleteCartGoods(rec_id)
{
Ajax.call('delete_cart_goods.php', 'id='+rec_id, deleteCartGoodsResp**e, 'POST', 'JSON');
}
/**
* 接收删除后返回的信息
*/
function deleteCartGoodsResp**e(res)
{
if (res.error)
{
alert(res.err_msg);
}
else
{
document.getElementById('ECS_CARTINFO').innerHTML = res.content;//这里的ID需要改一下
}
}
</script>
复制代码 原理很简单,先发送删除指令,然后将返回的json数据重新加载到ECS_CARTINFO中的代码中就行了。 到此,大功告成!!

ECSHOP换KindEditor编辑器

ECSHOP一直用的FCK,这个不解释,太多杯具太多纠结。

---------------------
KindEdito主要特点
快速:体积小,加载速度快
开源:开放源代码,高水平,高品质
底层:内置自定义 DOM 类库,精确操作 DOM
扩展:基于插件的设计,所有功能都是插件,可根据需求增减功能
风格:修改编辑器风格非常容易,只需修改一个 CSS 文件
兼容:支持大部分主流浏览器,比如 IE、Firefox、Safari、Chrome、Opera
---------------------
官方下载最新版,解压直接扔在根目录算了,现在拿编辑产品信息开刀,模板页面?这个不用说了吧(admin/templates/goods_info.html).
1.在head部分添加: <script charset=”utf-8″ src=”../kindeditor/kindeditor.js”></script>
<script>
KE.show({
id : ‘editor_id’,
allowFileManager : true });
</script> 2.修改产品描述所调用的FCK编辑器 {$FCKeditor} 为
<textarea id=”editor_id” name=”goods_desc” style=”width:90%;height:300px;”>
{$goods.goods_desc}
</textarea> OK,至此结束,看看效果吧!

ECSHOP所有页面分类树显示全部的方法,所有页面分类树显示全部的方法

ECSHOP所有页面分类树显示全部的方法,所有页面分类树显示全部的方法

修改方法如下:

打开includes/lib_goods.php,找到get_categories_tree()函数部分,找到这一段:
function get_categories_tree($cat_id = 0)
{
if ($cat_id > 0)
{
$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";
$parent_id = $GLOBALS['db']->getOne($sql);
}
else
{
$parent_id = 0;
} 修改成: function get_categories_tree($cat_id = 0)
{
if ($cat_id > 0)
{
$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'"; }

Ecshop 团购列表增加市场价、团购价、为您节省、倒计时等!

曾经求助过此方法,结果运气很好,有一位高手加我无偿为我解决了此问题,非常感谢!经过我俩几天的调试,目前只有1个小问题,其它均完美实现。我整理了详细的教程,经过高手的同意,现在分享给大家,大家都装上后看一下是否都有我遇到的问题。先贴问题,再贴教程。

问题:在我本地和我的服务器上,都出现了团购价调用不出来的现象。而在那位高手兄弟的机子上却没有这个问题,这个问题我们搞了好几天都没解决。甚至他把他的网站程序备份后传给我安装,到我本地还是会出现此问题,奇了怪了。我对这个问题的看法是数据写不到数据库,可能是我俩的环境版本的问题。目前我的解决方法是去数据库字段里修改,没办法,手工修改。

看,团购价格应该是50元,在我这就是出不来,一直显示的是市场价格。

教程,共5步

1,网站后台-数据库管理-SQL查询-执行sql语句:
ALTER TABLE `ecs_goods_activity` ADD `tuan_price` DECIMAL( 10, 2 ) UNSIGNED NOT NULL DEFAULT '0.00' 2,admin/templates/group_buy_info.htm
找到“<a href="javascript:;"><strong>[+]</strong></a>”注释掉。
找到<a href="javascript:;"><strong>[-]</strong></a> </td>
</tr>
{/if}
{/foreach}
在其下面添加
<tr>
<td class="label">团购价格:</td>
<td><input type="text" name="market_price" value="{$group_buy.market_price}" size="30" /> 该价格与价格阶梯价格相同,2个都不能少!</td>
</tr> 3,admin/group_buy.php
找到'ext_info' => serialize(array(
在其上面一行添加
'tuan_price' => $tuan_price, 4,themes/default/group_buy_list.dwt大约61行 添加
市场价格:{$group_buy.shop_price1}<br />
团购价格:{$group_buy.tuan_price1}<br />
为您节省:{$group_buy.js}<br />
折扣:{$group_buy.zk}<br />
倒计时:<font id="timeszc{$group_buy.i}" color="#717171" size="2"></font><br />
例:我的是在“{$lang.gb_price_ladder}<br />”上一行添加的 搜索</body>,在其上面一行添加:
<SCRIPT LANGUAGE="JavaScript">
<!-- {foreach from=$gb_list item=val} -->
function _fresh{$val.i}()
{
var endtime{$val.i}=new Date("{$val.end_timeno}");
var nowtime = new Date();
var leftsecond=parseInt((endtime{$val.i}.getTime()-nowtime.getTime())/1000);
__d=parseInt(leftsecond/3600/24);
__h=parseInt((leftsecond/3600)%24);
__m=parseInt((leftsecond/60)%60);
__s=parseInt(leftsecond%60);
var c=new Date();
var q=((c.getMilliseconds())%10);
if(leftsecond<=0){
document.getElementById("timeszc{$val.i}").innerHTML="促销已结束";
clearInterval(sh{$val.i});
}
else
{
if (__h<10) {__h="0"+__h}
//分数取两位,不足补0
if (__m<10) {__m="0"+__m}
//秒数取两位,不足补0
if (__s<10) {__s="0"+__s}   document.getElementById("timeszc{$val.i}").innerHTML=__d+" 天"+__h+" 时"+__m+" 分"+__s+" 秒";
}
}
_fresh{$val.i}()
var sh{$val.i};
sh{$val.i}=setInterval(_fresh{$val.i},100);
<!--{/foreach}-->
</SCRIPT> 5,根目录/group_buy.php
找到function group_buy_list($size, $page)
下面全部替换
{
/* 取得团购活动 */
$gb_list = array();
$now = gmtime();
$sql = "SELECT b.*, IFNULL(g.goods_thumb, '') AS goods_thumb, b.tuan_price, b.act_id AS group_buy_id, g.shop_price,".
"b.start_time AS start_date, b.end_time AS end_date " .
"FROM " . $GLOBALS['ecs']->table('goods_activity') . " AS b " .
"LEFT JOIN " . $GLOBALS['ecs']->table('goods') . " AS g ON b.goods_id = g.goods_id " .
"WHERE b.act_type = '" . GAT_GROUP_BUY . "' " .
"AND b.start_time <= '$now' AND b.is_finished < 3 ORDER BY b.act_id DESC";
$res = $GLOBALS['db']->selectLimit($sql, $size, ($page - 1) * $size); $i = 1;
while ($group_buy = $GLOBALS['db']->fetchRow($res))
{
$ext_info = unserialize($group_buy['ext_info']);
$group_buy = array_merge($group_buy, $ext_info);
/* 格式化时间 */
$group_buy['i'] = $i ++;
$group_buy['formated_start_date'] = local_date($GLOBALS['_CFG']['time_format'], $group_buy['start_date']);
$group_buy['formated_end_date'] = local_date($GLOBALS['_CFG']['time_format'], $group_buy['end_date']); $group_buy['end_timeno'] = local_date('Y/m/d H:i:s', $group_buy['end_date']);
/* 格式化保证金 */
$group_buy['formated_deposit'] = price_format($group_buy['deposit'], false);
$group_buy['shop_price1'] = price_format($group_buy['shop_price'], false);
if ( $group_buy['tuan_price'] == 0)
{
$group_buy['tuan_price1'] = $group_buy['shop_price1'];
$group_buy['js'] = 0;
$group_buy['zk'] = 1;
}
else
{
$group_buy['tuan_price1'] = price_format($group_buy['tuan_price'], false);
$group_buy['tuan_price'] = $group_buy['tuan_price'];
$group_buy['js'] = $group_buy['shop_price']-$group_buy['tuan_price'];
$group_buy['zk'] = round(($group_buy['tuan_price']/$group_buy['shop_price'])*10 ,2);
} /* 处理价格阶梯 */
$price_ladder = $group_buy['price_ladder'];
if (!is_array($price_ladder) || empty($price_ladder))
{
$price_ladder = array(array('amount' => 0, 'price' => 0));
}
else
{
foreach ($price_ladder as $key => $amount_price)
{
$price_ladder[$key]['formated_price'] = price_format($amount_price['price']);
}
}
$group_buy['price_ladder'] = $price_ladder;
/* 处理图片 */
if (empty($group_buy['goods_thumb']))
{
$group_buy['goods_thumb'] = get_image_path($group_buy['goods_id'], $group_buy['goods_thumb'], true);
}
/* 处理链接 */
$group_buy['url'] = build_uri('group_buy', array('gbid'=>$group_buy['group_buy_id']));
/* 加入数组 */
$gb_list[] = $group_buy;
}
return $gb_list;
}
?>

Ecshop后台fckeditor上传图片路径修改和重命名上传图片

Ecshop上传的图片都是放在images/upload/Image/下面的,图片多了就不爽了哦。Ecshop后台fckeditor上传图片路径修改和重命名上传图片

看了网上很多修改的地方,自己也测试了好几次,现在终于可以了。

Fckeditor上传图片路径修改后的路径是: 已年月日时分秒来区分

images/upload/Image/201303/05143045-6546.jpg
images/upload/Image/年月/日时分秒-四位随机数.上传图片后缀名 我只修改了Image的路径,File、Flash、Media可自己参考修改。 一、修改Ecshop fckeditor 图片上传路径只有一点改动:
找到includes/fckeditor/editor/filemanager/connectors/php/config.php $Config['FileTypesPath']['Image'] = $Config['UserFilesPath'] . 'Image/' ;
$Config['FileTypesAbsolutePath']['Image']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'Image/' ;
改为:
$Config['FileTypesPath']['Image'] = $Config['UserFilesPath'] . 'Image/'. date('Ym',time()+3600*8).'/' ;
$Config['FileTypesAbsolutePath']['Image']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'Image/'. date('Ym',time()+3600*8).'/' ; 就是在后面加了date函数,因为我这里用的UTC时区,所以加了8小时。 二、修改Ecshop fckeditor 上传图片的名字,重命名上传的图片的名字:
找到includes/fckeditor/editor/filemanager/connectors/php/io.php
找到SanitizeFileName函数,
//$sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ;
把这一行注释掉,替换为: $sExtension = substr( $sNewFileName, (strrpos($sNewFileName,'.') + 1 ) ) ; //获取扩展名
$sNewFileName = date('dHis-',time()+3600*8).rand(0,9999).'.'.$sExtension; 替换之后的SanitizeFileName函数如下:
function SanitizeFileName( $sNewFileName )
{
global $Config ; $sNewFileName = stripslashes( $sNewFileName ) ; // Replace dots in the name with underscores (only one dot can be there... security issue).
if ( $Config['ForceSingleExtension'] )
$sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ; // Remove \ / | : ? * " < >
//$sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ;
$sExtension = substr( $sNewFileName, (strrpos($sNewFileName,'.') + 1 ) ) ;
$sNewFileName = date('dHis-',time()+3600*8).rand(0,9999).'.'.$sExtension; //
return $sNewFileName ;
}

ecshop促销时间倒计时效果

ecshop促销时间倒计时效果的实现如下:
1、首先修改程序部分
打开includes/lib_goods.php
找到get_promote_goods()函数部分
在 $goods[$idx]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
下面增加代码 $time = gmtime();
if ($time >= $row['promote_start_date'] && $time <= $row['promote_end_date'])
{
$goods[$idx]['gmt_end_time'] = local_date('M d, Y H:i:s',$row['promote_end_date']);
}
else
{
$goods[$idx]['gmt_end_time'] = 0;
}
2、
然后将 library/recommend_promotion.lbi
全部替换为下面代码:
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<!-- {if $promotion_goods} -->
<script >
var Tday = new Array();
var daysms = 24 * 60 * 60 * 1000
var hoursms = 60 * 60 * 1000
var Secondms = 60 * 1000
var microsecond = 1000
var DifferHour = -1
var DifferMinute = -1
var DifferSecond = -1
function clock(key)
{
var time = new Date()
var hour = time.getHours()
var minute = time.getMinutes()
var second = time.getSeconds()
var timevalue = ""+((hour > 12) ? hour-12:hour)
timevalue +=((minute < 10) ? ":0":":")+minute
timevalue +=((second < 10) ? ":0":":")+second
timevalue +=((hour >12 ) ? " PM":" AM")
var convertHour = DifferHour
var convertMinute = DifferMinute
var convertSecond = DifferSecond
var Diffms = Tday[key].getTime() - time.getTime()
DifferHour = Math.floor(Diffms / daysms)
Diffms -= DifferHour * daysms
DifferMinute = Math.floor(Diffms / hoursms)
Diffms -= DifferMinute * hoursms
DifferSecond = Math.floor(Diffms / Secondms)
Diffms -= DifferSecond * Secondms
var dSecs = Math.floor(Diffms / microsecond) if(convertHour != DifferHour) a="<font color=red>"+DifferHour+"</font>天";
if(convertMinute != DifferMinute) b="<font color=red>"+DifferMinute+"</font>时";
if(convertSecond != DifferSecond) c="<font color=red>"+DifferSecond+"</font>分"
d="<font color=red>"+dSecs+"</font>秒"
if (DifferHour>0) {a=a}
else {a=''}
document.getElementByIdx_xx_x("leftTime"+key).innerHTML = a + b + c + d; //显示倒计时信息
}
</script>
<div id="sales" class="f_l clearfix">
<h1><a href="../search.php?intro=promotion"><img src="data:images/more.gif" /></a></h1>
<div class="clearfix goodBox">
<!--{foreach from=$promotion_goods key=key item=goods name="promotion_foreach"}-->
{if $smarty.foreach.promotion_foreach.index <= 3}
<div class="goodList">
<a href="{$goods.url}"><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}"/></a><br />
<p><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name|escape:html}</a></p>
{$lang.promote_price}<font class="f1">{$goods.promote_price}</font><br><font class="f4" id="leftTime{$key}">{$lang.please_waiting}</font>
</div>
{/if}
<script>
Tday[{$key}] = new Date("{$goods.gmt_end_time}");
window.setInterval(function()
{clock({$key});}, 1000);
</script>
<!--{/foreach}-->
</div>
</div> <!-- {/if} -->

ecshop开发之如何实现团购网的倒计时功能

首先,你需要在购买的时候,提示输入框,告诉用户,你必须购买多少.其次,购物车中需要修改购买数量的时候,你也需要控制。
1:详细页面中控制.
在flow.php里面addto_cart中,加入以下代码,控制购买.
$gc = $db -> getOne("select gc from ".$ecs->table('goods')." where goods_id = ".$goods ->goods_id);
if ($goods->number%$gc) {
$result['error'] = 1;
$result['message'] = "购买数量必须输入{$gc}的倍数";
}
2:在common.js中增加函数
function addToCart1(goodsId, parentId)
{
var goods = new Object();
var spec_arr = new Array();
var fittings_arr = new Array();
var number = 1;
var t = "number"+goodsId;
number = document.getElementByIdx_x("number"+goodsId).value;
goods.spec = spec_arr;
goods.goods_id = goodsId;
goods.number = number;
goods.parent = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);
Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');
}
2:控制列表页面的购买.
在列表页面中,增加一个框.
<form action="javascript:addToCart1({$goods.goods_id})" method="post" name="ECS_FORMBUY{$goods.goods_id}" id="ECS_FORMBUY{$goods.goods_id}" > 购买数量:<input name="number{$goods.goods_id}" type="text" id="number{$goods.goods_id}" value="1" size="4" class="formBorder"/><br /> <a href="javascript:addToCart1({$goods.goods_id})"><img src="data:images/but_buy.jpg"></a>
<a href="javascript:;" id="compareLink"quotes"}','{$goods.type}')"><img src="data:images/but_comp.jpg"></a></form>
调用addToCart1函数.
3:推荐页面
在common.js中增加函数addToCart2
function addToCart2(goodsId, parentId)
{
var goods = new Object();
var spec_arr = new Array();
var fittings_arr = new Array();
var number = 1;
var t = "number"+goodsId;
number = document.getElementByIdx_x("number_"+goodsId).value;
goods.spec = spec_arr;
goods.goods_id = goodsId;
goods.number = number;
goods.parent = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);
Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');
}
在recommend_new.lbi,recommend_best.lbi等页面中,需要增加输入框.调用次函数.
<form action="javascript:addToCart2({$goods.id})" method="post" name="ECS_FORMBUY_{$goods.id}" id="ECS_FORMBUY_{$goods.id}" > 购买数量:<input name="number_{$goods.id}" type="text" id="number_{$goods.id}" value="1" size="4" class="formBorder"/><br /><a href="javascript:addToCart2({$goods.id})"><img src="data:images/but_buy.jpg"></a></form>
最后完成了购买数量的控制。

ecshop首页促销商品倒计时效果

ecshop促销时间倒计时

1、首先修改程序部分
打开includes/lib_goods.php
找到get_promote_goods()函数部分
在 $goods[$idx]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']); 下面增加代码 $time = gmtime();
if ($time >= $row['promote_start_date'] && $time <= $row['promote_end_date'])
{
$goods[$idx]['gmt_end_time'] = local_date('M d, Y H:i:s',$row['promote_end_date']);
}
else
{
$goods[$idx]['gmt_end_time'] = 0;
} 2、
然后将 library/recommend_promotion.lbi
全部替换为下面代码: <meta http-equiv="Content-Type" content="text/html; charset=gbk">
<!-- {if $promotion_goods} -->
<script >
var Tday = new Array();
var daysms = 24 * 60 * 60 * 1000
var hoursms = 60 * 60 * 1000
var Secondms = 60 * 1000
var microsecond = 1000
var DifferHour = -1
var DifferMinute = -1
var DifferSecond = -1
function clock(key)
{
var time = new Date()
var hour = time.getHours()
var minute = time.getMinutes()
var second = time.getSeconds()
var timevalue = ""+((hour > 12) ? hour-12:hour)
timevalue +=((minute < 10) ? ":0":":")+minute
timevalue +=((second < 10) ? ":0":":")+second
timevalue +=((hour >12 ) ? " PM":" AM")
var convertHour = DifferHour
var convertMinute = DifferMinute
var convertSecond = DifferSecond
var Diffms = Tday[key].getTime() - time.getTime()
DifferHour = Math.floor(Diffms / daysms)
Diffms -= DifferHour * daysms
DifferMinute = Math.floor(Diffms / hoursms)
Diffms -= DifferMinute * hoursms
DifferSecond = Math.floor(Diffms / Secondms)
Diffms -= DifferSecond * Secondms
var dSecs = Math.floor(Diffms / microsecond) if(convertHour != DifferHour) a="<font color=red>"+DifferHour+"</font>天";
if(convertMinute != DifferMinute) b="<font color=red>"+DifferMinute+"</font>时";
if(convertSecond != DifferSecond) c="<font color=red>"+DifferSecond+"</font>分"
d="<font color=red>"+dSecs+"</font>秒"
if (DifferHour>0) {a=a}
else {a=''}
document.getElementById("leftTime"+key).innerHTML = a + b + c + d; //显示倒计时信息 }
</script>
<div id="sales" class="f_l clearfix">
<h1><a href="../search.php?intro=promotion"><img src="data:images/more.gif" /></a></h1>
<div class="clearfix goodBox">
<!--{foreach from=$promotion_goods key=key item=goods name="promotion_foreach"}-->
<div class="goodList">
<a href="{$goods.url}"><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}"/></a><br />
<p><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name|escape:html}</a></p>
{$lang.promote_price}<font class="f1">{$goods.promote_price}</font><br><font class="f4" id="leftTime{$key}">{$lang.please_waiting}</font>
</div>
<script>
Tday[{$key}] = new Date("{$goods.gmt_end_time}");
window.setInterval(function()
{clock({$key});}, 1000);
</script>
<!--{/foreach}-->
</div>
</div> <!-- {/if} -->

ecshop首页特价、团购商品显示倒计时

虽然这在百度已经有很多了吧,可我还是花了很长时间才给弄出来。
1、打开includes/lib_goods.php
找到get_promote_goods()函数部分

$goods[$idx]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
下面增加代码
/* 促销时间倒计时 */ $time = gmtime();
if ($time >= $row['promote_start_date'] && $time <= $row['promote_end_date'])
{
$goods[$idx]['gmt_end_time'] = local_date('M d, Y H:i:s',$row['promote_end_date']);
}else{
$goods[$idx]['gmt_end_time'] = 0;
} 2、然后将 library/recommend_promotion.lbi
全部替换为下面代码: <meta http-equiv="Content-Type" content="text/html; charset=gbk">
<!-- {if $promotion_goods} -->
<script >
var Tday = new Array();
var daysms = 24 * 60 * 60 * 1000
var hoursms = 60 * 60 * 1000
var Secondms = 60 * 1000
var microsecond = 1000
var DifferHour = -1
var DifferMinute = -1
var DifferSecond = -1
function clock(key)
{
var time = new Date()
var hour = time.getHours()
var minute = time.getMinutes()
var second = time.getSeconds()
var timevalue = ""+((hour > 12) ? hour-12:hour)
timevalue +=((minute < 10) ? ":0":":")+minute
timevalue +=((second < 10) ? ":0":":")+second
timevalue +=((hour >12 ) ? " PM":" AM")
var convertHour = DifferHour
var convertMinute = DifferMinute
var convertSecond = DifferSecond
var Diffms = Tday[key].getTime() - time.getTime()
DifferHour = Math.floor(Diffms / daysms)
Diffms -= DifferHour * daysms
DifferMinute = Math.floor(Diffms / hoursms)
Diffms -= DifferMinute * hoursms
DifferSecond = Math.floor(Diffms / Secondms)
Diffms -= DifferSecond * Secondms
var dSecs = Math.floor(Diffms / microsecond)
if(convertHour != DifferHour) a="<font color=red>"+DifferHour+"</font>天";
if(convertMinute != DifferMinute) b="<font color=red>"+DifferMinute+"</font>时";
if(convertSecond != DifferSecond) c="<font color=red>"+DifferSecond+"</font>分"
d="<font color=red>"+dSecs+"</font>秒"
if (DifferHour>0) {a=a}
else {a=''}
document.getElementById("leftTime"+key).innerHTML = a + b + c + d; //显示倒计时信息
}
</script>
..............省略div布局代码...............
<!--{foreach from=$promotion_goods key=key item=goods}-->
<!--这里一定要注意 不要忘了 上面foreach里 设置了 一个 key-->
<br><font class="f4" id="leftTime{$key}">{$lang.please_waiting}</font>
...............省略div布局代码.................
<script>
Tday[{$key}] = new Date("{$goods.gmt_end_time}");
window.setInterval(function(){clock({$key});}, 1000);
</script>
<!--{/foreach}-->
</div>
</div>
<!-- {/if} -->

ecshop添加自定义导航

ecshop默认有顶部、中间和底部三种导航,如果我们想增加其他的导航怎么做呢?
工具/原料
ecsshop
方法/步骤
在languages/zh_cn/admin/navigator.php中添加一行
$_LANG['custom'] = '自定义'; 编辑admin/templates/navigator_add.htm,在第42行(根据实际情况)后面追加
<option value='custom' {$rt.item_type_coustom}>{$lang.custom}</option> 后台“系统设置”-》“自定义导航栏”-》“添加导航”在位置下拉菜单中即可看到刚才添加的“自定义”选项。 在前台模板(比如index.dwt)中通过
<!-- {foreach name=nav_top_list from=$navigator_list.custom item=nav} -->
<!-- {/foreach} -->
显示导航内容。 前台效果

ecshop怎么得到商品属性的值

ECSHop的自定义属性很是好用,但是在前台输出的时候非常麻烦,只能循环输出所有的附加商品属性,不能输出制定的某个自定义的属性,本来它用的是Smarty模板,但是到2.5之后好像是把Smarty修改很多,里面好多东西不能用了。今天给朋友改东西,随便就写了下。

      我只在商品具体信息页面(goods.php)做了这个事情,可以的话可以写到每个页面去。

修改goods.php
在 PHP代码
$smarty->assign(‘properties’, $properties['pro']);
这句前添加: PHP代码
//By Sharmy
$pros = array();
foreach($properties['pro']['商品属性'] as $k=>$pro){
$pros[$pro['name']]['specId'] = $k;
$pros[$pro['name']]['value'] = $pro['value'];
}
$smarty->assign(‘pros’, $pros);
然后在模板部分可以这样调用(例如调用自己在后台定义的"净重"的商品类别属性): XML/HTML代码
<ul><li> 净重:{$pros.净重.value}</li></ul>
接下来就可以修改它的其它页面了,最好是修改调用的function部分,例如修改lib_goods.php里的get_goods_propertiess。

ecshop增加pc扫描二维码微信支付功能代码

ecshop开发网站,如果没有手机版,又想通过微信支付,可以加入pc二维码扫描微信支付功能
工具/原料
ecshop商城系统,phpqrcode,WxPayPubHelper
公众号已申请微信支付
方法/步骤
使用PHP QR Code生成二维码,下载,在商品支付页面加入
include 'phpqrcode/phpqrcode.php';
$pay_url ='http://www.xxx.com/weixin/weixin.php?order_id='.$order['order_sn'];
QRcode::png($pay_url, 'images/image.png', 'L', 8);
echo '<img src="data:images/image.png" />';
生成一个指向微信支付的手机连接二维码,手机扫描进入 打开申请到的微信支付代码,在上面加入weixin.php
define('IN_ECS', true);
require('../includes/init.php');
require('../includes/lib_order.php');
$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;
$order = order_info(0,$order_id);
获取订单信息 手机打开页面调用代码
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>微信安全支付</title>
<script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
WeixinJSBridge.log(res.err_msg);
//alert(res.err_code+res.err_desc+res.err_msg);
}
);
}
function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
callpay();
</script>
</head>
<body>
</br></br></br></br>
</body>
</html> 代码引用WxPayPubHelper,
WxPay.pub.config.php
配置文件
class WxPayConf_pub
{
//=======【基本信息设置】=====================================
//微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看
const APPID = 'xxx';
//受理商ID,身份标识
const MCHID = 'xxx';
//商户支付密钥Key。审核通过后,在微信发送的邮件中查看
const KEY = 'xxx';
//JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看
const APPSECRET = 'xxx';
//=======【JSAPI路径设置】===================================
//获取access_token过程中的跳转uri,通过跳转将code传入jsapi支付页面
const JS_API_CALL_URL = 'http://www.xxx.com/weixin/js_api_call.php';
//=======【证书路径设置】=====================================
//证书路径,注意应该填写绝对路径
const SSLCERT_PATH = '/weixin/WxPayPubHelper/cacert/apiclient_cert.pem';
const SSLKEY_PATH = '/weixin/WxPayPubHelper/cacert/apiclient_key.pem';
//=======【异步通知url设置】===================================
//异步通知url,商户根据实际开发过程设定
const NOTIFY_URL = 'http://www.xxx.com/weixin/notify_url.php';
//=======【curl超时设置】===================================
//本例程通过curl使用HTTP POST方法,此处可修改其超时时间,默认为30秒
const CURL_TIMEOUT = 30;
}
?>
根据申请的信息填写 找到notify_url.php文件
上面添加
define('IN_ECS', true);
require('../includes/init.php');
require('../includes/lib_payment.php');
调用订单信息 notify_url.php添加支付后修改订单状态
if($notify->checkSign() == TRUE)
{
if ($notify->data["return_code"] == "FAIL") {
//此处应该更新一下订单状态,商户自行增删操作
//$log_->log_result($log_name,"【通信出错】:\n".$xml."\n");
}
elseif($notify->data["result_code"] == "FAIL"){
//此处应该更新一下订单状态,商户自行增删操作
//$log_->log_result($log_name,"【业务出错】:\n".$xml."\n");
}
else{
//此处应该更新一下订单状态,商户自行增删操作
//$log_->log_result($log_name,"【支付成功】:\n".$xml."\n");
$order = $notify->getData();
$log_id=get_order_id_by_sn($order["out_trade_no"]);
order_paid($log_id);
}
//商户自行增加处理流程,
//例如:更新订单状态
//例如:数据库操作
//例如:推送支付完成信息
} 7
更多安全信息和详细信息就不列举了

ecshop专题页面添加关键词_描述

ecshop专题页面添加关键词 描述 (红色为添加部分)

后台管理模板topic_edit.htm
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0" id="advanced-table" style="display:none;">
<tr>
<td class="label">关键词:</td>
<td ><textarea name="topic_keywords" id="topic_keywords" cols="40" rows="3">{$topic.keywords}</textarea>
</td>
</tr>
<tr>
<td class="label">描述信息:</td>
<td ><textarea name="topic_description" id="topic_description" cols="40" rows="5">{$topic.description}</textarea>
<div> <a href="javascript:chanageSize(3,'topic_description');">[+]</a> <a href="javascript:chanageSize(-3,'topic_description');">[-]</a> </div></td>
</td>
</tr>
<tr>
<td class="label"><a href="javascript:showNotice('noticeTemplateFile');" title="{$lang.form_notice}"><img src="data:images/notice.gif" width="16" height="16" border="0" alt="{$lang.form_notice}"></a>{$lang.template_file}</td>
<td ><input name="topic_template_file" type="text" id="topic_template_file" value="{$topic.template}" size="40" />
<span class="notice-span" id="noticeTemplateFile">{$lang.notice_template_file}</span></td>
</tr>
<tr>
<td class="label"><a href="javascript:showNotice('noticeCss');" title="{$lang.form_notice}"><img src="data:images/notice.gif" width="16" height="16" border="0" alt="{$lang.form_notice}"></a>{$lang.style_sheet}</td>
<td ><textarea name="topic_css" id="topic_css" cols="40" rows="5">{$topic.css}</textarea>
<span class="notice-span" id="noticeCss">{$lang.notice_css}</span>
<div> <a href="javascript:chanageSize(3,'topic_css');">[+]</a> <a href="javascript:chanageSize(-3,'topic_css');">[-]</a> </div></td>
</tr>
</table>
后台管理PHP文件topic.php
//echo $data;
//exit;
if ($is_insert)
{
$sql = "INSERT INTO " . $ecs->table('topic') . " (title,start_time,end_time,data,intro,template,css,keywords,description)" .
"VALUES ('$_POST[topic_name]','$start_time','$end_time','$data','$_POST[topic_intro]','$_POST[topic_template_file]','$_POST[topic_css]','$_POST[topic_keywords]','$_POST[topic_description]')";
}
else
{
$sql = "UPDATE " . $ecs->table('topic') .
"SET title='$_POST[topic_name]',start_time='$start_time',end_time='$end_time',data='$data',intro='$_POST[topic_intro]',template='$_POST[topic_template_file]',css='$_POST[topic_css]',keywords='$_POST[topic_keywords]',description='$_POST[topic_description]'" .
" WHERE topic_id='$topic_id' LIMIT 1";
} 数据库 _topic 根目录topic.php中找到“/* 模板赋值 */”在下面添加如下代码
$smarty->assign('keywords', htmlspecialchars($topic['keywords']));
$smarty->assign('description', htmlspecialchars($topic['description']));

分级显示会员价格

<!-- {foreach from=$rank_prices item=rank_price key=key} 会员等级对应的价格-->
<!-- {if $key eq $smarty.session.user_rank} -->
{$rank_price.rank_name}:</strong>
<span class="vip">{$rank_price.price}</span> <!-- {/if} -->
<!--{/foreach}-->

分析ecshop中ur_here.lbi的原理

cshop中,ur_here.lbi都是用来处理ecshop系统导航的.ecshop导航的所有规则,都是通过他来处理的。 ecshop中的导航栏目,都是通过id或者是url规则,来动态生成的。而ecshop模板中的ur_here.lb

    ecshop中,ur_here.lbi都是用来处理ecshop系统导航的.ecshop导航的所有规则,都是通过他来处理的。
 ecshop中的导航栏目,都是通过id或者是url规则,来动态生成的。而ecshop模板中的ur_here.lbi就是负责来显示该操作栏目的.
 打开includes/lib_main.php中的assign_ur_here(). $page_title = $GLOBALS['_CFG']['shop_title'] . ' - ' . 'Powered by ECShop';是用来处理ecshop页面标题的,而$ur_here = '<a href=".">' . $GLOBALS['_LANG']['home'] . '</a>';却是用来处理操作栏目的。
  $cur_url = basename(PHP_SELF);
if (intval($GLOBALS['_CFG']['rewrite']))
{
$filename = strpos($cur_url,'-') ? substr($cur_url, 0, strpos($cur_url,'-')) : substr($cur_url, 0, -4);
}
else
{
$filename = substr($cur_url, 0, -4);
}
 作用是来取得文件名称的前缀的。比如index.php.则返回index.而通过他,可以取得对应语言好里面的语言文字信息,也可以灵活对他的url进行处理.如果是有分类的,他可以循环的读出他子类的url.
if (!empty($cat_arr))
{
krsort($cat_arr);
foreach ($cat_arr AS $val)
{
$page_title = htmlspecialchars($val['cat_name']) . '_' . $page_title;
$args = array($key => $val['cat_id']);
$ur_here .= ' <code>&gt;</code> <a href="' . build_uri($type, $args, $val['cat_name']) . '">' .
htmlspecialchars($val['cat_name']) . '</a>';
}
}

模板引擎实例

比如 程序里面引用的最新商品模块 对应的库文件是:recomment_new.lbi
在php文件中 通过smarty赋值 new_goods 后 在 对于的模板文件中 只需要应用对应的值即可
这是最新商品的 库文件 其实 我们去掉 div标签后 还原最简单的代码
{foreach from=$new_goods item=goods}
{$goods.url} ======== 商品的链接
{$goods.thumb} ======== 商品的缩略图
{$goods.short_style_name} ======== 商品的名称
{$goods.promote_price} ======== 商品促销价格
{$goods.shop_price} ======== 商品正式销售价格
{/foreach}
其实 简化的smarty模板引擎 比较简单 具体的 可以参考 smarty手册

判断用户是否登录

<!--如果会员登陆了{if $smarty.session.user_name}--

<!--{/if}-->

限定名称长度

truncate:10

在 ecshop 首页调用分类下面的商品属性

在index.php中添加
$smarty->assign('filter_attr_list', filter_attr_list(2,'')); //2为大分类ID function filter_attr_list($cat_id,$filter_attr='')
{
$cat = get_cat_info($cat_id);
$cat_id=$cat[cat_id];
$children = get_children($cat_id);
// $cat['filter_attr']=$filter_attr; ouyangyong
$cat_filter_attr = explode(',', $cat['filter_attr']); //提取出此分类的筛选属性
$all_attr_list = array(); foreach ($cat_filter_attr AS $key => $value)
{ $sql = "SELECT a.attr_name,a.attr_id FROM " . $GLOBALS['ecs']->table('attribute') . " AS a, " .
$GLOBALS['ecs']->table('goods_attr') . " AS ga, " .
$GLOBALS['ecs']->table('goods') . " AS g WHERE ($children OR " . get_extension_goods($children) . ") AND a.attr_id = ga.attr_id AND g.goods_id = ga.goods_id AND g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND a.attr_id='$value'";
if($temp_name = $GLOBALS['db']->getRow($sql))
{
$all_attr_list[$key]['filter_attr_name'] = $temp_name['attr_name'];
$all_attr_list[$key]['filter_attr_id'] = $temp_name['attr_id']; $sql = "SELECT a.attr_id, MIN(a.goods_attr_id ) AS goods_id, a.attr_value AS attr_value FROM " . $GLOBALS['ecs']->table('goods_attr') . " AS a, " . $GLOBALS['ecs']->table('goods') .
" AS g" .
" WHERE ($children OR " . get_extension_goods($children) . ') AND g.goods_id = a.goods_id AND g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 '.
" AND a.attr_id='$value' ".
" GROUP BY a.attr_value"; $attr_list = $GLOBALS['db']->getAll($sql);
$temp_arrt_url_arrcc = array(); for ($i = 0; $i < count($cat_filter_attr); $i++) //获取当前url中已选择属性的值,并保留在数组中
{
$temp_arrt_url_arrc[$i] = 0;
} $temp_arrt_url_arrc[$key] = 0; //“全部”的信息生成
$temp_arrt_url = implode('.', $temp_arrt_url_arrc);
$all_attr_list[$key]['attr_list'][0]['attr_value'] = '全部'; //$_LANG['all_attribute'];
$all_attr_list[$key]['attr_list'][0]['url'] = build_uri('category', array('cid'=>$cat_id, 'bid'=>$brand, 'price_min'=>$price_min, 'price_max'=>$price_max, 'filter_attr'=>$temp_arrt_url), $cat['cat_name']);
$all_attr_list[$key]['attr_list'][0]['selected'] = empty($filter_attr[$key]) ? 1 : 0; foreach ($attr_list as $k => $v)
{
$temp_key = $k + 1;
$temp_arrt_url_arrc[$key] = $v['goods_id']; //为url中代表当前筛选属性的位置变量赋值,并生成以‘.’分隔的筛选属性字符串
$temp_arrt_url = implode('.', $temp_arrt_url_arrc); $all_attr_list[$key]['attr_list'][$temp_key]['attr_value'] = $v['attr_value'];
$all_attr_list[$key]['attr_list'][$temp_key]['url'] = build_uri('category', array('cid'=>$cat_id, 'bid'=>$brand, 'price_min'=>$price_min, 'price_max'=>$price_max, 'filter_attr'=>$temp_arrt_url), $cat['cat_name']); if (!empty($filter_attr[$key]) AND $filter_attr[$key] == $v['goods_id'])
{
$all_attr_list[$key]['attr_list'][$temp_key]['selected'] = 1;
}
else
{
$all_attr_list[$key]['attr_list'][$temp_key]['selected'] = 0;
}
}
} }
return $all_attr_list;
} 在index.dwt相应的位置添加。 <!--组合搜索 开始-->
<!--{if $brands.1 || $price_grade.1 || $filter_attr_list}-->
<div><img src="data:images/artt_top1.gif"></div>
<div class="indexscreeBox">
<ul>
<!--{foreach from=$filter_attr_list item=filter_attr}-->
<li> <strong>{$filter_attr.filter_attr_name|escape:html}:</strong>
<!--{foreach from=$filter_attr.attr_list item=attr}-->
<!-- {if $attr.selected} -->
<span>{$attr.attr_value}</span>
<!-- {else} -->
<a href="{$attr.url}">{$attr.attr_value}</a>
<!-- {/if} -->
<!--{/foreach}-->
<div class="clear"></div>
</li>
<!--{/foreach}-->
</ul>
</div>
<div><img src="data:images/artt_bottom1.gif"></div>
<div class="blank5"></div>
<!-- {/if} -->
<!--组合搜索 结束--> 效果。

foreach

{foreach},{foreachelse} {foreach} 用于像循环访问一个数字索引数组一样循环访问一个关联数组,与仅能访问数字索引数组的{section}不同,{foreach}的语法比 {section}的语法简单得多,但是作为一个折衷方案也仅能用于单个数组。每个{foreach}标记必须与关闭标记{/foreach}成对出现。 属性 1、from 类型:array数组 必要性:Yes必要 默认值:n/a 描述:循环访问的数组 2、item 类型:string字符串 必要性:Yes必要 默认值:n/a 描述:当前元素的变量名 3、key 类型:string字符串 必要性:No可选 默认值:n/a 描述:当前键名的变量名 4、name 类型:string字符串 必要性:No可选 默认值:n/a 描述:用于访问foreach属性的foreach循环的名称 from 和item是必要属性 {foreach}循环的name可以是任何字母,数组,下划线的组合,参考PHP变量。 {foreach}循环可以嵌套,嵌套的{foreach}的名称应当互不相同。 from属性通常是值数组,被用于判断{foreach}的循环次数。 在from 变量中没有值时,将执行{foreachelse}。 {foreach}循环也有自身属性的变量,可以通过 {$smarty.foreach.name.property}访问,其中"name"是name属性。 注意:name属性仅在需要访问 {foreach}属性时有效,与{section}不同。访问未定义name的{foreach}属性不会抛出一个错误,但将导致不可预知的结果。 {foreach} 属性有index, iteration, first, last, show, total. 示例: 例一. item属性 assign('myArray', $arr); ?> 用模板以无序列表输出$myArray

{foreach from=$myArray item=foo}
{$foo}
{/foreach}
上例将输出: 1000
1001
1002
例二. 演示item和key属性 'Tennis', 3 => 'Swimming', 8 => 'Coding'); $smarty->assign('myArray', $arr); ?> 用模板按键名/键值对的形式输出$myArray, 类似于PHP的foreach。 {foreach from=$myArray key=k item=v}
{$k}: {$v}
{/foreach}
上例将输出: 9: Tennis
3: Swimming
8: Coding
例三. {foreach}的item属性是关联数组 array('no' => 2456, 'label' => 'Salad'), 96 => array('no' => 4889, 'label' => 'Cream') ); $smarty->assign('items', $items_list); ?> 模板中,url通过$myId输出$items {foreach from=$items key=myId item=i}
{$i.no}: {$i.label}
{/foreach}
上例将输出: 2456: Salad
4889: Cream
例四. {foreach}使用嵌套的item和key 向Smarty 设置一个数组,对于每个键名对应的每个循环值都包括键。 assign('contacts', array( array('phone' => '1', 'fax' => '2', 'cell' => '3'), array('phone' => '555-4444', 'fax' => '555-3333', 'cell' => '760-1234') )); ?> 用于输出$contact的模板。 {foreach name=outer item=contact from=$contacts} {foreach key=key item=item from=$contact} {$key}: {$item}
{/foreach} {/foreach} 上例将输出: phone: 1
fax: 2
cell: 3 phone: 555-4444
fax: 555-3333
cell: 760-1234
例五. 使用{foreachelse}的数据库示例 一个数据库(例如PEAR或ADODB)的搜索脚本示例, assign('results', $db->getAssoc($sql) ); ?> 借助{foreachelse}标记在没有结果时模板输出"None found"字样。 {foreach key=cid item=con from=$results} {$con.name} - {$con.nick}
{foreachelse} No items were found in the search {/foreach} .index包含当前数组索引,从零开始。 例六. index示例 {* 每五行输出一次头部区块 *} {foreach from=$items key=myId item=i name=foo} {if $smarty.foreach.foo.index % 5 == 0} {/if} {/foreach}
Title
{$i.label}
iteration包含当前循环次数,与index不同,从1开始,每次循环增长1。 例七. iteration和index示例 {* this will output 0|1, 1|2, 2|3, ... etc *} {* 该例将输出0|1, 1|2, 2|3, ... 等等 *} {foreach from=$myArray item=i name=foo} {$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration}, {/foreach} first在当前{foreach}循环处于初始位置时值为TRUE。 例八. first属性示例 {* 对于第一个条目显示LATEST而不是id *} {foreach from=$items key=myId item=i name=foo} {/foreach}
{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if} {$i.label}
last在当前{foreach}循环处于最终位置是值为TRUE。 例九. last属性示例 {* 在列表结束时增加一个水平标记 *}) {foreach from=$items key=part_id item=prod name=products} {$prod} {if $smarty.foreach.products.last} {else},{/if} {foreachelse} ... content ... {/foreach} show是{foreach}的参数. show是一个布尔值。如果值为FALSE,{foreach}将不被显示。如果有对应的{foreachelse},将被显示。 total包括 {foreach}将循环的次数,既可以在{foreach}中使用,也可以在之后使用。 例十. total属性示例 {* 在结束位置显示行数 *} {foreach from=$items key=part_id item=prod name=foo} {$prod.name> {if $smarty.foreach.foo.last} {$smarty.foreach.foo.total} items
{/if} {foreachelse} ... something else ... {/foreach} 问题 {foreach from=$custid item=curr_id key=num} {if num is odd} 干啥 {else} 干其他的 {/if} {/foreach} 与以下的代码的区别,odd和enen的意义? {foreach from=$custid item=curr_id key=num} {if num%2==0} 干啥 {else} 干其他的 {/if} {/foreach}

onclick

onclick="this.className='current'"

ECSHOP商品属性,商品分类,商品类型,商品筛选,商品描述,商品图片,商品列表,商品管理使用教程

文章标题

教程类别

添加日期

浏览量

ECSHOP商品批量导出,ECSHOP商品数据包制作导出

ECSHOP使用教程

2013-10-26

2892

ECSHOP商品图片批量处理,ECSHOP商品缩略图片模糊处理教程

ECSHOP使用教程

2013-10-26

2496

ECSHOP虚拟商品,ECSHOP商品虚拟卡

ECSHOP使用教程

2013-10-26

1912

ECSHOP标签列表,ECSHOP商品标签管理

ECSHOP使用教程

2013-10-26

2097

ECSHOP商品品牌,ECSHOP商品品牌图片添加设置

ECSHOP使用教程

2013-10-26

2230

ECSHOP添加新商品,ECSHOP商品描述

ECSHOP使用教程

2013-10-26

3754

ECSHOP商品分类,ECSHOP商品分类编辑

ECSHOP使用教程

2013-10-26

3244

ECSHOP商品属性,ECSHOP商品属性筛选

ECSHOP使用教程

2013-10-26

4068

ECSHOP商品类型,ECSHOP商品属性类型

ECSHOP使用教程

2013-10-26

2768

ECSHOP商品批量上传,ECSHOP商品数据包导入

ECSHOP使用教程

2013-10-26

6990

ECSHOP商品自动上下架,ECSHOP商品批量下架上架

ECSHOP使用教程

2013-10-26

2591

ECSHOP更改加密串,ECSHOP商品虚拟卡加密串

ECSHOP使用教程

2013-10-25

1639

ECSHOP生成商品代码,ECSHOP商品推广代码

ECSHOP使用教程

2013-10-25

1656

ECSHOP商品批量修改,ECSHOP商品描述修改

ECSHOP使用教程

2013-10-25

2012

ECSHOP商品回收站,ECSHOP商品批量删除

ECSHOP使用教程

2013-10-25

3778

ECSHOP用户评论,ECSHOP商品用户评论

ECSHOP使用教程

2013-10-25

2528

ECSHOP商品列表,ECSHOP后台商品列表管理

ECSHOP使用教程

2013-10-25

1910

EcShop开发手册的更多相关文章

  1. ecshop在线手册前言及程序结构

    该在线手册是有模版堂转载而来:仅供参考 一.前言 为什么我们ecshop模板堂要重制ecshop在线手册呢?因为目前网上的一些教程有些是比较老的,有些是不全面的,官方的手册也已经很久没有更 新,很多刚 ...

  2. Net力软快速信息化系统开发框架 + 开发手册+数据库说明

    源码目录结构说明LeaRun.Cache –缓存层LeaRun.Resource –本地语言LeaRun.Utilities –公共类库LeaRun.DataAccess –数据库访问核心组件LeaR ...

  3. 在线教学、视频会议 Webus Fox(2) 服务端开发手册

    上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...

  4. 在线教学、视频会议 Webus Fox(3) 客户端开发手册

    本文主要介绍webus fox 客户端的配置及接口说明. 1. 文件列表和配置 1.1 文件列表 1.2 common.xml 配置 根据服务器端的部署, 替换[ServerUrl] , [RtmpP ...

  5. Navi.Soft30.开放平台.聚合.开发手册

    1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...

  6. Navi.Soft30.开放平台.腾讯.开发手册

    1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...

  7. Navi.Soft30.开放平台.百度.开发手册

    1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...

  8. Navi.Soft30.框架.WinForm.开发手册

    阅读导航 Navi.Soft30.Core类库.开发手册 http://www.cnblogs.com/xiyang1011/p/5709489.html Navi.Soft30.框架.WinForm ...

  9. Discuz!开发手册

    如何使用Discuz开发手册? 1.首先建议你了解Discuz目录结构-全局篇 通过对目录结构的了解,会在以后的创作道路上提供坚实的基础! 2.你还需要了解Discuz! X3.1数据字典 3.创建自 ...

随机推荐

  1. etcd单节点数据备份与恢复

    插入测试数据 # etcdctl put smith # etcdctl put allen # etcdctl put ward # etcdctl put jones # etcdctl put ...

  2. Axios 的基本使用

    Axios 是一个基于 promise 的HTTP 库, 可以用在浏览器和 node.js 中. 1. 从浏览器创建 XMLHttpRequests 2. 从node.js 创建 http 请求 3. ...

  3. springboot2.0自适应效果错误响应

    实现效果当访问thymeleaf渲染页面时,显示的是自定义的错误页面 当以接口方式访问时,显示的是自定义的json数据响应 1. 编写自定义异常 package cn.jfjb.crud.except ...

  4. Android热修复、插件化、组件化

    模块化:项目按照独立的模块进行划分 组件化:将项目按照单一的组件来进行划分结构 项目组件化的重要环节在于,将项目按照模块来进行拆分,拆分成一个个业务module和其他支撑module(lib),各个业 ...

  5. P4304 [TJOI2013]攻击装置

    传送门 看到棋盘先黑白染色冷静一下 然后发现...攻击的时候同种颜色不会相互攻击 这样就是个网络流经典套路了,关于这个套路我以前好像写过几题,那边有解释一下:传送门 #include<iostr ...

  6. 30分钟Maven入门到精通

    Maven是近年来最流行的项目构建与管理工具.不仅简化了我们开发过程中对jar包依赖的导入,还对项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等所有构建过程进行了抽象和统一,方便 ...

  7. yii报错yii\web\Request::cookieValidationKey must be configured with a secret key.

    在config文件下main-local.php配置 'cookieValidationKey' => 'rabbit1234',

  8. 一、bif

    缩进是python的灵魂,缩进可以使python的代码整洁,有层次. python是脚本语言,就是为了简单方便以辅助科学运算,因此python有许多bif,build in function 全部都是 ...

  9. linux命令详解——ln

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当我们需要在不同的目录,用到相同的 ...

  10. Delphi 标识符