ecshop 下拉购物车加删除功能

<!-- {if $goods} -->

<ul class="car_ul">

<img src="../images/dang.gif" style="position:relative; top:-8px; left:-6px; float:left"/>

{foreach from=$goods item=goods name=goods}

<li>

<div class="f_l">

<div style="float:left">

<a href="{$goods.url}"><img src="{$goods.goods_thumb}" style="width:50px; height:50px;" alt="{$goods.goods_name}"></a>

  </div>

<a class="name" href="{$goods.url}">{$goods.short_name}</a>

</div>

<div class="f_r">

<b>{$goods.goods_price}×{$goods.goods_number}</b> <br />

<a class="del" href="javascript:" onClick="deleteCartGoods({$goods.rec_id})">[删除]</a>

</div>

</li>

{/foreach}

<ul>

<p class="car_info">

共 <b>{$goods_number}</b> 件商品,金额总计:{$order_amount}<b></b>

</p>

<p class="car_info">

<a href="flow.php"><img src="images/qujiesuan.gif" alt="去结算" /></a>

</p>

<!-- {else} -->

<ul class="car_ul">

<a href="#" style="color:#999; padding-left:30px;">您的购物车暂无商品 赶快选择心爱的鞋子吧</a>

<ul>

<!-- {/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_info()

{

    $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('goods',$arr);

        $GLOBALS['smarty']->assign('goods_number',$number);

        $GLOBALS['smarty']->assign('order_amount',$amount);

    $output = $GLOBALS['smarty']->fetch('library/cart_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('goods',$arr);

$GLOBALS['smarty']->assign('goods_number',$number);

$GLOBALS['smarty']->assign('order_amount',$amount);

$result['content'] = $GLOBALS['smarty']->fetch('library/cart_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;

  }

}

</script>
复制代码

原理很简单,先发送删除指令,然后将返回的json数据重新加载到ECS_CARTINFO中的代码中就行了。

到此,大功告成!!看不懂的同志们可以在论坛和我blog中回贴或留言评论。在这里就先里放个链接了。。哈哈~~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值