自己增加ecshop商城内快速订购直接购买插件

更新时间:2016-08-12 点击量:970


 

 

        今天接到一个客户反馈,说他领导需要在他的商场中购买东西,但是按照一般的购物流程太繁琐,说能不能增加一个快速购买商品的功能, 商家本来想去网上找找 看看有没源码结果都木有或者行不通,所以反馈到优易软件小编这里, 和技术人员沟通了一下:实现快速购买的功能,只要修改几个文件里面的几行代码就能实现很简单,于是今天将技术人员写好的代码分享给大家。


1470983932686141.gif

        

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

支付宝扫码打赏 微信打赏

如果文章对您有帮助,就打赏一个吧

相关联的商品

在线客服

客户服务

热线电话:

0755-36656507 15889489919 服务时间:

周一到周六:9:00-18:00

在线QQ客服

在线微信客服

关于我们 常见问题

支付方式 加盟合作

提交需求
优惠红包 购物车0 反馈留言 返回顶部