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; //20130305 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="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="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> 最后完成了购买数量的控制。
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} -->
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="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="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\']));
分级显示会员价格
<!-- {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>></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="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} --> <!--组合搜索 结束--> 效果。
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商品属性,商品分类,商品类型,商品筛选,商品描述,商品图片,商品列表,商品管理使用教程
|
文章标题 |
教程类别 |
添加日期 |
浏览量 |
|
2013-10-26 |
2892 |
||
|
2013-10-26 |
2496 |
||
|
2013-10-26 |
1912 |
||
|
2013-10-26 |
2097 |
||
|
2013-10-26 |
2230 |
||
|
2013-10-26 |
3754 |
||
|
2013-10-26 |
3244 |
||
|
2013-10-26 |
4068 |
||
|
2013-10-26 |
2768 |
||
|
2013-10-26 |
6990 |
||
|
2013-10-26 |
2591 |
||
|
2013-10-25 |
1639 |
||
|
2013-10-25 |
1656 |
||
|
2013-10-25 |
2012 |
||
|
2013-10-25 |
3778 |
||
|
2013-10-25 |
2528 |
||
|
2013-10-25 |
1910 |