㈠ 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($act1, array('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/moles/cron/order_auto_confirm.php
<?php
if (!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_moles) && $set_moles == TRUE){
$i = isset($moles) ? count($moles) : 0; /* 代碼 */
$moles[$i]['code'] = basename(__FILE__, '.php'); /* 描述對應的語言項 */
$moles[$i]['desc'] = 'order_auto_confirm_desc'; /* 作者 */
$moles[$i]['author'] = '超神學院'; /* 網址 */
$moles[$i]['website'] = 'http://www.jk191.com'; /* 版本號 */
$moles[$i]['version'] = '1.0.0'; /* 配置信息 */
$moles[$i]['config'] = array(
array('name' => 'order_auto_confirm_count', 'type' => 'select', 'value' => '10'),
);
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_id, array('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_e_field() . " WHERE order_id = '$order_id' LIMIT 1"; return $GLOBALS['db']->query($sql);
}
?>
3.新建php文件/languages/zh_cn/cron/order_auto_confirm.php
<?php
global $_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}後面加入:
<!--{if $order.status == 0 && $order.pay_status == 0 }-->
<script type="text/javascript" src="../js/calendar.php?lang={$cfg_lang}"></script>
<link href="../js/calendar/calendar.css" rel="stylesheet" type="text/css" />
<div id="order_auto_cron" style="display: inline-block; width: 300px;">
<!--{if !$cron}-->
<a href="javascript:;" id="ccd" onclick="document.getElementById('select_time').style.display=''; this.style.display='none';">{$lang.order_auto}</a>
<span id="select_time" style="display: none;">{$lang.order_auto_time}
<input type="text" id="order_cron_time" value="" onclick="return showCalendar('order_cron_time', '%Y-%m-%d %H:%M:%S', '24', false, 'order_cron_time');" name="order_cron_time">
<input type="button" value="保存" id="ccd_save" onclick="order_cron({$order.order_id}, 'add');">
<a href="javascript:;" onclick="document.getElementById('select_time').style.display='none'; document.getElementById('ccd').style.display='';">{$lang.op_cancel}</a>
</span>
<!--{elseif $cron.order_status == 0}-->
{$cron.execute_time}
<a href="javascript:;" onclick="if(confirm('確定要刪除定時執行任務嗎?')){order_cron({$order.order_id}, 'cancel');}else{return false;}">{$lang.op_cancel}</a>
<!--{else $cron.order_status == 1}-->
{$cron.update_time}
<!--{/if}-->
</div>
<!--{/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.到後台"系統設置"->"計劃任務"點擊安裝
㈡ 關於PHP、ecshop出現Notice:Undefined index: goods_nuber C:\includes\lib_order.php on line 1618
看起來象寫錯了
$total['goods_nuber'] 是不是應該是 $total['goods_number']
nuber少寫了一個字母m
如果不對的話,你可以直接在 while ($row = $GLOBALS['db']->fetchRow($res)) 前面加一行:
$total['goods_nuber'] = 0;
㈢ php ecshop 這兩句的意思是
第一句dirname(__FILE__)得到的是當前文件的絕對路徑,也就是引入includes文件夾下的init.php文件。
第二句,ROOT_PATH應該是在前面定義的常量,你可以查看一下,也是引入文件,includes文件夾下的lib_order.php文件。
㈣ ecshop中lib_order.php文件在哪
你自己網站根目錄的 includes文件夾里
㈤ ecshop PHP怎麼調用方法
函數沒有讀取數據出來,返回的是sql語句而已,需要讀取數據,並返回數組才可以:
functionget_index_brand()
{
$sql="selectbrand_id,brand_name,brand_logo,site_urlfrom".$GLOBALS['ecs']->table('brand')."whereis_show='1'orderbysort_orderdesclimit24";
return$GLOBALS['db']->getAll($sql);//讀取數據。
}
㈥ 如何自定義添加ecshop管理員許可權
1、在後台「推薦管理」里添加「推薦人分成」、「會員分成」兩個操作功能以及許可權
index.php?act=menu
incluedes/inc_priv.php:許可權對照表、inc_menu.php:管理中心菜單數組
languages/zh_cn/admin/common.php:管理中心公共語言文件
1)在common.php管理中心公共語言文件中添加
$_LANG['affiliate_reg'] = '推薦人分成';
$_LANG['affiliate_self'] = '會員分成';
2)在inc_menu.php管理中心菜單數組中添加
$moles['15_rec']['affiliate_reg'] = 'affiliate_reg.php?act=reg_list'; //注冊金額上級分成
$moles['15_rec']['affiliate_self'] = 'affiliate_self.php?act=self_list'; //注冊金額會員分成
3)在許可權對照表inc_priv.php文件中添加
$purview['affiliate_reg'] = 'affiliate_reg';
$purview['affiliate_self'] = 'affiliate_self';
2、向表ecs_admin_action中插入兩個許可權affiliate_reg、affiliate_self
insert into ecs_admin_action(parent_id,action_code,relevance) values(5,'affiliate_reg',''), (5,'affiliate_self','');
3、 管理員信息以及許可權管理程序的修改 privilege.php
languages/zh_cn/admin/priv_action.php:許可權名稱語言文件
1)在許可權名稱語言文件中「系統設置部分添加許可權」處添加
$_LANG['affiliate_reg' = '推薦人分成';
$_LANG['affiliate_self'] = '會員分成';
ECSHOP角色許可權設置完全指導手冊
1、ECSHOP管理中心添加許可權項
第一步添加許可權碼語言包信息
如中文語言包文件languages/zh_cn/admin/priv_action.php 添加如下代碼: //提貨單管理許可權
$_LANG['shipment_view'] = '提貨單管理';
第二步把許可權代碼寫入許可權代碼表admin_action:
注意:首先確定當前添加的action_code許可權碼所屬的parent_id父菜 單ID。
如本例「提貨單管理」菜單作為 訂單管理 的子菜單添加,
需要在語言包文件languages/zh_cn/admin/priv_action.php找到「訂單管理」對應的語言項:
$_LANG['order_manage'] = '訂單管理';,
其中 「order_manage」 為許可權碼。
再到admin_action數據表中找到
action_code欄位值為 order_manage的記錄行的action_id值「6」。所以,許可權碼插入資料庫中的SQL腳本如下:
INSERT INTO `tjautoland_com`.`admin_action` ( `action_id` , `parent_id` , `action_code` , `relevance` ) VALUES ( NULL , '6', 'shipment_view', '' );
此時,「管理中心-修改角色」時,就可以看到「訂單管理」 許可權組中已經存在「提車單管理」。
2、ECSHOP管理中心添加菜單項
第一步添加菜單代碼對應的語言項
如在languages/zh_cn/admin/common.php添加中文語言項:
$_LANG['09_delivery_order'] = '提車單列表';
注意:菜單項代碼必須唯一。
第二步添加菜單代碼相應的菜單鏈接URL
如在admin/includes/inc_menu.php添加如下代碼:
$moles['04_order']['09_delivery_order'] = 'order.php?act=shipment_list';
說明:
'04_order'是「訂單管理」的菜單項代碼,其中文語言定義內容在languages/zh_cn/admin/common.php文件:$_LANG['04_order'] = '訂單管理';
注意:如果不需要菜單項的許可權碼,此步可省略。
3、ECSHOP管理中心菜單項綁定許可權
在admin/includes/inc_priv.php添加菜單代碼和許可權代碼綁定的代碼。 綁定語法:
$purview['菜單代碼'] = '許可權代碼';
說明:'菜單代碼'對應admin/includes/inc_menu.php文件中的菜單代碼,'許可權代碼'在後台語言文件 languages/zh_cn/admin/priv_action.php有對應語言標簽,許可權代碼需寫入許可權表
admin_action。如下:
第1操作的提車的管理許可權綁定
第2操作的提車單列表菜單。
$purview['09_delivery_order'] = 'shipment_view';
注意:如果不需要菜單項的許可權碼,此步可省略。
4、ECSHOP管理中心程序添加許可權判斷
調用admin_priv函數,判斷管理員對某一個操作是否有許可權。
該函數根據當前對應的action_code,然後再和用戶session裡面的action_list做匹配,以此來決定是否可以繼續執行。
如添加「提貨單管理」許可權判斷代碼如下:
admin_priv('shipment_view');
㈦ ecshop如何使訂單號生成時在訂單號中間插入商品ID那個lib_order.php的文件要怎麼修改!高手求解救!
這個你需要打開 lib_order.php 然後修改一下這個文件,調用商品的id 即可。
㈧ 如何解決ecshop訂單修改價格後無法再次付款問題
該疑問的解決辦法是找到admin/order.php中的以下代碼
/**
* 更新訂單對應的 pay_log
* 假如未付出,修正付出金額;不然,生成新的付出log
* @param int $order_id 訂單id
*/
function update_pay_log($order_id)
{
$order_id = intval($order_id);
if ($order_id > 0)
{
$sql = "SELECT order_amount FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE order_id = '$order_id'";
$order_amount = $GLOBALS['db']->getOne($sql);
if (!is_null($order_amount))
{
$sql = "SELECT log_id FROM " . $GLOBALS['ecs']->table('pay_log') .
" WHERE order_id = '$order_id'" .
" AND order_type = '" . PAY_ORDER . "'" .
" AND is_paid = 0";
$log_id = intval($GLOBALS['db']->getOne($sql));
if ($log_id > 0)
{
/* 未付款,更新付出金額 */
$sql = "UPDATE " . $GLOBALS['ecs']->table('pay_log') .
" SET order_amount = '$order_amount' " .
"WHERE log_id = '$log_id' LIMIT 1";
}
else
{
/* 已付款,生成新的pay_log */
$sql = "INSERT INTO " . $GLOBALS['ecs']->table('pay_log') .
" (order_id, order_amount, order_type, is_paid)" .
"VALUES('$order_id', '$order_amount', '" . PAY_ORDER . "', 0)";
}
$GLOBALS['db']->query($sql);
}
}
}
用以下代碼將其覆蓋
/**
* 更新訂單對應的 pay_log
* 假如未付出,修正付出金額;不然,生成新的付出log
* @param int $order_id 訂單id
*/
function update_pay_log($order_id)
{
$order_id = intval($order_id);
if ($order_id > 0)
{
$sql = "SELECT order_amount FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE order_id = '$order_id'";
$order_amount = $GLOBALS['db']->getOne($sql);
if (!is_null($order_amount))
{
$sql = "SELECT log_id, order_amount FROM " . $GLOBALS['ecs']->table('pay_log') .
" WHERE order_id = '$order_id'" .
" AND order_type = '" . PAY_ORDER . "'" .
" AND is_paid = 0";
$log_info =$GLOBALS['db']->GetRow($sql);
if ($log_info && $log_info['order_amount'] == $order_amount)
{
$log_id = intval($log_info['log_id']);
/* 未付款,更新付出金額 */
$sql = "UPDATE " . $GLOBALS['ecs']->table('pay_log') .
" SET order_amount = '$order_amount' " .
"WHERE log_id = '$log_id' LIMIT 1";
}
else
{
/* 已付款,生成新的pay_log */
$sql = "INSERT INTO " . $GLOBALS['ecs']->table('pay_log') .
" (order_id, order_amount, order_type, is_paid)" .
"VALUES('$order_id', '$order_amount', '" . PAY_ORDER . "', 0)";
}
$GLOBALS['db']->query($sql);
}
}
}
㈨ ecshop 中怎麼獲取客戶端ip