zoukankan      html  css  js  c++  java
  • EcShop开发手册

    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 的目录
    View Code

    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的心情
    View Code

    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中的代码中就行了。
    
    到此,大功告成!!
    View Code

    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=”90%;height:300px;”>
    {$goods.goods_desc}
    </textarea>
    
    OK,至此结束,看看效果吧!
    View Code

    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'";
            
        }
    View Code

    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;
    }
    ?>
    View Code

    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;  //20130305
        return $sNewFileName ;
    }
    View Code

    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="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} -->
    View Code

    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="images/but_buy.jpg"></a>
       <a href="javascript:;" id="compareLink"quotes"}','{$goods.type}')"><img src="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="images/but_buy.jpg"></a></form>
    最后完成了购买数量的控制。
    View Code

    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="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} -->
    View Code

    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} -->
    View Code

    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} -->
    显示导航内容。
    
    前台效果
    View Code

    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。
    View Code

    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="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,"【通信出错】:
    ".$xml."
    ");
    }
    elseif($notify->data["result_code"] == "FAIL"){
    //此处应该更新一下订单状态,商户自行增删操作
    //$log_->log_result($log_name,"【业务出错】:
    ".$xml."
    ");
    }
    else{
    //此处应该更新一下订单状态,商户自行增删操作
    //$log_->log_result($log_name,"【支付成功】:
    ".$xml."
    ");
    $order = $notify->getData();
    $log_id=get_order_id_by_sn($order["out_trade_no"]);
    order_paid($log_id);
    }
    //商户自行增加处理流程,
    //例如:更新订单状态
    //例如:数据库操作
    //例如:推送支付完成信息
    }
    
    7
    更多安全信息和详细信息就不列举了
    View Code

    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="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="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']));
     
     
     
     
     
    View Code

    分级显示会员价格

    <!-- {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}-->
    View Code

    分析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>';
                    }
                }
    View Code

    模板引擎实例

    比如 程序里面引用的最新商品模块 对应的库文件是: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手册
    View Code

    判断用户是否登录

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

    限定名称长度

    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="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="images/artt_bottom1.gif"></div>
    <div class="blank5"></div>
    <!-- {/if} --> 
    <!--组合搜索 结束--> 
    
    
    效果。
    View Code

    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}
    View Code

    onclick

    onclick="this.className='current'"
    View Code

    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

  • 相关阅读:
    裁剪圆形图片原理
    Scrollview回弹效果自定义控件
    Android热修复、插件化、组件化
    Android 6.0权限
    Android如何缩减APK包大小
    Android MVP理解
    Mat转化为IplImage类型的方法
    【QT】Qaction和触发函数建立连接的方法
    【QT】【OpenCv】初始配置以及测试功能
    【MATLAB】画信号频谱的子函数
  • 原文地址:https://www.cnblogs.com/blogpro/p/11464830.html
Copyright © 2011-2022 走看看