版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ecshop二次开发教程目录TOC\o"1-1"\h\z\u前言 3一、商圈和地区进行关联 4二、其他页面显示购买记录的函数 5三、多货币解决方案 6四、仿淘宝商品详细页实现尺码颜色关联显示库存 12五、仿淘宝商品详细页加入购物车效果 14六、ecshop加入购物车效果(各个页面) 22七、商品列表页面“喜欢“功能实现 29八、商品列表也显示获赠消费积分 32九、分析ecshop里的$GLOBALS 37十、解决选择属性直接就是属性价格不需要在原价基础上加价 38十一、商品详细页下载商品介绍相关图片 39十二、实现后台二次开发后功能模块仍然可以分配权限 41十三、ecshop调用bbs数据 42十四、整理了一个获取用户等级的函数 43十五、商品页显示具体属性排序 44十六、解决ecshop新建页面分页问题 49十七、刚修改的伪静态分类URL 52十八、ecshop批发销售 66十九、网银支付直通插件实现方法 69二十、商品列表页多图切换的实现 75二十一、完善论坛发布的qq登录插件 77二十二、倒计时代码 78二十三、关于ecshop回调函数应用 83二十四、商品内容页加订单留言功能分析 84二十五、有关商品详细页是常规显示还是显示宣传页的实现方法 85二十六、后台添加搜索功能讲解 87二十七、分享ec搜索出现相关商品的效果滑动效果(模仿百度) 88二十八、修改注册发送邮件(更新) 94二十九、新增加一调用编辑器函数 97三十、简单实现各个页面都可显示友情链接 97三十一、Ecshop系统框架分析 99三十二、二次开发技术共享后台邮件群发共享 100三十三、ecshop内页调用友情链接 100三十四、项目要求在后台商品分类添加图片的功能。 102三十五、分类按照拼音第一字母排序显示实现 102三十六、获取分类的一级分类和二级分类 106三十七、如何调用解决列表的购买数量 107三十八、详情页调评论次数 108三十九、关于购买数量订单数量 109四十、Ecshopajax应用讨论 109四十一、调用当前分类或当前分类的下级分类函数 115四十二、在商品列表显示购买记录 118四十三、ajax更新购物车数量 118四十四、PHP导出excle数据 123四十五、页面多倒计时显示最新修改 125四十六、关于lbi文件控制原理分析 129四十七、页面浏览历史图片调用分析 130前言2008年我们开始接触ecshop二次开发,为电子商务中小企业提供技术服务是我们的宗旨,一路走来,我们服务客户的同时把我们一些技术解决办法进行整理、发布,并通过齐老师的审核,如有错误或不严谨的地方欢迎网友们拍砖指正。一、商圈和地区进行关联目前系统地区支持四级分类,但是有时候客户要求五级比如中国-陕西-西安-碑林-php服务中心商圈实现方法异常简单我们只需要修改admin下templates下{if$region_typeeq'0'}{$lang.add_country}:{elseif$region_typeeq'1'}{$lang.add_province}:{elseif$region_typeeq'2'}{$lang.add_city}:tonal}:{elseif$region_typeeq'4'}添加商圈:{/if}
四十一行
{if$region_type<4}3改成4
通过以上方式就可实现二、其他页面显示购买记录的函数functionget_bought_notes(){_no,oi.add_time,IF(oi.order_statusIN(2,3,4),0,1)ASorder_status'.
'FROM'.$ecs->table('order_info').'ASoiLEFTJOIN'.$ecs->table('users').'ASuONoi.user_id=u.user_id,'.$ecs->table('order_goods').'ASog'.
'WHEREoi.order_id=og.order_idAND'.time().'-oi.add_time<2592000
ORDERBYoi.add_timeDESCLIMIT5';
$bought_notes=$db->getAll($sql);
foreach($bought_notesas$idx=>$value)
{
$goods_id=$value['goods_id'];
$bought_notes[$idx]['goods_thumb']=$db->getOne("selectgoods_thumbfrom".$ecs->table('goods')."wheregoods_id='$goods_id'");
}
return$bought_notes;}
<!--{foreachfrom=$bought_notesitem=bought}-->
<divclass="leftdown_one">
<divclass="one_pic"><ahref="goods.php?id={$bought.goods_id}">ds_thumb}"width="49"height="49"/></a></div>
<ulclass="leftdown_words">
<li><spanstyle="color:#b3ce00">{$bought.user_name}</span>拍下了:</li>
<listyle="color:#e70000">{$bought.goods_name}</li>
<li>{$bought.shipping_name}:{$bought.invoice_no}</li>
</ul>
</div>
<!--{/foreach}-->
三、多货币解决方案首先在我们的后台网店设置里要添加汇率转换的功能,如何添加网店功能自己摸索一下,你要把添加的功能插入表里。如图:
我们的汇率都是和美元进行转换的。开始前台实现:首先我们在首页加上多语言的链接如图:我们看下url<UL><LI><Ahref="{$url_head}¤cy=USD"><IMGsrc="images/USD.gif">USDollar</A></LI><LI><Ahref="{$url_head}¤cy=EUR"><IMGsrc="images/EUR.gif">Euro</A></LI><LI><Ahref="{$url_head}¤cy=GBP"><IMGsrc="images/GBP.gif">BritishPound</A></LI><LI><Ahref="{$url_head}¤cy=CNY"><IMGsrc="images/CNY.gif">ChinaRMB</A></LI><LI><Ahref="{$url_head}¤cy=AUD"><IMGsrc="images/AUD.gif">AustrilianDollar</A></LI></UL>这个{$url_head}
我是重新建了一个文件,每个文件调用。//路径处理
$url_this="[url=http://]http://".$_SERVER[/url]['HTTP_HOST'].$_SERVER['PHP_SELF']."?id=".$_GET['id'];$smarty->assign("url_head",$url_this);3、我们发现都是在每个页面后面传了一次get值,那么在那接这些get值呢,我们肯定要找每个页面的共同文件,不难想到。我在init.php的最后加入
<selectname="hbxz"id="hbxz"
onChange="changhb(this.value)">
<optionvalue="USD">USDollars</option>
<optionvalue="GBP"
>GBP</option>
<optionvalue="AUD">AUG</option>
<optionvalue="EUR">Euro</option>
<optionvalue="CAD"
>CAD</option>
<optionvalue="HKD"
>HKD</option>
</select><script>functionchanghb(kk){location.href='<?phpecho"http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?id=".@$_GET['id'];?>¤cy='+kk;}</script[/code]这个代码大家明白吧,我接到get值后,给了session,如果session不存在话。我们默认就是usd这样每个页面都可以获得当前的session值
。4、我们通过以上操作至少在每个页面可以搞定客户选的货币是什么,下来我们就考虑如何解决显示问题,如果每个页面都修改显示goods价格那多麻烦啊,我们熟悉ecshop的朋友不难想到我们所有显示的价格都是在一个函数里进行里处理,这应该感谢官方的技术人员代码写的好。当然是lib_common.php里得price_format()这个函数,
我们想一下,如果在这搞定是不是所有显示都搞定了我们就从这入手
以下是我修改后的函数functionprice_format($price,$change_price=true){$currency=$_SESSION['currency'];$rate=explode(',',$GLOBALS['_CFG']['rate']);if($currency=='USD'){$price=$price*$rate[0];}if($currency=='CNY'){$price=$price*$rate[3];}if($currency=='EUR'){$price=$price*$rate[1];}if($currency=='GBP'){$price=$price*$rate[2];}if($currency=='AUD'){$price=$price*$rate[4];}if($change_price&&defined('ECS_ADMIN')===false){switch($GLOBALS['_CFG']['price_format']){case0:$price=number_format($price,2,'.','');break;case1://保留不为0的尾数$price=preg_replace('/(.*)(\\.)([0-9]*?)0+$/','\1\2\3',number_format($price,2,'.',''));if(substr($price,-1)=='.'){$price=substr($price,0,-1);}break;case2://不四舍五入,保留1位$price=substr(number_format($price,2,'.',''),0,-1);break;case3://直接取整$price=intval($price);break;case4://四舍五入,保留1位$price=number_format($price,1,'.','');break;case5://先四舍五入,不保留小数$price=round($price);break;}}else{$price=number_format($price,2,'.','');}switch($currency){case'USD':returnsprintf($GLOBALS['_CFG']['currency_format'],$price);break;case'CNY':returnsprintf($GLOBALS['_CFG']['cprice_format'],$price);break;case'EUR':returnsprintf($GLOBALS['_CFG']['aprice_format'],$price);break;case'GBP':returnsprintf($GLOBALS['_CFG']['ybprice_format'],$price);break;case'AUD':returnsprintf($GLOBALS['_CFG']['aoprice_format'],$price);break;}}$rate=explode(',',$GLOBALS['_CFG']['rate']);
这句是从数据库获得我们当时的参数然后我们计算,同时返回值的时候我们用了系统设置的符号解决问题,前台就这样搞定。5、有关交易。后台的操作我做简单的介绍,我们只是解决了显示问题,其实我们实质的数据还是美元,在我们提交订单的时候,我们在order_goods表加俩个字段一个是客户选的货币方式,这样生成订单后,当我进入我的会员中心我依然可以看到我购买人民币是多少钱,我们读取数据库的方式进行换算,另外一个字段是我们换算后的金额。当然我们之前美元的总金额都是在的。在支付的时候我们给贝宝付参数,就是货币类型。四、仿淘宝商品详细页实现尺码颜色关联显示库存效果如下:如何下:
<!--{foreachfrom=$spec.valuesitem=valuekey=key}--><a{if$keyeq0}class="cattsel"{/if}onclick="changeAtt(this,{$value.id},{$goods.goods_id})"href="javascript:;"name="{$value.id}"title="[{if$value.pricegt0}{$lang.plus}{elseif$value.pricelt0}{$lang.minus}{/if}{$value.format_price|abs}]">{$value.label}<inputstyle="display:none"id="spec_value_{$value.id}"type="radio"name="spec_{$spec_key}"value="{$value.id}"{if$keyeq0}checked{/if}/></a><!--{/foreach}-->
在显示详细信息合适的地方加<fontstyle="color:#CCCCCC;">(库存:<fontid="shows_number">{$goods.goods_number}{$goods.measure_unit}</font>)</font>这是动态加载库存的地方
选择打钩这个样式论坛有人发过也不是很难我不在详细贴出在goods.dwt加js代码;functionchangeAtt(t,a,goods_id){t.lastChild.checked='checked';for(vari=0;i<t.parentNode.childNodes.length;i++){if(t.parentNode.childNodes[i].className=='cattsel'){t.parentNode.childNodes[i].className='';}}t.className="cattsel";varformBuy=document.forms['ECS_FORMBUY'];spec_arr=getSelectedAttributes(formBuy);Ajax.call('goods.php?act=get_products_info','id='+spec_arr+'&goods_id='+goods_id,shows_number,'GET','JSON');changePrice();}functionshows_number(result){if(duct_number!=undefined){$('shows_number').innerHTML=duct_number+'件';}else{$('shows_number').innerHTML='未设置'}}打开goods.php添加70行左右吧if(!empty($_REQUEST['act'])&&$_REQUEST['act']=='get_products_info'){include('includes/cls_json.php');$json=newJSON;//$res=array('err_msg'=>'','result'=>'','qty'=>1);$spce_id=$_GET['id'];$goods_id=$_GET['goods_id'];$row=get_products_info($goods_id,explode(",",$spce_id));//$res=array('err_msg'=>$goods_id,'id'=>$spce_id);die($json->encode($row));}五、仿淘宝商品详细页加入购物车效果仿淘宝商品详细页加入购物车效果,效果大家应该都知道,如图:
实现方法:页面
<ahref="javascript:addToCart({$goods.goods_id},0,1)"><imgsrc="images/bnt_cat.gif"/></a>和默认的链接有点点区别大家对比添加
要显示的层添加到这个叶面的底部<divclass="cartSure"id="cartSureBox"style="display:none;"><divclass="btn"><ahref="javascript:;"onclick="closeTipBox();">关闭</a></div><divclass="mesgCon"><h3>宝贝已成功添加到购物车!</h3><div>购物车共有<spanid="ECS_GOODS_NUMBER"></span>种商品合计:<spanid="ECS_GOODS_PRICE"></span></div><br><inputtype="image"src="images/btn_pay.gif"/></div></div>我把样式也贴出来供大家参考.cartSure{position:absolute;left:0;top:545px;width:405px;height:90px;z-index:999;background:url(images/cartSure_bg.gif)00no-repeat;font-size:12px;}.mesgCon{float:left;background:url(images/mesg.png)no-repeat18px9px;color:#666;line-height:21px;padding:000100px;width:320px;}.mesgConh3{float:left;width:320px;color:#333;font-size:14px;margin:-1px06px;height:auto;line-height:20px;background:none;text-align:left;padding:0;font-weight:bold;}.mesgConinput{float:left;margin:011px00}.mesgCondiv{float:left;font-size:13px}.mesgCondivspan{font-size:14px;font-weight:bold;color:#F80}.cartSure.btn{float:left;padding:5px;width:390px}.cartSure.btna{background:url(images/close_bg.gif)no-repeat00;float:right;height:13px;overflow:hidden;text-indent:-5000px;width:38px;}.cartSure.btna:hover{background-position:0-12px}文件
修改addToCart函数修改后:functionaddToCart(goodsId,parentId,is_ajax){vargoods=newObject();varspec_arr=newArray();varfittings_arr=newArray();varnumber=1;varformBuy=document.forms['ECS_FORMBUY'];varquick=0;//检查是否有商品规格if(formBuy){spec_arr=getSelectedAttributes(formBuy);if(formBuy.elements['number']){number=formBuy.elements['number'].value;}quick=1;}goods.quick=quick;goods.spec=spec_arr;goods.goods_id=goodsId;goods.number=number;goods.parent=(typeof(parentId)=="undefined")?0:parseInt(parentId);if(is_ajax==1){Ajax.call('flow.php?step=add_to_cart','goods='+goods.toJS**tring(),addToCartResp**e_ajax,'POST','JSON');}else{Ajax.call('flow.php?step=add_to_cart','goods='+goods.toJS**tring(),addToCartResp**e,'POST','JSON');}}添加几个js函数/***处理添加商品到购物车的反馈信息*/functionaddToCartResp**e_ajax(result){if(result.error>0){//如果需要缺货登记,跳转if(result.error==2){if(confirm(result.message)){location.href='user.php?act=add_booking&id='+result.goods_id+'&spec='+duct_spec;}//opendiv_booking();}//没选规格,弹出属性选择框elseif(result.error==6){openSpeDiv(result.message,result.goods_id,result.parent);}else{alert(result.message);}}else{varcartInfo=document.getElementById('ECS_CARTINFO');varcart_url='flow.php?step=cart';if(cartInfo){cartInfo.innerHTML=result.content;}if(result.one_step_buy=='1'){location.href=cart_url;}else{switch(result.confirm_type){case'1':if(confirm(result.message))location.href=cart_url;break;case'2':if(!confirm(result.message))location.href=cart_url;break;case'3':divTipmiddle(result);//refresh_cart();document.getElementById('jdiv').innerHTML=result.cj;break;default:break;}}}}//购物车提示框JSfunctioncloseTipBox(){document.getElementById('cartSureBox').style.display="none";}functiondivTipmiddle(result){openTipBox(result);vara=document.getElementById("cartSureBox");a.style.left=(document.body.clientWidth/2-a.clientWidth/2+245)+"px";}functionopenTipBox(result){document.getElementById('ECS_GOODS_PRICE').innerHTML=result.goods_price;document.getElementById('ECS_GOODS_NUMBER').innerHTML=result.goods_number;document.getElementById('cartSureBox').style.display="block";}functionopendiv_booking(){document.getElementById('buyTip2').style.display="block";}//购物车提示框JSfunctioncloseTipBox(){document.getElementById('cartSureBox').style.display="none";}打开flow.php167行左右添加/*取得商品列表,计算合计*/$cart_goods=get_cart_goods();//$smarty->assign('total',$cart_goods['total']);$result['goods_price']=$cart_goods['total']['goods_price'];$result['goods_number']=$cart_goods['total']['real_goods_count'];根据以上操作可实现六、ecshop加入购物车效果(各个页面)1、后台网店设置购物车确定提示
选择为2、打开js/common.js
104行就是case'1'
替换之前的if(confirm(result.message))location.href=cart_url;为opencartDiv(result.shop_price,result.goods_name,result.goods_thumb,result.goods_brief,result.goods_id,result.goods_price,result.goods_number);3、复制functionopencartDiv(price,name,pic,goods_brief,goods_id,total,number){var_id="speDiv";varm="mask";if(docEle(_id))document.removeChild(docEle(_id));if(docEle(m))document.removeChild(docEle(m));//计算上卷元素值varscrollPos;if(typeofwindow.pageYOffset!='undefined'){scrollPos=window.pageYOffset;}elseif(typeofpatMode!='undefined'&&patMode!='BackCompat'){scrollPos=document.documentElement.scrollTop;}elseif(typeofdocument.body!='undefined'){scrollPos=document.body.scrollTop;}vari=0;varsel_obj=document.getElementsByTagName('select');while(sel_obj[i]){sel_obj[i].style.visibility="hidden";i++;}//新激活图层varnewDiv=document.createElement("div");newDiv.id=_id;newDiv.style.position="absolute";newDiv.style.zIndex="10000";newDiv.style.width="500px";newDiv.style.height="270px";newDiv.style.top=(parseInt(scrollPos+200))+"px";newDiv.style.left=(parseInt(document.body.offsetWidth)-400)/2+"px";//屏幕居中newDiv.style.background="#fff";newDiv.style.border="5pxsolid#37911C";varhtml='';//生成层内内容html='<divstyle="font-size:14;background:#8cc67b;width:480px;height:40px;line-height:40px;padding:010px;font-size:14px;"><spanstyle="float:left;font-weight:bold">产品购买</span><ahref=\'javascript:cancel_div()\'style="float:right;padding:026px00;background:url(themes/popocai/images/ico_closebig.gif)rightcenterno-repeat;cursor:pointer;">关闭</a></div><divclass="cartpopDiv"><divclass="toptitle"><ahref="goods.php?id='+goods_id+'"class="pic"><imgsrc='+pic+'width="100"height="100"/></a><p><fontstyle="font-weight:bold">'+name+'</font>
<fontstyle="color:#ff6701">'+price+'</font><br>'+goods_brief+'</p></div>';html+='<divclass="coninfo">';html+='<tablecellpadding="0"height="30"><tr><tdalign="center">购物车共有<fontstyle="color:#ff6701;"><strong>'+number+'</strong></font>种商品:合计:<fontstyle="color:#ff6701;"><strong>'+total+'</strong></font></td></tr>';html+='</table>';html+='</div>';html+="<divstyle='float:left;width:450px;text-align:center;padding:15px00;'><ahref='index.php'><imgsrc='themes/popocai/images/goon_ico.gif'></a>
<ahref='flow.php'><imgsrc='themes/popocai/images/jsico.gif'></a></div>";html+='</div></div>';newDiv.innerHTML=html;document.body.appendChild(newDiv);//mask图层varnewMask=document.createElement("div");newMask.id=m;newMask.style.position="absolute";newMask.style.zIndex="9999";newMask.style.width=document.body.scrollWidth+"px";newMask.style.height=document.body.scrollHeight+"px";newMask.style.top="0px";newMask.style.left="0px";newMask.style.background="#FFF";newMask.style.filter="alpha(opacity=30)";newMask.style.opacity="0.40";document.body.appendChild(newMask);}到这个common.js里
大家看了会觉的这个函数很熟悉这就是这个文件里的我只是拿出来修改了一下,当然我们可以自己重新写弹出层比如用jquery
4、打开flow.php
181行左右加入$rows=$GLOBALS['db']->getRow("selectgoods_brief,shop_price,goods_name,goods_thumbfrom".$GLOBALS['ecs']->table('goods')."wheregoods_id=".$goods->goods_id);$result['shop_price']=price_format($rows['shop_price']);$result['goods_name']=$rows['goods_name'];$result['goods_thumb']=$rows['goods_thumb'];$result['goods_brief']=$rows['goods_brief'];$result['goods_id']=$goods->goods_id;$sql='SELECTSUM(goods_number)ASnumber,SUM(goods_price*goods_number)ASamount'.'FROM'.$GLOBALS['ecs']->table('cart')."WHEREsession_id='".SESS_ID."'ANDrec_type='".CART_GENERAL_GOODS."'";$rowss=$GLOBALS['db']->GetRow($sql);$result['goods_price']=price_format($rowss['amount']);$result['goods_number']=$rowss['number'];就是加入购物车成功的判断里面5、我把我们做的样式和图片也贴出来不是很漂亮了/*购物车弹出效果*/.cartpopDiv{width:450px;padding:025px;float:left;}.toptitle{width:450px;float:left;padding:16px0;background:url(../images/cartpop_bg.gif)leftbottomrepeat-x;}.toptitlea.pic{float:left;width:100px;height:100px;overflow:hidden;}.toptitlep{float:right;width:350px;font-size:14px;line-height:20px;height:58px;overflow:hidden;}.coninfo{float:left;width:450px;padding:4px06px;background:url(../images/cartpop_bg.gif)leftbottomrepeat-x;font-size:14px;}.coninfotable{float:left;width:100%;border:none;color:#a00;}.coninfotabletd.left{width:82px;text-align:right;font-weight:bold;}.coninfotabletd.leftspan,.toptitlepa{color:#333}.coninfotabletd.gray{color:#999}.coninfotabletdstrong{color:#f00}.coninfotabletdfont{font-size:18px}以上就是我的实现方法七、商品列表页面“喜欢“功能实现1、通过后台执行sq执行ALTERTABLE`ecs_goods`ADD`love`INT(10)NOTNULLDEFAULT'0';在goods表添加一新的字段。2、打开category.php找到category_get_goods这个函数把要显示的love也给放进去会程序的网友应该明白意思。
/*获得商品列表*/
$sql='SELECTg.goods_id,g.goods_name,g.goods_name_style,g.market_price,g.love,g.is_new,g.is_best,g.is_hot,g.shop_priceASorg_price,'.
"IFNULL(mp.user_price,g.shop_price*'$_SESSION[discount]')ASshop_price,mote_price,g.goods_type,".
'mote_start_date,mote_end_date,g.goods_brief,g.goods_thumb,g.goods_img'.
'FROM'.$GLOBALS['ecs']->table('goods').'ASg'.
'LEFTJOIN'.$GLOBALS['ecs']->table('member_price').'ASmp'.
"ONmp.goods_id=g.goods_idANDmp.user_rank='$_SESSION[user_rank]'".
"WHERE$where$extORDERBY$sort$order";
$arr[$row['goods_id']]['love']
=$row['love'];
$arr[$row['goods_id']]['name']
=$row['goods_name'];_id}">{$goods.love}</font>一定是在foreach循环里。在这个lbi底部加<script>functionchange_love(goods_id){varLastsend=document.getCookie('ECS_auction_Lastsend_'+goods_id);//alert(goods_id);if(Lastsend==null){Ajax.call('goods.php?act=chage_usenum','id='+goods_id,chage_lovenum_Resp**e,'POST','JSON');document.setCookie('ECS_auction_Lastsend_'+goods_id,goods_id);}else{window.location.href='goods.php?id='+goods_id;}}functionchage_lovenum_Resp**e(result){document.getElementById("show_loves_"+result.id).innerHTML=result.usenum;}</script>4、打开goods.php
36行左右加入if($_REQUEST['act']=='chage_usenum'){
include('includes/cls_json.php');
$json
=newJSON;
$res
=array('err_msg'=>'','result'=>'','qty'=>1);$id=$_REQUEST['id'];$sql=$GLOBALS['db']->query("update".$GLOBALS['ecs']->table('goods')."setlove=love+1wheregoods_id='$id'");$res['id']=$id;$res['usenum']=$GLOBALS['db']->getOne("selectlovefrom".$GLOBALS['ecs']->table('goods')."wheregoods_id='$id'");die($json->encode($res));}八、商品列表也显示获赠消费积分有的客户会要求把每个商品的获赠积分显示在商品列表页:1、打开category.php找到category_get_goods函数修改为functioncategory_get_goods($children,$brand,$min,$max,$ext,$size,$page,$sort,$order){$display=$GLOBALS['display'];$where="g.is_on_sale=1ANDg.is_alone_sale=1AND"."g.is_delete=0AND($childrenOR".get_extension_goods($children).')';if($brand>0){$where.="ANDg.brand_id=$brand";}if($min>0){$where.="ANDg.shop_price>=$min";}if($max>0){$where.="ANDg.shop_price<=$max";}/*获得商品列表*/$sql='SELECTg.goods_id,g.goods_name,g.goods_name_style,g.market_price,g.is_new,g.is_best,g.is_hot,g.shop_priceASorg_price,IF(g.give_integral>-1,g.give_integral,g.shop_price)asintegral,'."IFNULL(mp.user_price,g.shop_price*'$_SESSION[discount]')ASshop_price,mote_price,g.goods_type,".'mote_start_date,mote_end_date,g.goods_brief,g.goods_thumb,g.goods_img'.'FROM'.$GLOBALS['ecs']->table('goods').'ASg'.'LEFTJOIN'.$GLOBALS['ecs']->table('member_price').'ASmp'."ONmp.goods_id=g.goods_idANDmp.user_rank='$_SESSION[user_rank]'"."WHERE$where$extORDERBY$sort$order";$res=$GLOBALS['db']->selectLimit($sql,$size,($1)*$size);$arr=array();while($row=$GLOBALS['db']->fetchRow($res)){$goods_id=$row['goods_id'];$sql2="selectsum(goods_number)ascountfrom".$GLOBALS['ecs']->table('order_goods')."wheregoods_id='".$goods_id."'";$buy_num=$GLOBALS['db']->getOne($sql2);if($row['promote_price']>0){$promote_price=bargain_price($row['promote_price'],$row['promote_start_date'],$row['promote_end_date']);}else{$promote_price=0;}/*处理商品水印图片*/$watermark_img='';if($promote_price!=0){$watermark_img="watermark_promote_small";}elseif($row['is_new']!=0){$watermark_img="watermark_new_small";}elseif($row['is_best']!=0){$watermark_img="watermark_best_small";}elseif($row['is_hot']!=0){$watermark_img='watermark_hot_small';}if($watermark_img!=''){$arr[$row['goods_id']]['watermark_img']=$watermark_img;}$arr[$row['goods_id']]['goods_id']=$row['goods_id'];if($display=='grid'){$arr[$row['goods_id']]['goods_name']=$GLOBALS['_CFG']['goods_name_length']>0?sub_str($row['goods_name'],$GLOBALS['_CFG']['goods_name_length']):$row['goods_name'];}else{$arr[$row['goods_id']]['goods_name']=$row['goods_name'];}$arr[$row['goods_id']]['count']=$buy_num;$arr[$row['goods_id']]['name']=$row['goods_name'];/*修正积分:转换为可使用多少积分(原来是可以使用多少钱的积分)*/$arr[$row['goods_id']]['integral']=round($row['integral'],0);$arr[$row['goods_id']]['goods_brief']=$row['goods_brief'];$arr[$row['goods_id']]['goods_style_name']=add_style($row['goods_name'],$row['goods_name_style']);$arr[$row['goods_id']]['market_price']=price_format($row['market_price']);$arr[$row['goods_id']]['shop_price']=price_format($row['shop_price']);$arr[$row['goods_id']]['type']=$row['goods_type'];$arr[$row['goods_id']]['promote_price']=($promote_price>0)?price_format($promote_price):'';$arr[$row['goods_id']]['goods_thumb']=get_image_path($row['goods_id'],$row['goods_thumb'],true);$arr[$row['goods_id']]['goods_img']=get_image_path($row['goods_id'],$row['goods_img']);$arr[$row['goods_id']]['url']=build_uri('goods',array('gid'=>$row['goods_id']),$row['goods_name']);}return$arr;}2、模板部分直接加{$egral}积分九、分析ecshop里的$GLOBALS搞ec二次开发或研究ec的一些网友经常在论坛里提到$GLOBALS['db'];$GLOBALS['ecs'];在那定义的等帖子。下来就$GLOBALS我说一点:
想搞明白的朋友执行这段代码<?php$xaphp='西安php服务中心';echo$GLOBALS['xaphp'];?>浏览器当然会打印出
西安php服务中心
这就是$GLOBALS的作用
“就像大部份的结构化程序,有所谓的全局变量与局部变量,PHP
在这方面也是有相同的处理方式。
在
PHP
的程序执行时,系统会在内存中保留一块全局变量的区域。实际运用时,可以透过
$GLOBALS["变量名称"]
将需要的变量取出。在用户自定的函数或程序中,就可以用
$GLOBALS
数组取出需要的变量在ec里大家打开init.php会看到$db=newcls_mysql($db_host,$db_user,$db_pass,$db_name);定义了这样的类
顾名思义$GLOBALS['db']以上观点是我个人的理解。十、解决选择属性直接就是属性价格不需要在原价基础上加价这几年经常遇到这个需求,就是我们后台添加了属性前台选择属性,客户要求这个价格就是属性里的价格,而不需要在原来基础上加价。
如图所示:解决方案:我之前在论坛就有对get_final_price这个函数分析,他非常重要,我们加入购物车商品价格都要通过他来处理,
比如(促销,团购,优惠。。。。),这样让我们想到这个函数。
lib_common.php打开找到这个函数
只需要if($is_spec_price){if(!empty($spec)){$spec_price=spec_price($spec);$final_price+=$spec_price;}}
改成if($is_spec_price){if(!empty($spec)){$spec_price=spec_price($spec);$final_price=$spec_price;}}即可,我还是建议
二次开发人员可记住这个函数有很多用处。十一、商品详细页下载商品介绍相关图片此功能一般搞批发的会有用,他可以点击copy直接下载商品详细页的商品描述相关图片。因为代码设计到具体的字符串切分,所以每个网店形式不一定一样,我贴出来供大家参考应用。1、打开goods.dwt适当位置加<ahref="goods.php?id={$goods_id}&act=export">copy</a>2、打开goods.php加入if(!empty($_REQUEST['act'])&&$_REQUEST['act']=='export'){$id=$_GET['id'];$goods=get_goods_info($goods_id);$goods_desc=$goods['goods_desc'];include_once('whadmin/includes/cls_phpzip.php');$zip=newPHPZip;$array=explode("\n",$goods_desc);foreach($arrayas$value){preg_match("#<pstyle=\"text-align:center;\">(.*)</p>#",$value,$out);preg_match("#<imgsrc=\"/(.*)\"width#",$out[1],$out_img);if($out_img[1]){//echoROOT_PATH.$out_img[1]."<br>";$zip->add_file(file_get_contents(ROOT_PATH.$out_img[1]),$out_img[1]);}}header("Content-Disposition:attachment;filename=goods_img.zip");header("Content-Type:application/unknown");die($zip->file());}以上方式即可实现点击copy立即打包下载描述的所有图片。十二、实现后台二次开发后功能模块仍然可以分配权限对ec后台进行二次开发在可以在左面菜单栏加入新的功能模块有关如何加入我在之前帖子有说过今天我们要分析的是功能模块加了以后如何在管理员列表也可以实现管理权限分配的管理。
首先我们了解一下ecs_admin_action这个表这个表有3个字段action_id自增id,parent_id分类idaction_code是我们左面的所有功能。
下来我们了解ecs_admin_user表的action_list字段
大家会发现这里面存放具有管理权限的所有模块。
例:在左面菜单栏加入
短
信--》短信发送这个功能。如何让左面显示我不在解释。我们直接开始分析正题2、打开ecs_admin_action表插入sms_manage这一条数据parent_id默认为0就可以。因为顶级分类也就是我们分类的大模块他的parent_id都是0的.ok下来我们插入第二天数据sms_send这时候你的parent_id应该是刚才那条数据的action_id以上为无限极分类的原理大家应该了解。3、打开inc_priv.php权限对照表我们加入
//短信管理
$purview['02_sms_my_info']
='sms';记住这里面的02_sms_my_info要和inc_menu里
$modules['14_sms']['02_sms_my_info']
='sms.php
'02_sms_my_info'一致。打开priv_action.php
/*權限管理的一級分組*/
$_LANG['goods']='商品管理';
$_LANG['cms_manage']='文章管理';
$_LANG['users_manage']='會員管理';
$_LANG['priv_manage']='權限管理';
$_LANG['sys_manage']='系統設置';
$_LANG['order_manage']='訂單管理';
$_LANG['promotion']='促銷管理';
$_LANG['email']='郵件管理';
$_LANG['templates_manage']='模板管理';
$_LANG['db_manage']='資料庫管理';
$_LANG['sms_manage']='短信管理';首先加入这一条
然后在底部加入
//短信管理
$_LANG['sms']
='賬號信息';ok
,实现我们的功能。下来去管理员列表点开权限列表看一下是否成功。十三、ecshop调用bbs数据前提保证bbs的表和我们ecshop的表在一个库的情况下
1、$subject_list=$db->getAll("selecttid,subject,datelinefromcdb_postwherefid=54limit0,10");foreach($subject_listas$idx=>$value){
$subject_list[$idx]['subject']=sub_str($value['subject'],8);//字符串截取
$subject_list[$idx]['dateline']=date($GLOBALS['_CFG']['date_format'],$value['dateline']);//格式化时间}$smarty->assign('subject_list',$subject_list);2、<!--{foreachfrom=$subject_listitem=list}--><li><ahref="bbs/forum.php?mod=viewthread&tid={$list.tid}"target="_blank">{$list.subject}</a><span>{$list.dateline}</span></li><!--{/foreach}-->贴到模板。十四、整理了一个获取用户等级的函数获取用户等级的函数
有时候会用到比如在商品评论列表的用户名旁边显示该用户的等级functionget_user_rankname($user_id){
$infos=$GLOBALS['db']->getRow("select*from".$GLOBALS['ecs']->table('users')."whereuser_id='$user_id'");
if($infos['user_rank']>0)
{
$sql="SELECTrank_id,rank_name,discountFROM".$GLOBALS['ecs']->table('user_rank').
"WHERErank_id='$infos[user_rank]'";
}
else
{
$sql="SELECTrank_id,rank_name,discount,min_points".
"FROM".$GLOBALS['ecs']->table('user_rank').
"WHEREmin_points<=".intval($infos['rank_points'])."ORDERBYmin_pointsDESC";
}
if($row=$GLOBALS['db']->getRow($sql))
{
$rank_name
=$row['rank_name'];
}
else
{
$rank_name=$GLOBALS['_LANG']['undifine_rank'];
}
return$rank_name;}十五、商品页显示具体属性排序在实际使用当中往往客户会有这样那样的需求,需要我们技术人员来完善。如:
客户想把20包装排前面,ec默认是按照价格来排的当然不能满足所以我们进行修改程序。
1、ALTERTABLE`ecs_goods_attr`ADD`attr_sort`VARCHAR(10)NOTNULL;复制代码属性表加a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 未来职业与人才培养
- 学科发展前景
- 加油站的行业合作
- 二零二五年金融科技领域股权投资与转让综合合同
- 2024年08月江苏2024届苏银凯基综合类/金融科技类校园招考笔试历年参考题库附带答案详解
- 2024年07月江西江西银行春季校园招考新员工岗前培训笔试历年参考题库附带答案详解
- 2024门窗安装与户外照明系统一体化服务合同3篇
- 2025年度个人车辆购置税分期付款合同车辆作为抵押的税费融资协议4篇
- 会计出纳年终的工作总结
- 供应链中的运输合作与协同
- 领导沟通的艺术
- 发生用药错误应急预案
- 南浔至临安公路(南浔至练市段)公路工程环境影响报告
- 绿色贷款培训课件
- 大学生预征对象登记表(样表)
- 主管部门审核意见三篇
- 初中数学校本教材(完整版)
- 父母教育方式对幼儿社会性发展影响的研究
- 新课标人教版数学三年级上册第八单元《分数的初步认识》教材解读
- (人教版2019)数学必修第一册 第三章 函数的概念与性质 复习课件
- 重庆市铜梁区2024届数学八上期末检测试题含解析
评论
0/150
提交评论