ecshop教程

ECSHOP商品订单自动确认二次开辟教程

ecshop教程 51源码 11-29 人阅读

通过本教程可以实现ECSHOP商城订单自动确认!

1、运行sql代码,生成数据库

CREATE TABLE `ecs_order_auto_confirm` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`order_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',`order_sn` VARCHAR(20) NOT NULL,`execute_time` INT(10) UNSIGNED NOT NULL DEFAULT '0',`order_status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0未确定,1已经确定',`addtime` INT(10) UNSIGNED NOT NULL DEFAULT '0',`update_time` INT(10) UNSIGNED NOT NULL DEFAULT '0',PRIMARY KEY (`id`),UNIQUE INDEX `order_id` (`order_id`),INDEX `execute_time` (`execute_time`))COMMENT='订单定期自动确定'COLLATE='utf8_general_ci'ENGINE=MyISAM;

2./admin/order.php加入以下代码:

elseif($_REQUEST['act'] == 'order_cron'){    $act1 empty($_POST['act1']) ? 0 : $_POST['act1'];    if(empty($act1) || !in_array($act1array('add''cancel'))) make_json_response('', -1, '未知请求act1');    $order_id intval($_POST['order_id']);    $order = order_info($order_id);    if(empty($order)) make_json_response('', -2, '没有此订单ID');    if($order['order_status']) make_json_response('', -3, '此订单已经确认,不用自动确认');    if($order['pay_status']) make_json_response('', -4, '此订单支付状态已经变动,无法添加任务');    if($act1 == 'add'){        $order_cron_time empty($_POST['order_cron_time']) ? 0 : $_POST['order_cron_time'];        if(empty($order_cron_time)) make_json_response('', -10, '请求的时间错误');        $sql 'select order_id from '.$GLOBALS['ecs']->table('order_auto_confirm').' where order_id='.$order_id;        $rs  = $db->getRow($sql);        if($rs['order_id'] == $order_id){            make_json_response('', -30, '此订单任务已经存在,不能重复添加');        }        $execute_time = local_strtotime($order_cron_time);        $sql    = "insert into ".$GLOBALS['ecs']->table('order_auto_confirm')."(order_id, order_sn, execute_time, order_status, addtime) values(".$order_id.",'".$order['order_sn']."',".$execute_time.", 0, ".local_gettime().")";        $result $db->query($sql);        if($result){            make_json_response('', 0, '');        }        make_json_response('', -9, '添加任务计划失败');    }elseif($act1 == 'cancel'){        $sql 'delete  from '.$GLOBALS['ecs']->table('order_auto_confirm').' where order_id='.$order_id.' and order_status=0 ';        $db->query($sql);        make_json_response('', 0, '');    }}

在elseif ($_REQUEST['act'] == 'info')里加入:

 //取自动确定订单信息    $sql 'select order_status, execute_time, addtime, update_time from '.$GLOBALS['ecs']->table('order_auto_confirm').' where order_id='.$order['order_id'];    $cron$db->getRow($sql);    if(!empty($cron)){        if($cron['order_status'] == 1)            $cron['update_time'] = sprintf($_LANG['order_auto_croned'], local_date('Y-m-d H:i:s'$cron['update_time']));        else            $cron['execute_time']= sprintf($_LANG['order_auto_cron'], local_date('Y-m-d H:i:s'$cron['execute_time']));    }    $smarty->assign('cron'$cron);

2.新建php文件/includes/modules/cron/order_auto_confirm.php

<?phpif (!defined('IN_ECS')){    die('Hacking attempt');}require_once(ROOT_PATH . 'includes/lib_order.php');$cron_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/cron/order_auto_confirm.php';if (file_exists($cron_lang)){    global $_LANG;    include_once($cron_lang);}/* 模块的基本信息 */if (isset($set_modules) && $set_modules == TRUE){&nbsp;&nbsp; &nbsp;$i = isset($modules) ? count($modules) : 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 代码 */&nbsp;&nbsp; &nbsp;$modules[$i]['code']&nbsp;&nbsp;&nbsp; = basename(__FILE__'.php');&nbsp;&nbsp; &nbsp;/* 描述对应的语言项 */&nbsp;&nbsp; &nbsp;$modules[$i]['desc']&nbsp;&nbsp;&nbsp; = 'order_auto_confirm_desc';&nbsp;&nbsp; &nbsp;/* 作者 */&nbsp;&nbsp; &nbsp;$modules[$i]['author']&nbsp; = '超神学院';&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 网址 */&nbsp;&nbsp; &nbsp;$modules[$i]['website'] = 'http://www.jk191.com';&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 版本号 */&nbsp;&nbsp; &nbsp;$modules[$i]['version'] = '1.0.0';&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 配置信息 */&nbsp;&nbsp; &nbsp;$modules[$i]['config']&nbsp; = array(&nbsp;&nbsp; &nbsp;array('name' => 'order_auto_confirm_count''type' => 'select''value' => '10'),&nbsp;&nbsp;&nbsp; );&nbsp;&nbsp; &nbsp;return;}$time  = gmtime();$limit empty($cron['order_auto_confirm_count']) ? 5 : $cron['order_auto_confirm_count'];$sql   "SELECT * FROM " $GLOBALS['ecs']->table('order_auto_confirm') . " WHERE execute_time <= ".$time." and order_status=0 LIMIT $limit";$autodb$db->getAll($sql);$i     = 0;foreach ($autodb as $key => $val){    $order_id $val['order_id'];    $order_sn $val['order_sn'];    /* 标记订单为已确认 */    $update_status = update_order($order_idarray('order_status' => OS_CONFIRMED, 'confirm_time' => gmtime()));    update_order_amount($order_id);        /* 记录log */    $action_note "计划任务:定期自动确定订单,订单号:".$order_sn.",执行状态:".($update_status '成功' '失败');    order_action($order_sn, OS_CONFIRMED, SS_UNSHIPPED, PS_UNPAYED, $action_note'system_cron');        /* 如果原来状态不是“未确认”,且使用库存,且下订单时减库存,则减少库存 */    if ($val['order_status'] != OS_UNCONFIRMED && $_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_PLACE){        change_order_goods_storage($order_id, true, SDT_PLACE);    }    if($update_status){        $i  += 1;        $sql "update " $GLOBALS['ecs']->table('order_auto_confirm') . " set order_status=1, update_time=".$time." where order_id=".$order_id;        $db->query($sql);    }}$string '此次共更新:'.$i.'条数据';echo $string;file_put_contents('./a.txt',  $time '----' date('Y-m-d H:i:s').$string."\r\n", FILE_APPEND); /** * 更新订单总金额 * @param   int     $order_id   订单id * @return  bool */function update_order_amount($order_id){    include_once(ROOT_PATH . 'includes/lib_order.php');    //更新订单总金额    $sql "UPDATE " $GLOBALS['ecs']->table('order_info') . " SET order_amount = " . order_due_field() . " WHERE order_id = '$order_id' LIMIT 1";    return $GLOBALS['db']->query($sql);}?>

3.新建php文件/languages/zh_cn/cron/order_auto_confirm.php

<?phpglobal $_LANG;$_LANG['order_auto_confirm']     = '订单定期自动确定';$_LANG['order_auto_confirm_desc']               = '定期自动确定订单';$_LANG['order_auto_confirm_count']              = '每次处理记录个数';$_LANG['order_auto_confirm_count_range']['5']   = '5';$_LANG['order_auto_confirm_count_range']['10']  = '10';$_LANG['order_auto_confirm_count_range']['15']  = '15';$_LANG['order_auto_confirm_count_range']['20']  = '20';?>


4.在/languages/zh_cn/admin/order.php里加入:

/* 订单自动确认 */$_LANG['order_auto_croned'] = '此订单于 %s 已被确认';$_LANG['order_auto_cron']   = '此订单于 %s 进行定时确认';$_LANG['order_auto']        = '<font color=red>将此订单加入自动定时确认</font>';$_LANG['order_auto_time']   = '自动确认时间:';


5./admin/themes/order_info.htm 在:{$lang.base_info}后面加入:

&nbsp;&nbsp;&nbsp; <!--{if $order.status == 0 && $order.pay_status == 0 }-->&nbsp;&nbsp; &nbsp;<script type="text/javascript" src="../js/calendar.php?lang={$cfg_lang}"></script>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<link href="../js/calendar/calendar.css" rel="stylesheet" type="text/css" />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<div id="order_auto_cron" style="display: inline-block; width: 300px;">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <!--{if !$cron}-->&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<a href="javascript:;" id="ccd" onclick="document.getElementById('select_time').style.display=''; this.style.display='none';">{$lang.order_auto}</a>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<span id="select_time" style="display: none;">{$lang.order_auto_time}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<input type="text" id="order_cron_time" value=""&nbsp; onclick="return showCalendar('order_cron_time', '%Y-%m-%d %H:%M:%S', '24', false, 'order_cron_time');"&nbsp;&nbsp; name="order_cron_time">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="button" value="保存" id="ccd_save"&nbsp; onclick="order_cron({$order.order_id}, 'add');">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="javascript:;" onclick="document.getElementById('select_time').style.display='none'; document.getElementById('ccd').style.display='';">{$lang.op_cancel}</a>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;</span>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <!--{elseif $cron.order_status == 0}-->&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{$cron.execute_time}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<a href="javascript:;" onclick="if(confirm('确定要删除定时执行任务吗?')){order_cron({$order.order_id}, 'cancel');}else{return false;}">{$lang.op_cancel}</a>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <!--{else $cron.order_status == 1}-->&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{$cron.update_time}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <!--{/if}-->&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;</div>&nbsp;&nbsp; &nbsp;<!--{/if}-->

在此页面的JS里面加入:

function order_cron(order_id, act){    var order_cron_time = 0;    if(act == 'add'){        order_cron_time = document.getElementById('order_cron_time').value;        if(!order_cron_time){            alert('无法获取时间');            return false;        }    }    Ajax.call('order.php?act=order_cron''order_id=' + order_id + '&act1=' + act + '&order_cron_time=' + order_cron_time, order_cron_response, 'POST''JSON');}function order_cron_response(res){    if (res.error == 0){        alert('保存成功');    }    else{        alert(res.message);    }    return false;}


6.需保证在themes\default\library\page_footer.lbi文件中存在

{insert name='query_info'}

7.到后台"系统设置"->"计划任务"点击安装


大功告成,以后订单按时自动确认了