基于ecshop模板开发批量修改协议商品价格功能,用AJAX调用处理json数据

8 篇文章 0 订阅
7 篇文章 0 订阅

用的ecshop模板老,内嵌smarty模板引擎

业务流程:
协议商品即商城这方面跟各企业用户协商好的商品协议价,给出适当的优惠。在批量添加协议商品之前可以先改变其协议价,不做改变的默认和商品价格一致。

这里写图片描述

由于模板已经封装了ajax.call,可直接利用AJAX异步处理json数据。

以下是表的一些数据,隐藏域input的value值是原商品价格,id为get_price_加上商品id,依次循环列出商品原价格,下面为协议价输入框,id同理。

这里写图片描述

单个添加修改
两种方式
一种是在按单个添加按钮后提示并输入价格的对话框,对输入数据进行校验限制,修改价格后添加;

另一种跟批量添加相同但只选中一个

var id = "";
function add_business_goods(goods_id, cat_id,price) {

//  var protocolPrice = document.getElementById("protocol_price_" + goods_id).value;


//    var protocol_price = prompt("请输入协议价", "");
//
//  if (!isNaN(protocol_price) && protocol_price > 0) {
//    document.getElementById("price").value = protocol_price;
//    var price = document.getElementById("price").value;
//  } else if(protocol_price == null){
//    return false;
//  } else {
//    cfm = '{$lang.shop_price_invalid}';
//    return confirm(cfm);
//  }
  var price = document.getElementById("protocol_price_" + goods_id).value;
  price = isNull(price);
  if(price == "") {
    price = document.getElementById("get_price_" + goods_id ).value;
  } else if( isNaN(price) || price < 0) {
    cfm = '{$lang.shop_price_invalid}';
    return confirm(cfm);
  }

  id = goods_id;

  var args = "id=" + {$id} + "&goods_id=" + goods_id + "&cat_id=" + cat_id + "&price=" + price;
  Ajax.call('business_goods_handler.php?act=add_business',args, judge_add, "GET", "JSON");

//  Ajax.call(this.url, args, this.listCallback, "GET", "JSON");
}

批量修改添加
收集选中的商品id和对应的协议价格,
goods_id += userItems[i].value + “:” + protocolPrice + “,”;
拼接成”商品1:协议价1,商品2:协议价2……”的字符串,传到服务端后再分割成两个数组,即商品ID数组 和 价格数组,然后依次对应存入数据库。
这样的步骤有点繁冗,而且容易出错。(这里我使用是为了将字符串传过去后记录到管理员操作日志上)


这里我们用第二种方法
在这里我们定义一个JS对象,存储数据后再解析成字符串,var cmt = JSON.stringify(data);
stringify()用于从一个对象解析出字符串,如
var a = {商品a:价格1,商品b:价格2……}
结果:
JSON.stringify(a)
“{“商品a”:价格1,”商品b”:价格2}”

function batch_add_business() {
  var userItems = document.getElementsByName('checkboxes[]');
  var data ={};
  var goods_id = "";
  for (var i=0; userItems[i]; i++)
  {
    if (userItems[i].checked)
    {
      var gd_id = userItems[i].value;
      var protocolPrice = document.getElementById("protocol_price_" + gd_id).value;
      protocolPrice = isNull(protocolPrice);
      if(protocolPrice == "") {
        protocolPrice = document.getElementById("get_price_" + gd_id ).value;
      } else if( isNaN(protocolPrice) || protocolPrice < 0) {
        cfm = '{$lang.shop_price_invalid}';
        return confirm(cfm);
      }
      goods_id += userItems[i].value + ":" + protocolPrice + ",";
      data[gd_id] = protocolPrice;
      var cmt = JSON.stringify(data);
    }
  }

  if(cmt != "") {
    goods_id = goods_id.substr(0, goods_id.length - 1);
    var args = "id=" + {$id} + "&goods_id=" + goods_id +"&cmt=" + cmt ;
    Ajax.call('business_goods_handler.php?act=batch_add',args, judge_batch_add, "POST", "JSON");
  }
}


传到服务端后用json_decode()解析json数据直接是 商品ID:协议价格 的关联数组,用key=>$value的形式循环插入数据即可。


/*------------------------------------------------------ */
//-- ajax返回批量新增协议商品
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'batch_add')
{
    admin_priv('business_edit');
    $bid = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : 0;
    $_REQUEST['cmt'] = isset($_REQUEST['cmt']) ? trim(stripcslashes(json_str_iconv($_REQUEST['cmt']))) : '';

    $data = json_decode($_REQUEST['cmt'],true);

    if (!empty($data))
    {

        foreach ($data as $k => $v ) {
            $sql = "insert into " . $ecs->table('business_good_rel') .
                " (b_id, goods_id, parent_menu, protocol_price, create_time) select '$bid', '$k', cat_id, '$v', now() from "
                . $ecs->table('goods')
                . " where goods_id in (" . $k
                . ") and goods_id not in (select goods_id from "
                . $ecs->table('business_good_rel')
                . "where b_id = '$bid')";
            $db->query($sql);
        }

        /* 记录管理员操作 */
        admin_log($bid.':'.$_REQUEST['goods_id'], 'add', 'add_business');
        make_json_success($_LANG['add_success_business']);
    }

    else
    {
        make_json_error($_LANG['add_fail_empty']);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值