ecshop的二次开发增加了用户定制商品种类的方式。有必要的盆友可以参考以下。
因为很多用户都要自己添加产品,比如自吃,找尺码等等,如图。
最先在\admin\templates\goods_info.htm里边寻找属性与规格型号的部位发觉他启用了{$goods_attr_html}这一网页页面,这一函数的定义在\admin\goods.php的第444行
$smarty->assign('goods_attr_html',build_attr_html($goods['goods_type'],$goods['goods_id']));
随后找build_attr_html这一涵数,在\admin\includes\lib_goods.php的675行
在if语句中再加上
||$val['attr_type']==3
那样就可以在\admin\templates\attribute_info.htm里边的55行
添加
inputtype="radio"name="attr_type"value="3"{if$attr.attr_typeeq3}checked="true"{/if}//自定属性
随后在加上属性的情况下选定此项。
出来在前台接待即\themes\default\goods.dwt搜”分辨属性是复选還是单项选择题“,在循环系统里添加
复制代码编码以下:
<!--{elseif$spec.attr_typeeq3}-->
<!--{foreachfrom=$spec.valuesitem=valuekey=key}-->
<labelfor="spec_value_{$value.id}">
<inputtype='text'name="spec_{$spec_key}"id="{$value.id}"onclick="changePrice()"/>
{$value.label}[{if$value.pricegt0}{$lang.plus}{elseif$value.pricelt0}{$lang.minus}{/if}{$value.format_price|abs}]</label>
<!--{/foreach}-->
<inputtype="hidden"name="spec_list"value="{$key}"/>
如今,大家就需要改动后台管理编码使用户键入后载入数据库查询中。
为了更好地使键入数据库查询里时次序非常好乱,最先要改动数据库查询的ecs_goods_attr这一表,在结尾加上attr_itype表格,设定为int,默认设置为0。
出来还得去\admin\includes\lib_goods.php里边,在functionbuild_attr_html这一涵数寻找
复制代码编码以下:
$html.=($val['attr_type']==1||$val['attr_type']==2)?
$GLOBALS['_LANG']['spec_price'].'<inputtype="text"name="attr_price_list[]"value="'.$val['attr_price'].'"size="5"maxlength="10"/>':
'<inputtype="hidden"name="attr_price_list[]"value="0"/>';
在这里行后边接着加上一行
$html.='<inputtype="hidden"name="attr_itype_list[]"value="'.$val['attr_type'].'"/>';
如今再去\admin\goods.php寻找
复制代码编码以下:
$attr_value=$_POST['attr_value_list'][$key];
$attr_price=$_POST['attr_price_list'][$key];
这二行,在启后边接着加上一行
$attr_itype=$_POST['attr_itype_list'][$key];
再寻找/*插进、升级、删掉数据信息*/注解后边的哪个循环系统,将第一个if和在其中的內容改成
复制代码编码以下:
if($info['sign']=='insert')
{
$sql="INSERTINTO".$ecs->table('goods_attr')."(attr_id,goods_id,attr_value,attr_price,attr_itype)".
"VALUES('$attr_id','$goods_id','$attr_value','$info[attr_price]','$attr_itype')";
}
那样就在加上商品属性的情况下在数据库查询中把属性隶属的类型附着了后边,在启用的情况下能够依据类型来找寻text文本框的內容随后载入。后台管理一部分完毕,出来改动前台接待的用户递交一部分。
最先要改动的是\js\common.js这一文档,寻找functiongetSelectedAttributes这一涵数,将之改成
复制代码编码以下:
functiongetSelectedAttributes(formBuy)
{
varspec_arr=newArray(newArray(),newArray());
varj=0;
varki=0;
for(i=0;i<formBuy.elements.length;i)
{
varprefix=formBuy.elements[i].name.substr(0,5);
if(prefix=='spec_'&&(
((formBuy.elements[i].type=='radio'||formBuy.elements[i].type=='checkbox')&&formBuy.elements[i].checked)||
formBuy.elements[i].tagName=='SELECT'))
{
spec_arr[0][j]=formBuy.elements[i].value;
j;
}
if(prefix=='spec_'&&formBuy.elements[i].type=='text')
{
spec_arr[0][j]=formBuy.elements[i].id;
spec_arr[1][ki]=formBuy.elements[i].value;
j;
ki;
}
}
returnspec_arr;
}
再在functionaddToCart这一涵数里将
goods.spec=spec_arr;
改成
goods.spec=spec_arr[0];
goods.desc=spec_arr[1];
那样,提交表单的情况下就多了一个type为text的input框的值,由所述涵数获知提交表单到的根目录下的flow.php文件,寻找
if(addto_cart($goods->goods_id,$goods->number,$goods->spec,$goods->parent))
这句话,将之改成
if(addto_cart($goods->goods_id,$goods->number,$goods->spec,$goods->parent,$goods->desc))
再到\include\lib_order.php里边,在适度部位载入以下涵数
复制代码编码以下:
functionget_goods_attr_info2($arr,$desc)
{
$attr='';
if(!empty($arr))
{
$fmt="%s:%s%s\n";
$fmt2="%s:%s[%s]\n";
$sql="SELECTa.attr_name,ga.attr_value,ga.attr_price,ga.attr_itype".
"FROM".$GLOBALS['ecs']->table('goods_attr')."ASga,".
$GLOBALS['ecs']->table('attribute')."ASa".
"WHERE".db_create_in($arr,'ga.goods_attr_id')."ANDa.attr_id=ga.attr_id";
$res=$GLOBALS['db']->query($sql);
$i=0;
while($row=$GLOBALS['db']->fetchRow($res))
{
if($row['attr_itype']==3)
{
$attr_price=round(floatval($row['attr_price']),2);
$attr.=sprintf($fmt,$row['attr_name'],$row['attr_value'],$desc[$i]);
$i;
}
else
{
$attr_price=round(floatval($row['attr_price']),2);
$attr.=sprintf($fmt2,$row['attr_name'],$row['attr_value'],$attr_price);
}
}
$attr=str_replace('[0]','',$attr);
}
return$attr;
}
再去
$goods_attr=get_goods_attr_info($spec);
这行,将get_goods_attr_info($spec)改成get_goods_attr_info2($spec,$desc),即启用刚载入的哪个涵数并把input用户键入的物品传进来。
以后前台接待自主改动就可以
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)