自己增加ecshop商城内快速订购直接购买插件
更新时间:2016-08-12 点击量:1914
今天接到一个客户反馈,说他领导需要在他的商场中购买东西,但是按照一般的购物流程太繁琐,说能不能增加一个快速购买商品的功能, 商家本来想去网上找找 看看有没源码结果都木有或者行不通,所以反馈到优易软件小编这里, 和技术人员沟通了一下:实现快速购买的功能,只要修改几个文件里面的几行代码就能实现很简单,于是今天将技术人员写好的代码分享给大家。
1. 我们先找到模板 good.dwt ,这个文件,有人会说我不知道这个文件有什么用处,也不理解里面的代码的意思。这个没关系的 你只要按照我的教程步骤,直接复制我给你的代码 基本就可以。下面是优易软件提供的快速订购模板代码:
{insert_scripts files='shopping_flow.js'}
{insert_scripts files='region.js,utils.js'}
<script type="text/javascript">
region.isAdmin = false;
{foreach from=$lang.flow_js item=item key=key}
var {$key} = "{$item}";
{/foreach}
{literal}
onload = function() {
if (!document.all)
{
document.forms['theForm'].reset();
}
}
{/literal}
</script>
<form id="theForm" onsubmit="return checkConsignee(this)" name="theForm" method="post" action="flow.php">
<table width="918" border="0" cellpadding="5" cellspacing="1" bgcolor="#dddddd">
<!-- 购物车中存在实体商品显示国家和地区 -->
<tr>
<td bgcolor="#ffffff">购买数量:</td>
<td bgcolor="#ffffff"><input name="goods_number" type="text" /></td>
<td bgcolor="#ffffff">备注</td>
<td bgcolor="#ffffff">
<textarea ;font-family:宋体;color:rgb(51,51,51);font-size:14px">
</td>
<tr>
<td bgcolor="#ffffff">{$lang.consignee_name}:</td>
<td bgcolor="#ffffff"><input name="consignee" type="text" />
{$lang.require_field} </td>
<td bgcolor="#ffffff">{$lang.email_address}:</td>
<td bgcolor="#ffffff"><input name="email" type="text" />
{$lang.require_field}</td>
</tr>
<!-- 购物车中存在实体商品显示详细地址以及邮政编码 -->
<tr>
<td bgcolor="#ffffff">{$lang.detailed_address}:</td>
<td bgcolor="#ffffff"><input name="address" type="text" />
{$lang.require_field}</td>
<td bgcolor="#ffffff">{$lang.phone}:</td>
<td bgcolor="#ffffff"><input name="tel" type="text" />
{$lang.require_field}</td>
</tr>
<tr>
<td colspan="4" bgcolor="#ffffff">
<input name="goods_id" type="hidden" value="{$goods.goods_id}" />
<input name="goods_name" type="hidden" value="{$goods.goods_style_name}" />
<input name="goods_sn" type="hidden" value="{$goods.goods_sn}" />
<input name="goods_price" type="hidden" value="{$goods.shop_price}" />
<input type="image" src="images/bnt_subOrder.gif" />
<input type="hidden" name="step" value="nowbuy" />
</td>
</tr>
</table>
</form>
然后保存 上后台 清除下缓存 然后 随便点个商品页 看看 效果,是不是觉得少了 我觉得 快速订购 为何叫快速订购 就是 没那么繁琐的填单,用户都懒 ,我也懒 所以 就 加那么多, 是不是发现 有几个文字不出来只有冒号 不急 我们继续来 ,
2. 找到你的语言包 我的是\languages\zh_cn , 找出 common.php 要添加新的语言
/* 快速订购板涉及常用语言项*/
$_LANG['flow_js']['consignee_not_null'] = '收货人姓名不能为空!';
$_LANG['flow_js']['country_not_null'] = '请您选择收货人所在国家!';
$_LANG['flow_js']['province_not_null'] = '请您选择收货人所在省份!';
$_LANG['flow_js']['city_not_null'] = '请您选择收货人所在城市!';
$_LANG['flow_js']['district_not_null'] = '请您选择收货人所在区域!';
$_LANG['flow_js']['invalid_email'] = '您输入的邮件地址不是一个合法的邮件地址。';
$_LANG['flow_js']['address_not_null'] = '收货人的详细地址不能为空!';
$_LANG['flow_js']['tele_not_null'] = '电话不能为空!';
$_LANG['flow_js']['shipping_not_null'] = '请您选择配送方式!';
$_LANG['flow_js']['payment_not_null'] = '请您选择支付方式!';
$_LANG['flow_js']['goodsattr_style'] = 1;
$_LANG['flow_js']['tele_invaild'] = '电话号码不有效的号码';
$_LANG['flow_js']['zip_not_num'] = '邮政编码只能填写数字';
$_LANG['flow_js']['mobile_invaild'] = '手机号码不是合法号码';
$_LANG['consignee_address'] = '收货地址';
$_LANG['consignee_name'] = '收货人姓名';
$_LANG['country_province'] = '配送区域';
$_LANG['please_select'] = '请选择';
$_LANG['city_district'] = '城市/地区';
$_LANG['email_address'] = '电子邮件地址';
$_LANG['detailed_address'] = '详细地址';
$_LANG['postalcode'] = '邮政编码';
$_LANG['phone'] = '电话';
你可以放在最底下 这样好些 方便以后找 后台清除缓存 看看效果 出来了吧 最基本的已经实现了。 你可以点点提交 看看 是不是有判断效果。我们还要额外加一个商品数量的判断 找到 根目录下的js/shopping_flow.js 在 600行左右里面添加 这2个JS
if (!Utils.isNumber(frm.elements['goods_number'].value))
{
err = true;
msg.push("购买数量不是个有效果数字");
}
if (Utils.isEmpty(frm.elements['goods_number'].value))
{
err = true;
msg.push("购买数不能为空");
}
3. 然后看后台程序代码 因为我们是王flow.php提交,所以我们需要吧 根目录下的flow.php拿出来做修改 ,你找到1778 行左右 跟新购物车 外面 加上这句话
/*------------------------------------------------------ */
//-- 快速购买操作,提交到数据库
/*------------------------------------------------------ */
elseif ($_REQUEST['step'] == 'nowbuy')
{
include_once('includes/lib_clips.php');
include_once('includes/lib_payment.php');
/* 检查商品库存 */
/* 如果使用库存,且下订单时减库存,则减少库存 */
if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_PLACE)
{
$cart_goods_stock = get_cart_goods();
$_cart_goods_stock = array();
foreach ($cart_goods_stock['goods_list'] as $value)
{
$_cart_goods_stock[$value['rec_id']] = $value['goods_number'];
}
flow_cart_stock($_cart_goods_stock);
unset($cart_goods_stock, $_cart_goods_stock);
}
$_POST['how_oos'] = isset($_POST['how_oos']) ? intval($_POST['how_oos']) : 0;
$_POST['card_message'] = isset($_POST['card_message']) ? htmlspecialchars($_POST['card_message']) : '';
$_POST['inv_type'] = !empty($_POST['inv_type']) ? htmlspecialchars($_POST['inv_type']) : '';
$_POST['inv_payee'] = isset($_POST['inv_payee']) ? htmlspecialchars($_POST['inv_payee']) : '';
$_POST['inv_content'] = isset($_POST['inv_content']) ? htmlspecialchars($_POST['inv_content']) : '';
$_POST['postscript'] = isset($_POST['postscript']) ? htmlspecialchars($_POST['postscript']) : '';
$order = array(
'shipping_id' => intval($_POST['shipping']),
'pay_id' => intval($_POST['payment']),
'pack_id' => isset($_POST['pack']) ? intval($_POST['pack']) : 0,
'card_id' => isset($_POST['card']) ? intval($_POST['card']) : 0,
'card_message' => trim($_POST['card_message']),
'surplus' => isset($_POST['surplus']) ? floatval($_POST['surplus']) : 0.00,
'integral' => isset($_POST['integral']) ? intval($_POST['integral']) : 0,
'bonus_id' => isset($_POST['bonus']) ? intval($_POST['bonus']) : 0,
'need_inv' => empty($_POST['need_inv']) ? 0 : 1,
'inv_type' => $_POST['inv_type'],
'consignee' => $_POST['consignee'],
'address' => $_POST['address'],
'tel' => $_POST['tel'],
'email' => $_POST['email'],
'goods_amount' => $_POST['goods_price'],
'bodys' => $_POST['bodys'],
'inv_payee' => trim($_POST['inv_payee']),
'inv_content' => $_POST['inv_content'],
'postscript' => trim($_POST['postscript']),
'how_oos' => isset($_LANG['oos'][$_POST['how_oos']]) ? addslashes($_LANG['oos'][$_POST['how_oos']]) : '',
'need_insure' => isset($_POST['need_insure']) ? intval($_POST['need_insure']) : 0,
'user_id' => $_SESSION['user_id'],
'add_time' => gmtime(),
'order_status' => OS_UNCONFIRMED,
'shipping_status' => SS_UNSHIPPED,
'pay_status' => PS_UNPAYED,
'agency_id' => get_agency_by_regions(array($consignee['country'], $consignee['province'], $consignee['city'], $consignee['district']))
);
/* 插入订单表 */
$error_no = 0;
do
{
$order['order_sn'] = get_order_sn(); //获取新订单号
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('order_info'), $order, 'INSERT');
$error_no = $GLOBALS['db']->errno();
if ($error_no > 0 && $error_no != 1062)
{
die($GLOBALS['db']->errorMsg());
}
}
while ($error_no == 1062); //如果是订单号重复则重新提交数据
$new_order_id = $db->insert_id();
$order['order_id'] = $new_order_id;
$goods_id = $_POST['goods_id'];
$goods_name = $_POST['goods_name'];
$goods_sn = $_POST['goods_sn'];
$goods_number = $_POST['goods_number'];
$goods_price = $_POST['goods_price'];
/* 插入订单商品 */
$sql = "INSERT INTO " . $ecs->table('order_goods') . "( " .
"order_id, goods_id, goods_name, goods_sn, goods_number,goods_price ) ".
"VALUES ('$new_order_id','$goods_id','$goods_name','$goods_sn','$goods_number','$goods_price')";
$db->query($sql);
if(!empty($order['shipping_name']))
{
$order['shipping_name']=trim(stripcslashes($order['shipping_name']));
}
/* 订单信息 */
$smarty->assign('order', $order);
$smarty->assign('total', $total);
$smarty->assign('goods_list', $cart_goods);
$smarty->assign('order_submit_back', sprintf($_LANG['order_submit_back'], $_LANG['back_home'], $_LANG['goto_user_center'])); // 返回提示
user_uc_call('add_feed', array($order['order_id'], BUY_GOODS)); //推送feed到uc
unset($_SESSION['flow_consignee']); // 清除session中保存的收货人信息
unset($_SESSION['flow_order']);
unset($_SESSION['direct_shopping']);
}
这段 的基本意思是 入库 进入 订单表 和 订单商品表 把你前台的数据入库,
4 .结尾 写出订单号, 找出flow.dwt 你可以查找 done 这是系统自己的最后 我们可以在他下面 添加我的这段话
<!-- {if $step eq "nowbuy"} -->
<!-- 订单提交成功 -->
<div ;font-family:宋体;color:rgb(51,51,51);font-size:14px">
<table width="99%" border="0" cellpadding="15" cellspacing="0" bgcolor="#fff" ;font-family:宋体;color:rgb(51,51,51);font-size:14px">
<tr>
<td bgcolor="#FFFFFF">
<h6 ;font-family:宋体;color:rgb(51,51,51);font-size:14px">
</td>
</tr>
</table>
<!-- {/if} -->
5.是不是发现 有个备注在订单页面不显示 现在我们让他现实 不需要的就可以不看了 就可以去测试了 首先在sql里面加入
ALTER TABLE ecs_order_info ADD bodys text
意思大家都知道 我就不说了
我们主要要改2个地方进入 根目录的admin 找到 order.php 在第5000 行 的o.money_paid,后面添加o.bodys,后保存 然后在找到 \admin\templates\order_list.htm 然后
添加 <th>备注</th> 和 <td valign="top" nowrap="nowrap">{$order.bodys}</td> 一个标题 一个 现实的 这些我东西怎么放我就不说了 懒 哈哈~! 结束了 ... 我的本地出来 网上 不知道为什么 少了什么 判断都不判断 真烦,如果有高手看到这代码 有错或有更好的写法 ,请告诉我,只想变NB ,顶ecshop
如果文章对您有帮助,就打赏一个吧