用的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']);
}
}