ecshop二次开发拍卖活动列表显示
- 格式:doc
- 大小:15.50 KB
- 文档页数:2
ecshop电子商务系统,不论是哪个版本,为了符合电子商务的发展需要,都存在促销功能里面的优惠活动,以前我们谈论了ecshop优惠活动的设置.今天我们分析ecshop二次开发折扣功能.针对的是lib_order.php文件中的compute_discount()函数而言ecshop折扣功能的计算,发生在购物车中.flow.php,你点进入购物车的时候,如果购买的商品在折扣或者是优惠的范围之内,我们将通lib_order.php文件中的函数compute_discount()进行折扣计算.通过favourable_activity表,把活动给检索出来.$favourable_list = $GLOBALS['db']->getAll($sql);如果为空,那么将返回false.表示没有折扣活动。
$sql = "SELECT c.goods_id, c.goods_price * c.goods_number AS subtotal, g.cat_id, g.brand_id " ."FROM " .$GLOBALS['ecs']->table('cart') . " AS c, " . $GLOBALS['ecs']->table('goods') . " AS g " . "WHERE c.goods_id = g.goods_id " . "AND c.session_id = '" .SESS_ID . "' " . "AND c.parent_id = 0 " . "AND c.is_gift = 0 " . "AND rec_type = '" . CART_GENERAL_GOODS . "'";,通过该查询,把ecshop购物车中的商品的折扣给计算出来.在折扣的方式里面,商品优惠方式有全部商品优惠FAR_ALL.某个指定的分类优惠FAR_CATEGORY,指定的某个优惠FAR_BRAND,而折扣的方式有两种.先说第一种优惠,看以下ecshop优惠代码。
ecshop的拍卖功能是ecshop提倡一大促销的主打功能,这个要求必须非常高,本程序为了调整ecshop列表页面活动倒计时和ecshop参与人数显示功能,给ecshop增色不少.1:auction.php的auction_list函数$sql = "SELECT a.*, IFNULL(g.goods_thumb, '') AS goods_thumb " ."FROM " . $GLOBALS['ecs']->table('goods_activity') . " AS a " ."LEFT JOIN " . $GLOBALS['ecs']->table('goods') . " AS g ON a.goods_id = g.goods_id " ."WHERE a.act_type = '" . GAT_AUCTION . "' " ."AND a.start_time <= '$now' AND a.end_time >= '$now' AND a.is_finished < 2 ORDER BY a.act_id DESC";同时修改该函数function auction_count(){$now = gmtime();$sql = "SELECT COUNT(*) " ."FROM " . $GLOBALS['ecs']->table('goods_activity') ."WHERE act_type = '" . GAT_AUCTION . "' " ."AND start_time <= '$now' AND end_time >= '$now' AND is_finished < 2";return $GLOBALS['db']->getOne($sql);}2:admin\auction.php的function auction_list()$info = auction_info($row[act_id]);$arr['bid_user_count'] = $info['bid_user_count'];3:admin\templates\auction_list.htm<td align="right">{$auction.bid_user_count}</td>4:includes/lib_goods.phpfunction get_top10($cats = '')去掉if ($GLOBALS['_CFG']['use_storage'] == 1){$sql .= " AND g.goods_number > 0 ";}5:auction_list.dwt<select name="sort"><option value="start_time">开始时间</option><option value="end_time">结束时间</option></select>6:auction.php的list中增加以下$sort = isset($_REQUEST['sort'])&&($_REQUEST['sort'])?$_REQUEST['sort']:'act_ id';6:auction.phpfunction auction_list($size, $page,$sort = ''){if($sort){$sort_string = ' order by a.'.$sort." asc";}$auction_list = array();$auction_list['finished'] = $auction_list['finished'] = array();$now = gmtime();$sql = "SELECT a.*, IFNULL(g.goods_thumb, '') AS goods_thumb " . "FROM " . $GLOBALS['ecs']->table('goods_activity') . " AS a " ."LEFT JOIN " . $GLOBALS['ecs']->table('goods') . " AS g ON a.goods_id = g.goods_id " ."WHERE a.act_type = '" . GAT_AUCTION . "' " ."AND a.start_time <= '$now' AND a.end_time >= '$now' AND a.is_finished < 2 $sort_string";8:auction.php的list$pager = get_pager('auction.php', array('act' => 'list','sort'=>$sort), $count, $page, $size);9:调用参与拍卖数量$info = auction_info($row[act_id]);$auction['bid_user_count'] = $info['bid_user_count'];10:auction_list.dwt参与人数:{$auction.bid_user_count}11:auction.php的auction_list()中增加倒计时$auction['auction_end_time'] =local_date('Y/m/d H:i', $auction['end_time']);$auction['act_id'] = $auction['act_id'];。
模板目录与初始文件模路径与文件在开始制作之前,我们先来了解下SHOP的模板路径与文件SHOP的模板文件与皮肤放置在不同的目录下模板存放在./templates目录下皮肤存放在./skin目录下下面针对默认模板做一下结构说明默认模板存放在./templates/default目录下1、模块文件,文件夹中存放着可重复调用文件、模块,一般有头部、底部、侧栏等2、框架文件,功能的整体框架页面对应的默认风格存放在./skin/default目录下1、文件夹中存放对应模板方案的图片、样式表、JS等文件初始文件新建立一套模板的方法,复制一份默认模板方案与默认风格文件夹,放在相应的目录,给新模板起一个名字,把两个文件夹同时更改成该名称。
或者直接在./templates与./skin建立空的文件夹,然后把做好的html 页面按照iweb_sns 模板命名规则命名并存放到模板目录。
登陆后台→全局设置→模板管理,找到你刚才建立的新模板选择应用模板,这样你就可以启用新的风格了建立框架、划分结构以默认模板为例子下面是首页设计好的效果图,我们来做一下区域划分,与常规的制作一样,成静态页面后把公共的部分分离出来,常见的有头部、底部与侧栏,引用他们到框架,用这样的语句{inc: include("shop/独立出来的文件名");/}我们可以根据上面的划分,规划出简单的布局框架如下:{inc: include("shop/header.html");/}<div class=”main”><div class=”focus”></div><div class=”sidebar”></div><div class=”content”></div></div>{inc: include("shop/footer.html);/}这段代码放置于index.html,调用了头部文件header.html与底部文件footer.html。
ECSHOP 模板结构说明(适用版本v2.1.5+)名称类型备注(作用或意义)文件(目录)名可否更改images 目录存放模板图片目录不可更改library 目录存放模板库文件目录不可更改screenshot.png 图片用于“后台管理-> 模板管理-> 模板选择”显示模板缩略图。
不可更改style.css css样式表不可更改备注:模板文件共32个(格式:.dwt)。
提醒:1, 更改模板文件里面库文件的内容是无效的,页面刷新时,程序自动重新载入库文件内容到模板文件里(以库文件内容为准)。
2, 模板内所有id值为ECS_ 开头的都必须保留(和ajax相关)。
3, 非库文件内容不可放置到可编辑区域内,否则设置模板时,非库文件内容将被覆盖删除。
activity.dwt 模板文件活动列表页不可更改article.dwt 模板文件文章内容页不可更改article_cat.dwt 模板文件文章列表页不可更改article_pro.dwt 模板文件文章内容页(如免责声明等) 不可更改auction.dwt 模板文件拍卖商品详情页不可更改auction_list.dwt 模板文件拍卖商品页不可更改brand.dwt 模板文件商品品牌页不可更改brand_list.dwt 模板文件商品品牌列表页不可更改catalog.dwt 模板文件所有分类页不可更改category.dwt 模板文件商品列表页不可更改compare.dwt 模板文件商品比较页不可更改flow.dwt 模板文件购物车和购物流程页不可更改gallery.dwt 模板文件商品相册页不可更改goods.dwt 模板文件商品详情页不可更改group_buy_goods.dwt 模板文件团购商品详情页不可更改group_buy_list.dwt 模板文件团购商品列表页不可更改index.dwt 模板文件首页不可更改message.dwt 模板文件信息提示页不可更改message_board.dwt 模板文件留言板页不可更改myship.dwt 模板文件我的配送页不可更改pick_out.dwt 模板文件选购中心页不可更改quotation.dwt 模板文件报价单页不可更改receive.dwt 模板文件收货确认信息页不可更改respond.dwt 模板文件在线支付结果提示信息页不可更改search.dwt 模板文件商品搜索页不可更改snatch.dwt 模板文件夺宝奇兵页不可更改tag_cloud.dwt 模板文件标签云页不可更改topic.dwt 模板文件专题前台页不可更改user_clips.dwt 模板文件用户中心页(包含:欢迎页,我的留言,我的标签,收藏商品,缺货登记列表,添加缺货登记。
在ECSHOP会员中心实现物流跟踪或包裹跟踪(非jquery版)前些日子,本站已经发表过一篇讲述“在ECSHOP会员中心集成物流跟踪或快递跟踪功能”的文章,不过以前那个方法用到了 jquery 。
今日公布的这个教程是不用JQUERY的方法。
下面是具体的修改教程:1)、首先下载物流跟踪插件 ecshop_express.rar,点击这里下载将它下载到你网站根目录的 plugins 子目录中,然后右键点击 ecshop_express.rar 文件,选择 "解压到 ecshop_express " ,解压后 ecshop_express 子目录下应该只存在两个文件: express.php 、snoopy.php2)、以下修改是以官方默认模板为例,其他模板本文不做讲解,请自行对照解决。
打开 /themes/default/user_transaction.dwt 文件将{$order.invoice_no}修改为<b id="shipping_name">{$order.shipping_name}</b> <bid="invoice_no">{$order.invoice_no|strip_tags}</b>接着,将<!--{if $order.to_buyer}-->修改为至此,大功告成,是不是比那个使用JQUERY的方法还简单。
到后台订单里发布一个运单号去看一下效果吧,下面是我在自己网站测试的效果在Ecshop商品详情页的本店售价中显示当前登录会员的等级价格问题描述:会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格,在未登录状态下,则还默认显示原来的本店售价。
解决方法:这个需要修改ECSHOP程序代码来实现。
其实也非常简单,只需要修改一行代码即可。
Ecshop二次开发教程Ecshop二次开发教程如上所示1:如何统计ecshop商品在订单中出现的次数回答:$count=$db->getOne("select sum(goods_number)from".$ecs->table('order_goods')."where goods_id='$goods[goods_id]'");2:如何用js去验证手机号码.回答:var reg=/^[1]([3][0-9]{1}|50|53|59|58|56|86|80|89|87|88|85|86|55|51|52|57)[0-9]{8}$/; 3:ecshop中如何取得每个月的1号时间?回答:local_mktime(0,0,0,date("m"),0,date("Y"));使用ecshop的local_mktime函数. 4:ecshop如何直接关闭窗口而不弹出提示回答:5:如何统计ecshop某商品下被审核过的评论数量。
回答:$ccount=$db->getOne("select count(*)cc from".$ecs->table('comment')."where id_value='$goods_id'and comment_type='0'and status='1'and parent_id='0'");6:ecshop中js如何将时间格式互转回答:date1=new Date();var b=Date.UTC(date1.getYear(),date1.getMonth()+1,date1.getDate(),0,0,0)time1=frm.elements['best_time'].value;y=time1.substring(0,4);m=time1.substring(5,7);d=time1.substring(8,10);var b2=Date.UTC(y,m,d,0,0,0)8:如何解析ecshop flash的xml回答:$str=@file_get_contents("data/flash_data.xml");if($str){preg_match_all("/item_url=\"(.*?)\"/",$str,$url);preg_match_all("/text=\"(.*?)\"/",$str,$text);preg_match_all("/link=\"(.*?)\"/",$str,$link);$ar_flash=array();if(sizeof($url[1])){for($i=0;$i<sizeof($url[1]);$i++){$ar_flash[$i]['url']=$url[1][$i];$ar_flash[$i]['text']=$text[1][$i];$ar_flash[$i]['link']=$link[1][$i];}$smarty->assign('ar_flash',$ar_flash);}}9:ecshop中如何正则提取中文回答:preg_match("/[".chr(0xa1)."-".chr(0xff)."]+/",ecs_iconv("UTF-8","GBK",$v['brand_name']),$cn); 10:ecshop如何取得订单中所属区域$p=$GLOBALS['db']->getOne("select region_name from".$GLOBALS['ecs']->table('region')." where region_id='".$re1['province']."'");$c=$GLOBALS['db']->getOne("select region_name from".$GLOBALS['ecs']->table('region')." where region_id='".$re1['city']."'");$d=$GLOBALS['db']->getOne("select region_name from".$GLOBALS['ecs']->table('region')." where region_id='".$re1['district']."'");11:ecshop中如何分别提取中文和英文回答:utf下面$pregstr="/[\x{4e00}-\x{9fa5}]+/u";preg_match($pregstr,$v['brand_name'],$ch);gbk下面$strtest=“yyg中文字符yyg”;$pregstr="/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i";if(preg_match($pregstr,$strtest,$matchArray)){echo$matchArray[0];}。
Ecshop子分类显示小图标实现方法近期ecshop二次开发项目中,客户要求在大、小分类上,能在后台指定是否热销或精品,类似于商品显示一样,只不过这次的对象是在导航上。
仔细分析了下后台,发现和自定义url和自定义标题一样,只要在数据库添加一个字段,用于存储用户的操作,然后调用时再根据数据判断即可。
下面优站网络小编我就来道道我实现的方法,首先当然是先运行一下sql语句了,运行下面这句即可,新手请备份原数据库后再操作。
ALTER TABLE ecs_category ADD nav_recommend char(255) NOT NULL DEFAULT ''; ALTER TABLE ecs_category ADD nav_display int(10) NOT NULL DEFAULT '1';注意表前缀哦,不然运行会失败的。
然后打开根目录:Admin/category.phpAdmin/templets/category_info.dwt进行相应的修改,1.在Category.php中288行左右添加一句:// 添加自定义栏目热销判定2013年6月25日mode by $cat['nav_recommend'] = !empty($_POST['nav_recommend'])? trim($_POST['nav_recommend']) : '';$cat['nav_display'] = !empty($_POST['nav_display'])? trim($_POST['nav_display']) : '';2.在category_info.dwt中添加一句:<tr><td class="label" style="color:#f00;">小图标显示</td><td><input name="nav_recommend" type="radio" value="best" size="40" />精品<input name="nav_recommend" type="radio" value="hot" size="40" />热销<input name="nav_recommend" type="radio" value="promotion" size="40" />促销<input name="nav_recommend" type="radio" value="" size="40" />不显示</td></tr><tr><td class="label" style="color:#f00;">子菜单显示</td><td><input name="nav_display" type="radio" value="1" size="40" />显示<input name="nav_display" type="radio" value="0" size="40" />隐藏</td></tr>点击保存,然后到后台更新缓存,再点击一个分类进行修改,这时的界面是不是出现我们的按钮了,单选按钮,每次只能指定一种小图标哦。
Ecshop--电子商城管理系统.高春辉-->ecshop->卖给->康盛--->把ec单独卖给-->shopex(上海商派)Ecshop代码是开放的,可以修改,但是版本是私有的,改了之后,不能以任何派生版本来发布.目前市场上流行的商城管理系统:EcshopshopNC(代码部分加密)国外:zencart,magento(麦金斗)一般在外贸的公司,用zencart,magento用的多一些.Magento是基于zendframework来开发的.安装Ec的压缩包,一般会有如下3个目录Docs-->帮助文档Upgrade->升级包Upload->上传文件,(即商城项目目录)把upload上传到服务器,修改为任意名,运行后自动提示安装.模板制作与二次开发论坛有很多二次开发和模板制作的任务.模板制作典型工作流程:商城制作方已有设计稿,设计稿的风格符合ec的大致板块.把设计稿制作成ec需要的模板文件.(其实就是smarty模板)这个技术含量不高,价格一般是在1500-2000元.二次开发:往往是通过模板的修改,达不到想要的效果,比如需要增加一个信用卡在线支付,或者分期支付.这是ec没有的功能,就需要针对源码进行改动.价格不定,但比模板制作要高.参考数据字典重要的表:Ecs_goods表:商品表Ecs_category :栏目表Ecs_brand:栏目表Order_info 订单表Order_goods 订单对应的商品表.User 用户表User_account 管理员操作账户的记录表Account_log:用户的账户变动流水表Collect_goods: 用户收藏商品表Feedback表:留言表,不针对商品,直接针对店家留的言. Comment:是针对商品做的评论.Nav 表导航链接表,可以定制页面上的导航信息.1:Ecshop 属性面向过程+函数调用为主, 而且没用单入口模式具体的功能对应具体的页面.2:用的模板引擎是简化的smarty 模板.以goods.php 为例在init 中包含的页面,基本都是声明函数.(因为ec 是面向过程+函数来编程的)Lib_base.php : base 基地基础,此文件声明的是全网站甚至任何网站,都常用用到的函数,Sub_str : 截取中文无乱码的文件.Real_ip: 读取客户端IP, 从$_SERVER 来读的.Str_len: 计算字符串在视觉效果上的长度, 一个中文按2个字符算(因为多数情况下,一个中文的宽度是一个字母的2倍宽.)Get_crlf: 获取当前用户的换行符. Windows->\r\n, *nix->\n , mac->\rSend_mail : 发送邮件.Get_version:获得服务器环境的gd 库版本File_mode_info:获取文件的权限信息.Log_write: 记录日志到文件Mk_dir: 递归创建目录addslashes_deep:递归的对数组进行转义.addslashes_deep_obj: 递归对对象的属性进行转义.stripslashes_deep :递归反转义make_semiangle: 全角字符转半角check_file_type :检查文件后缀,一般检查后缀,直接通过截取文件名来实现.A.php==> a.jpg,伪装上传,带来攻击. Ngnix+PHP 某个版本,就有此漏洞.而check_file_type 是通过分析文件的头信息域来实现的.mysql_like_quote:对sql 语句扣like 条件进行转义,防止注入.real_server_ip:获取服务器端IP 地址ecs_geoip: 把IP 地址转为"省市地址".trim_right:中英文混杂时,去除右侧可能的乱码.Goods.php Require (Init.php) ........业务逻辑lib_base.php lib_common.php lib_main.php lib_insert.php lib_goods.phpread_static_cache:读文件缓存(把数组等信息序列化,放在文本里存储)write_static_cache:写文件缓存.Lib_common.php主要放置本网站要实现的一些功能的主要函数比如:Get_brand_list 获取品牌列表get_children:获取指定栏目的子孙栏目.本文件下的函数比较多,用到的再来讲解.Lib_main.php主要放置前台功能的函数库比如:update_user_info :更新用户的session信息get_user_info:获取用户的详细信息assign_ur_here:计算面包屑导航路径.assign_articles:获取文章列表并赋给smartyLib_inert.php放置的是在模板中局部不缓存时,调用的insert_开头的函数.Lib_goods.php是商品操作最频繁函数.小试牛刀:以商城标题中, 去除"powered by Ecshop"为例打开任意一个页面, 看其模板,以goods.php为例Goods.php->找模板->goods.dwt,分析模板的标签, 找到相应的{$page_title}标签回到goods.php里,必须推出--> assing('page_title',xxx)这个过程,再找到,===> $page_tile=>$position['title']=>$position==>assign_ur_here()函数留一下问题:在开发的过程中,有时需要清缓存才能看到效果如何彻底禁用缓存,方便开发时的调试.二次开发的大原则1:能后台配置,不去修改.2:能用js实现,不改模板(比如来一个隔行换色)3:能改模板的,不要改PHP4:能改PHP完成的,不要改数据库二次开发实战1)任意页面显示用户余额2)用户名/email都可以登陆3)商品页面自定义title,便于SEO4)商品按颜色选择功能5)去除页面底部的版本后,首页的底部随机出现"powered by ecshop"的字样,解决该问题.(提示:js)6)放大镜功能显示用户余额直接在/library/member_lbi中增加如右代码因为$user_info是系统赋给smarty的一个变量,而且此变量已经存在用户余额这个字段.用户名和email都可以登陆,在user.php中,第347行左右,增加如下代码思路:判断传来的是否是email,如果是email,则查询数据库,把email转成用户名.颜色或者尺码选择功能1:ec后台有商品的"属性管理",请利用此功能做开发(只需要用js或者改模板就能实现) 2:放大境可以利用js来实现.搜索"js放大境"商品页面自定义title,便于SEO功能讲解:商品页面的title信息是"商品名->栏目名->上级栏目名->网店名"这个规则来自动生成. 对于title,是SEO一个很重要的数据,自动生成的title很可能不符合SEO的需要.步骤:我们如何自定义title?答:首先在商品表增加title字段,然后在商品页面的.php文件中,读取此字段并赋给smarty然后再展示到模板上.从后台管理角度看:发布商品时,表单中应有自定义title表单项,并能提交入库.修改商品时,表单中也应有自定义title表单项,并能提交入库.实施:1:给ecs_goods商品表增加seotitle字段.alter table ecs_goods add seotitle varchar(60) not null default '' after goods_name;2:在后台修改商品发布时的表单项,增加"自定义title"表单项.3:admin/goods.php中的insert ,update代码段,分别接收此参数,并入库.4:修改/goods.php, 即前台商品页面,把seotitle赋给smarty5:在模板中,goods.dwt中, 做逻辑判断,展示seotitle或page_title商品颜色尺寸仿淘宝选择功能教程(2.7.0版本)注:此功能与具体的模板相关,无法写出通用教程.因为,此帖子以讲原理为主.请大家运用时举一反三,不要生搬硬套代码.也因为同样的原因,此篇帖子不回帖因个人安装导致的问题,只解决确实属于代码漏洞的问题.原理:1:css控制本来要显示的radio为一小矩形.2:当点击此小矩形时,js使此radio选中,同时改变此小矩形的外观样式.牵涉到的修改文件(default模板为例)/themes/default/style.css/themes/default/goods.dwt注:此路径待修改模板路径.修改步骤:一:控制样式1.打开/themes/ecshop/images加添图片test.gif.2.打开/themes/ecshop/style.css最下面添加:1/*--------------颜色选择器CSS添加-------------*/23.catt{width:100%;height:auto;overflow:hidden;padding-bottom:5px;}45.catt a{border: #c8c9cd 1px solid; text-align: center; background-color: #fff;margin-left:5px;margin-top:6px;padding-left: 10px;padding-right: 10px;display: block;white-space: nowrap; color: #000; text-decoration: none;float:left;}67.catt a:hover {border:#ff6701 2px solid; margin: -1px; margin-left:4px;margin-top:5px;}89.catt a:focus {outline-style:none;}1011.catt .cattsel {border:#ff6701 2px solid; margin: -1px;background: url("images/test.gif")no-repeat bottom right; margin-left:4px;margin-top:5px;}1213.catt .cattsel a:hover {border: #ff6701 2px solid;margin:-1px;background:url("images/test.gif") no-repeat bottom right;}复制代码3.打开/themes/ecshop/goods.dwt注:以下修改以原版ecshop2.7.0版本default(模板名称)为基准未修改前第347-351行14<!-- {foreach from=$spec.values item=value key=key} -->1516<label for="spec_value_{$value.id}">1718<input type="radio" name="spec_{$spec_key}" value="{$value.id}"id="spec_value_{$value.id}" {if $key eq 0}checked{/if} onclick="changePrice()" />1920{$bel} [{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}] </label><br />2122<!-- {/foreach} -->复制代码修改为:23<div class="catt">2425<!-- {foreach from=$spec.values item=value key=key} -->2627<a {if $key eq 0}class="cattsel"{/if} onclick="changeAtt(this)" href="javascript:;"name="{$value.id}" title="[{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}]">{$bel}<input style="display:none" id="spec_value_{$value.id}" type="radio" name="spec_{$spec_key}"value="{$value.id}" {if $key eq 0}checked{/if} /></a>2829<!-- {/foreach} -->3031</div>复制代码此处为是了将radio换成淘宝上那种小矩形样式显示在页面.二:增加js控制样式与选中行为在页面内找到<script>这样的东西,在其后面添加一个js函数32function changeAtt(t) {stChild.checked='checked';34for (var i = 0; i<t.parentNode.childNodes.length;i++) {35if (t.parentNode.childNodes[i].className == 'cattsel') {36t.parentNode.childNodes[i].className = '';37}38}39t.className = "cattsel";40changePrice();41}复制代码此处是为了控制选择页面上的颜色同时也选中了对应的隐藏input 从而来更改商品属性.如:价钱...等.如果是用户修改过的goods.dwt可搜索:function changePrice()在其上面添加.说明:1.以上修改会将商品属性部分所有radio修改.2.由于用户goods.dwt可能都被修改过,用户请根据自己的实际情况修改.3:对于颜色选择功能,这是目前本论坛上最简单的实现方法.文中所用附件test.gif如下:效果图如下:模板制作1:首先把模板,css,images按照ec的模板规定好的层次组织好. /模板目录模板文件.dwt/library (被包含的模板的局部,如头部,尾部)/images.css2: 模板的命名Ec如何知道该模板的名称,版本, 作者,缩略等信息答:每套模板下面,必须有一个css,叫做style.css该css的顶部注释,即为该模板的信息说明.例:见下/*Template Name: ECSHOP DefaultTemplate URI: /Description: haoyigo.Version: 2.6.2Author: ECSHOP TeamAuthor URI: /Logo filename: logo.gif*/模板的缩略图:从images/screenshot.png 当作模板的缩略图.问题的提示:严格级别下,只允许引用传递变量,不允许引用传递返回值。
Ecshop二次开发会员中心添加修改积分明细以及其他小功能定制等级积分会员优惠铜牌会员10000购物时额外优惠1%银牌会员50000购物时额外优惠2%金牌会员100000购物时额外优惠3%1.languages/zh_cn/user.php,666行左右,把'$_LANG['user_reg_info'][2]'修改为'不注册为会员不可以在本店购买商品'668行左右,把$_LANG['user_reg_info'][3]修改为'注册之后您可以'2.删除左侧的5个选项themes/joyo25/library/user_menu.lbi,删除以下5行:{$bel_tag}{$bel_booking}{$bel_bonus}{$bel_affiliate}{$bel_track_packages}3.给字体设置颜色,删除红包themes/joyo25/user_clips.dwt,26行左右,把{$info.shop_name}修改为:{$info.shop_name}41行左右,注释42行左右,把{$info.integral}修改为:{$info.integral}4.删除资金管理里面的提现并修改颜色themes/joyo25/user_transaction.dwt,644行左右,把{$lang.surplus_type_0} | {$lang.surplus_type_1} | {$lang.add_surplus_log} | {$lang.view_application}修改为{$lang.surplus_type_0}| {$lang.add_surplus_log}| {$lang.view_application}5.添加积分明细languages/zh_cn/user.php,36行左右,添加:$_LANG['label_integral_surplus'] = '积分明细';languages/en_us/user.php,36行左右,添加:$_LANG['label_integral_surplus'] = 'Integral Details';themes/joyo25/library/user_menu.lbi,15行左右,添加:{$bel_integral_surplus}themes/joyo25/user_transaction.dwt,230行左右,添加:{$bel_integral_surplus}includes/lib_order.php,1342行左右,添加一个函数:/*** 取得用户积分* @param int $user_id 用户id* @return int 用户积分*/function get_user_integral($user_id){$sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('users') .' WHERE user_id = '$user_id'';$user = $GLOBALS['db']->getRow($sql);return $user['pay_points'];}user.php,35行左右,把$ui_arr = array('register', 'login', 'profile', 'order_list', 'order_detail', 'address_list', 'collection_list','message_list', 'tag_list', 'get_password', 'reset_password', 'booking_list', 'add_booking', 'account_raply','account_deposit', 'account_log', 'account_detail', 'act_account', 'pay', 'default', 'bonus', 'group_buy', 'group_buy_detail', 'affiliate','comment_list','validate_email','track_packages','transform_points','qpassword_name', 'get_passwd_question', 'check_answer');修改为:$ui_arr = array('register', 'login', 'profile', 'order_list', 'order_detail', 'address_list', 'collection_list','message_list', 'tag_list', 'get_password', 'reset_password', 'booking_list', 'add_booking', 'account_raply','account_deposit', 'account_log', 'account_detail', 'act_account', 'pay', 'default', 'bonus', 'group_buy', 'group_buy_detail', 'affiliate', 'comment_list','validate_email','track_packages','transform_points','qpassword_name', 'get_passwd_question', 'check_answer', 'integral_log');user.php,805行左右,在elseif ($action == 'order_list')循环下面添加:/* 会员积分明细界面 */elseif ($action == 'integral_log'){include_once(ROOT_PATH . 'includes/lib_clips.php');include_once(ROOT_PATH . 'includes/lib_order.php');$page = isset($_REQUEST['page']) ? intval($_REQUEST['page']) : 1;$account_type = 'pay_points';/* 获取记录条数 */$sql = 'SELECT COUNT(*) FROM ' .$ecs->table('account_log').' WHERE user_id = '$user_id'' .' AND $account_type <> 0 ';$record_count = $db->getOne($sql);//分页函数$pager = get_pager('user.php', array('act' => $action), $record_count, $page);//获取剩余积分$surplus_amount = get_user_integral($user_id);if (empty($surplus_amount)){$surplus_amount = 0;}//获取积分记录$account_log = array();$sql = 'SELECT * FROM ' . $ecs->table('account_log') .' WHERE user_id = '$user_id'' .' AND $account_type <> 0 ' .' ORDER BY log_id DESC';$res = $GLOBALS['db']->selectLimit($sql, $pager['size'], $pager['start']);while ($row = $db->fetchRow($res)){$row['change_time'] = local_date($_CFG['date_format'], $row['change_time']);$row['type'] = $row[$account_type] > 0 ? $_LANG['account_inc'] : $_LANG['account_dec'];$row['user_money'] = price_format(abs($row['user_money']), false);$row['frozen_money'] = price_format(abs($row['frozen_money']), false);$row['rank_points'] = abs($row['rank_points']);$row['pay_points'] = abs($row['pay_points']);$row['short_change_desc'] = sub_str($row['change_desc'], 60);$row['amount'] = $row[$account_type];$account_log[] = $row;}//模板赋值$smarty->assign('surplus_amount',price_format($surplus_amount, false));$smarty->assign('account_log', $account_log);$smarty->assign('pager', $pager);$smarty->display('user_transaction.dwt');}6.添加积分说明languages/zh_cn/user.php,37行左右,添加:$_LANG['label_integral_explanation'] = '积分说明';languages/en_us/user.php,37行左右,添加:$_LANG['label_integral_explanation'] = 'Integral Explanation';themes/joyo25/library/user_menu.lbi,14行左右,添加:{$bel_integral_explanation}themes/joyo25/user_transaction.dwt,260行左右,添加:1.2.3.{$bel_integral_explanation}4.5.所有会员在乐博商城购物均可获得积分,积分可以用来参与兑换活动。
ecshop的拍卖功能是ecshop提倡一大促销的主打功能,这个要求必须非常高,本程序为了调整ecshop列表页面活动倒计时和ecshop参与人数显示功能,给ecshop增色不少.
1:auction.php的auction_list函数
$sql = "SELECT a.*, IFNULL(g.goods_thumb, '') AS goods_thumb " .
"FROM " . $GLOBALS['ecs']->table('goods_activity') . " AS a " .
"LEFT JOIN " . $GLOBALS['ecs']->table('goods') . " AS g ON a.goods_id = g.goods_id " .
"WHERE a.act_type = '" . GAT_AUCTION . "' " .
"AND a.start_time <= '$now' AND a.end_time >= '$now' AND a.is_finished < 2 ORDER BY a.act_id DESC";
同时修改该函数
function auction_count()
{
$now = gmtime();
$sql = "SELECT COUNT(*) " .
"FROM " . $GLOBALS['ecs']->table('goods_activity') .
"WHERE act_type = '" . GAT_AUCTION . "' " .
"AND start_time <= '$now' AND end_time >= '$now' AND is_finished < 2";
return $GLOBALS['db']->getOne($sql);
}
2:admin\auction.php的function auction_list()
$info = auction_info($row[act_id]);
$arr['bid_user_count'] = $info['bid_user_count'];
3:admin\templates\auction_list.htm
<td align="right">{$auction.bid_user_count}</td>
4:includes/lib_goods.php
function get_top10($cats = '')去掉
if ($GLOBALS['_CFG']['use_storage'] == 1)
{
$sql .= " AND g.goods_number > 0 ";
}
5:auction_list.dwt
<select name="sort">
<option value="start_time">开始时间</option>
<option value="end_time">结束时间</option>
</select>
6:auction.php的list中增加以下
$sort = isset($_REQUEST['sort'])&&($_REQUEST['sort'])?$_REQUEST['sort']:'act_ id';
6:auction.php
function auction_list($size, $page,$sort = '')
{
if($sort){
$sort_string = ' order by a.'.$sort." asc";
}
$auction_list = array();
$auction_list['finished'] = $auction_list['finished'] = array();
$now = gmtime();
$sql = "SELECT a.*, IFNULL(g.goods_thumb, '') AS goods_thumb " . "FROM " . $GLOBALS['ecs']->table('goods_activity') . " AS a " .
"LEFT JOIN " . $GLOBALS['ecs']->table('goods') . " AS g ON a.goods_id = g.goods_id " .
"WHERE a.act_type = '" . GAT_AUCTION . "' " .
"AND a.start_time <= '$now' AND a.end_time >= '$now' AND a.is_finished < 2 $sort_string";
8:auction.php的list
$pager = get_pager('auction.php', array('act' => 'list','sort'=>$sort), $count, $page, $size);
9:调用参与拍卖数量
$info = auction_info($row[act_id]);
$auction['bid_user_count'] = $info['bid_user_count'];
10:auction_list.dwt参与人数:{$auction.bid_user_count}
11:auction.php的auction_list()中增加倒计时
$auction['auction_end_time'] =local_date('Y/m/d H:i', $auction['end_time']);
$auction['act_id'] = $auction['act_id'];。