1.进入admin->includes->inc_menu.PHP中此文件为定义左侧功能模块超链接

2.添加include/inc_menu.php秒杀管理超链接找链接

  1. $modules['03_promotion']['16_seckill']       = 'seckill_goods.php?act=add';

3.找到languages/zh_cn/admin/common.php 添加秒杀功能

  1. $_LANG['16_seckill']='秒杀管理';

4.添加权限管理中的秒杀权限

1>向数据库中添加秒杀权限,包括查看秒杀表与添加秒杀

数据库表中的数据:ecs_admin_action

2>找到languages/zh_cn/admin/priv_action.php

  1. //秒杀管理
  2. $_LANG['seckill']         = '秒杀管理';
  3. $_LANG['seckill_list']         = '秒杀显示';
  4. $_LANG['seckill_add']         = '秒杀添加';

3>找到添加include/inc_priv.php 添加秒杀权限的加载配置

  1. //秒杀管理
  2. $purview['16_seckill']        = 'seckill';

配置完成后

打开 后台>权限管理>管理员列表>分配权限

3.配置秒杀的语言包

在languages/zh_cn/admin/下配置seckill_goods.php;

  1. <?php
  2. /**
  3. * ECSHOP 管理中心秒杀活动语言文件
  4. * ============================================================================
  5. * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。
  6. * 网站地址: http://www.ecshop.com;
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * $Author: liubo $
  12. * $Id: seckill.php 17217 2011-01-19 06:29:08Z liubo $
  13. */
  14. /* menu */
  15. $_LANG['seckill_list'] = '秒杀活动列表';
  16. $_LANG['add_seckill'] = '添加秒杀活动';
  17. $_LANG['edit_seckill'] = '编辑秒杀活动';
  18. $_LANG['seckill_log'] = '秒杀活动出价记录';
  19. $_LANG['continue_add_seckill'] = '继续添加秒杀活动';
  20. $_LANG['back_seckill_list'] = '返回秒杀活动列表';
  21. $_LANG['add_seckill_ok'] = '添加秒杀活动成功';
  22. $_LANG['edit_seckill_ok'] = '编辑秒杀活动成功';
  23. $_LANG['settle_deposit_ok'] = '处理冻结的保证金成功';
  24. /* list */
  25. $_LANG['act_is_going'] = '仅显示进行中的活动';
  26. $_LANG['act_name'] = '秒杀活动名称';
  27. $_LANG['goods_name'] = '商品名称';
  28. $_LANG['start_time'] = '开始时间';
  29. $_LANG['end_time'] = '结束时间';
  30. $_LANG['deposit'] = '保证金';
  31. $_LANG['start_price'] = '起拍价';
  32. $_LANG['end_price'] = '一口价';
  33. $_LANG['amplitude'] = '加价幅度';
  34. $_LANG['seckill_not_exist'] = '您要操作的秒杀活动不存在';
  35. $_LANG['seckill_cannot_remove'] = '该秒杀活动已经有人出价,不能删除';
  36. $_LANG['js_languages']['batch_drop_confirm'] = '您确实要删除选中的秒杀活动吗?';
  37. $_LANG['batch_drop_ok'] = '操作完成(已经有人出价的秒杀活动不能删除)';
  38. $_LANG['no_record_selected'] = '没有选择记录';
  39. $_LANG['label_goods_num']='秒杀数量:';
  40. /* info */
  41. $_LANG['label_act_name'] = '秒杀活动名称:';
  42. $_LANG['notice_act_name'] = '如果留空,取秒杀商品的名称(该名称仅用于后台,前台不会显示)';
  43. $_LANG['label_act_desc'] = '秒杀活动描述:';
  44. $_LANG['label_search_goods'] = '根据商品编号、名称或货号搜索商品';
  45. $_LANG['label_goods_name'] = '秒杀商品名称:';
  46. $_LANG['label_start_time'] = '秒杀开始时间:';
  47. $_LANG['label_end_time'] = '秒杀结束时间:';
  48. $_LANG['label_status'] = '当前状态:';
  49. $_LANG['label_start_price'] = '起拍价:';
  50. $_LANG['label_end_price'] = '一口价:';
  51. $_LANG['label_no_top'] = '无封顶';
  52. $_LANG['label_amplitude'] = '加价幅度:';
  53. $_LANG['label_deposit'] = '保证金:';
  54. $_LANG['bid_user_count'] = '已有 %s 个买家出价';
  55. $_LANG['settle_frozen_money'] = '怎样处理买家的冻结资金?';
  56. $_LANG['unfreeze'] = '解冻保证金';
  57. $_LANG['deduct'] = '扣除保证金';
  58. $_LANG['invalid_status'] = '当前状态不正确';
  59. $_LANG['no_deposit'] = '没有保证金需要处理';
  60. $_LANG['unfreeze_seckill_deposit'] = '解冻秒杀活动的保证金:%s';
  61. $_LANG['deduct_seckill_deposit'] = '扣除秒杀活动的保证金:%s';
  62. $_LANG['seckill_status'][PRE_START] = '未开始';
  63. $_LANG['seckill_status'][UNDER_WAY] = '进行中';
  64. $_LANG['seckill_status'][FINISHED] = '已结束';
  65. $_LANG['seckill_status'][SETTLED] = '已结束';
  66. $_LANG['pls_search_goods'] = '请先搜索商品';
  67. $_LANG['search_result_empty'] = '没有找到商品,请重新搜索';
  68. $_LANG['pls_select_goods'] = '请选择秒杀商品';
  69. $_LANG['goods_not_exist'] = '您要秒杀的商品不存在';
  70. $_LANG['js_languages']['start_price_not_number'] = '起拍价格式不正确(数字)';
  71. $_LANG['js_languages']['end_price_not_number'] = '一口价格式不正确(数字)';
  72. $_LANG['js_languages']['end_gt_start'] = '一口价应该大于起拍价';
  73. $_LANG['js_languages']['amplitude_not_number'] = '加价幅度格式不正确(数字)';
  74. $_LANG['js_languages']['deposit_not_number'] = '保证金格式不正确(数字)';
  75. $_LANG['js_languages']['start_lt_end'] = '秒杀开始时间不能大于结束时间';
  76. $_LANG['js_languages']['search_is_null'] = '没有搜索到任何商品,请重新搜索';
  77. /* log */
  78. $_LANG['bid_user'] = '买家';
  79. $_LANG['bid_price'] = '出价';
  80. $_LANG['bid_time'] = '时间';
  81. $_LANG['status'] = '状态';
  82. ?>

4.仿照拍卖功能做秒杀功能

进入upload->admin中建立seckill_goods.php代码如下(就是复制auction.php中复制将auction改为seckill)在这里我已经写好了直接复制

  1. <?php
  2. /**
  3. * ECSHOP 管理中心拍卖活动管理
  4. * ============================================================================
  5. * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。
  6. * 网站地址: http://www.ecshop.com;
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * $Author: liubo $
  12. * $Id: auction.php 17217 2011-01-19 06:29:08Z liubo $
  13. */
  14. define('IN_ECS', true);
  15. require(dirname(__FILE__) . '/includes/init.php');
  16. require(ROOT_PATH . 'includes/lib_goods.php');
  17. $exc = new exchange($ecs->table('goods_activity'), $db, 'act_id', 'act_name');
  18. /*------------------------------------------------------ */
  19. //-- 活动列表页
  20. /*------------------------------------------------------ */
  21. if ($_REQUEST['act'] == 'list')
  22. {
  23. /* 检查权限 */
  24. admin_priv('seckill');
  25. /* 模板赋值 */
  26. $smarty->assign('full_page',   1);
  27. $smarty->assign('ur_here',     $_LANG['seckill_list']);
  28. $smarty->assign('action_link', array('href' => 'seckill.php?act=add', 'text' => $_LANG['add_seckill']));
  29. $list = seckill_list();
  30. $smarty->assign('seckill_list', $list['item']);
  31. $smarty->assign('filter',       $list['filter']);
  32. $smarty->assign('record_count', $list['record_count']);
  33. $smarty->assign('page_count',   $list['page_count']);
  34. $smarty->assign('form_action','add');
  35. $sort_flag  = sort_flag($list['filter']);
  36. $smarty->assign($sort_flag['tag'], $sort_flag['img']);
  37. /* 显示商品列表页面 */
  38. assign_query_info();
  39. $smarty->display('seckill_list.htm');
  40. }
  41. /*------------------------------------------------------ */
  42. //-- 分页、排序、查询
  43. /*------------------------------------------------------ */
  44. elseif ($_REQUEST['act'] == 'query')
  45. {
  46. $list = seckill_list();
  47. $smarty->assign('seckill_list', $list['item']);
  48. $smarty->assign('filter',       $list['filter']);
  49. $smarty->assign('record_count', $list['record_count']);
  50. $smarty->assign('page_count',   $list['page_count']);
  51. $sort_flag  = sort_flag($list['filter']);
  52. $smarty->assign($sort_flag['tag'], $sort_flag['img']);
  53. make_json_result($smarty->fetch('seckill_list.htm'), '',
  54. array('filter' => $list['filter'], 'page_count' => $list['page_count']));
  55. }
  56. /*------------------------------------------------------ */
  57. //-- 删除
  58. /*------------------------------------------------------ */
  59. elseif ($_REQUEST['act'] == 'remove')
  60. {
  61. check_authz_json('seckill');
  62. $id = intval($_GET['id']);
  63. $name = $auction['act_name'];
  64. $exc->drop($id);
  65. /* 记日志 */
  66. admin_log($name, 'remove', 'seckill');
  67. /* 清除缓存 */
  68. clear_cache_files();
  69. $url = 'seckill_goods.php?act=query&' . str_replace('act=remove', '', $_SERVER['QUERY_STRING']);
  70. ecs_header("Location: $url\n");
  71. exit;
  72. }
  73. /*------------------------------------------------------ */
  74. //-- 批量操作
  75. /*------------------------------------------------------ */
  76. elseif ($_REQUEST['act'] == 'batch')
  77. {
  78. /* 取得要操作的记录编号 */
  79. if (empty($_POST['checkboxes']))
  80. {
  81. sys_msg($_LANG['no_record_selected']);
  82. }
  83. else
  84. {
  85. /* 检查权限 */
  86. admin_priv('auction');
  87. $ids = $_POST['checkboxes'];
  88. /* 删除记录 */
  89. $sql = "DELETE FROM " . $ecs->table('goods_activity') .
  90. " WHERE act_id " . db_create_in($ids) .
  91. " AND act_type = '" . GAT_SECKILL . "'";
  92. $db->query($sql);
  93. /* 记日志 */
  94. admin_log('', 'batch_remove', 'seckill');
  95. /* 清除缓存 */
  96. clear_cache_files();
  97. $links[] = array('text' => $_LANG['back_seckill_list'], 'href' => 'seckill_goods.php?act=list&' . list_link_postfix());
  98. sys_msg($_LANG['batch_drop_ok'], 0, $links);
  99. }
  100. }
  101. /*------------------------------------------------------ */
  102. //-- 添加、编辑
  103. /*------------------------------------------------------ */
  104. elseif ($_REQUEST['act'] == 'add' || $_REQUEST['act'] == 'edit')
  105. {
  106. /* 检查权限 */
  107. admin_priv('seckill');
  108. /* 是否添加 */
  109. $is_add = $_REQUEST['act'] == 'add';
  110. $smarty->assign('form_action', $is_add ? 'insert' : 'update');
  111. /* 初始化、取得拍卖活动信息 */
  112. if ($is_add)
  113. {
  114. $auction = array(
  115. 'act_id'        => 0,
  116. 'act_name'      => '',
  117. 'act_desc'      => '',
  118. 'goods_id'      => 0,
  119. 'product_id'    => 0,
  120. 'goods_name'    => $_LANG['pls_search_goods'],
  121. 'start_time'    => date('Y-m-d', time() + 86400),
  122. 'end_time'      => date('Y-m-d', time() + 4 * 86400),
  123. );
  124. }
  125. /*
  126. else
  127. {
  128. if (empty($_GET['id']))
  129. {
  130. sys_msg('invalid param');
  131. }
  132. $id = intval($_GET['id']);
  133. $auction = auction_info($id, true);
  134. if (empty($auction))
  135. {
  136. sys_msg($_LANG['auction_not_exist']);
  137. }
  138. $auction['status'] = $_LANG['auction_status'][$auction['status_no']];
  139. $smarty->assign('bid_user_count', sprintf($_LANG['bid_user_count'], $auction['bid_user_count']));
  140. }
  141. */
  142. $smarty->assign('seckill', $seckill);
  143. /* 赋值时间控件的语言 */
  144. $smarty->assign('cfg_lang', $_CFG['lang']);
  145. /* 商品货品表 */
  146. $smarty->assign('good_products_select', get_good_products_select($seckill['goods_id']));
  147. /* 显示模板 */
  148. if ($is_add)
  149. {
  150. $smarty->assign('ur_here', $_LANG['add_seckill']);
  151. }
  152. $smarty->assign('action_link', list_link($is_add));
  153. assign_query_info();
  154. $smarty->display('seckill_goods_info.htm');
  155. }
  156. /*------------------------------------------------------ */
  157. //-- 添加、编辑后提交
  158. /*------------------------------------------------------ */
  159. elseif ($_REQUEST['act'] == 'insert' || $_REQUEST['act'] == 'update')
  160. {
  161. /* 检查权限 */
  162. admin_priv('seckill');
  163. /* 是否添加 */
  164. $is_add = $_REQUEST['act'] == 'insert';
  165. /* 检查是否选择了商品 */
  166. $goods_id = intval($_POST['goods_id']);
  167. if ($goods_id <= 0)
  168. {
  169. sys_msg($_LANG['pls_select_goods']);
  170. }
  171. $sql = "SELECT goods_name FROM " . $ecs->table('goods') . " WHERE goods_id = '$goods_id'";
  172. $row = $db->getRow($sql);
  173. if (empty($row))
  174. {
  175. sys_msg($_LANG['goods_not_exist']);
  176. }
  177. $goods_name = $row['goods_name'];
  178. /* 提交值 */
  179. $seckill = array(
  180. 'act_id'        => intval($_POST['id']),
  181. 'act_name'      => empty($_POST['act_name']) ? $goods_name : sub_str($_POST['act_name'], 255, false),
  182. 'act_desc'      => $_POST['act_desc'],
  183. 'act_type'      => GAT_SECKILL,
  184. 'goods_id'      => $goods_id,
  185. 'product_id'    => empty($_POST['product_id']) ? 0 : $_POST['product_id'],
  186. 'goods_name'    => $goods_name,
  187. 'start_time'    => local_strtotime($_POST['start_time']),
  188. 'end_time'      => local_strtotime($_POST['end_time']),
  189. 'ext_info'      => serialize(array(
  190. 'start_price'   => round(floatval($_POST['start_price']), 2),
  191. 'seckill_num'     => round(floatval($_POST['seckill_num']), 2)
  192. ))
  193. );
  194. /* 保存数据 */
  195. if ($is_add)
  196. {
  197. $seckill['is_finished'] = 0;
  198. $db->autoExecute($ecs->table('goods_activity'), $seckill, 'INSERT');
  199. $seckill['act_id'] = $db->insert_id();
  200. }
  201. else
  202. {
  203. $db->autoExecute($ecs->table('goods_activity'), $seckill, 'UPDATE', "act_id = '$seckill[act_id]'");
  204. }
  205. /* 记日志 */
  206. if ($is_add)
  207. {
  208. admin_log($auction['act_name'], 'add', 'seckill');
  209. }
  210. else
  211. {
  212. admin_log($auction['act_name'], 'edit', 'seckill');
  213. }
  214. /* 清除缓存 */
  215. clear_cache_files();
  216. /* 提示信息 */
  217. if ($is_add)
  218. {
  219. $links = array(
  220. array('href' => 'seckill_goods.php?act=add', 'text' => $_LANG['continue_add_seckill']),
  221. array('href' => 'seckill_goods.php?act=list', 'text' => $_LANG['back_seckill_list'])
  222. );
  223. sys_msg($_LANG['add_seckill_ok'], 0, $links);
  224. }
  225. else
  226. {
  227. $links = array(
  228. array('href' => 'seckill_goods.php?act=list&' . list_link_postfix(), 'text' => $_LANG['back_seckill_list'])
  229. );
  230. sys_msg($_LANG['edit_seckill_ok'], 0, $links);
  231. }
  232. }
  233. /*------------------------------------------------------ */
  234. //-- 处理冻结资金
  235. /*------------------------------------------------------ */
  236. elseif ($_REQUEST['act'] == 'settle_money')
  237. {
  238. /* 检查权限 */
  239. admin_priv('auction');
  240. /* 检查参数 */
  241. if (empty($_POST['id']))
  242. {
  243. sys_msg('invalid param');
  244. }
  245. $id = intval($_POST['id']);
  246. $auction = auction_info($id);
  247. if (empty($auction))
  248. {
  249. sys_msg($_LANG['auction_not_exist']);
  250. }
  251. if ($auction['status_no'] != FINISHED)
  252. {
  253. sys_msg($_LANG['invalid_status']);
  254. }
  255. if ($auction['deposit'] <= 0)
  256. {
  257. sys_msg($_LANG['no_deposit']);
  258. }
  259. /* 处理保证金 */
  260. $exc->edit("is_finished = 2", $id); // 修改状态
  261. if (isset($_POST['unfreeze']))
  262. {
  263. /* 解冻 */
  264. log_account_change($auction['last_bid']['bid_user'], $auction['deposit'],
  265. (-1) * $auction['deposit'], 0, 0, sprintf($_LANG['unfreeze_auction_deposit'], $auction['act_name']));
  266. }
  267. else
  268. {
  269. /* 扣除 */
  270. log_account_change($auction['last_bid']['bid_user'], 0,
  271. (-1) * $auction['deposit'], 0, 0, sprintf($_LANG['deduct_auction_deposit'], $auction['act_name']));
  272. }
  273. /* 记日志 */
  274. admin_log($auction['act_name'], 'edit', 'auction');
  275. /* 清除缓存 */
  276. clear_cache_files();
  277. /* 提示信息 */
  278. sys_msg($_LANG['settle_deposit_ok']);
  279. }
  280. /*------------------------------------------------------ */
  281. //-- 搜索商品
  282. /*------------------------------------------------------ */
  283. elseif ($_REQUEST['act'] == 'search_goods')
  284. {
  285. check_authz_json('auction');
  286. include_once(ROOT_PATH . 'includes/cls_json.php');
  287. $json   = new JSON;
  288. $filter = $json->decode($_GET['JSON']);
  289. $arr['goods']    = get_goods_list($filter);
  290. if (!empty($arr['goods'][0]['goods_id']))
  291. {
  292. $arr['products'] = get_good_products($arr['goods'][0]['goods_id']);
  293. }
  294. make_json_result($arr);
  295. }
  296. /*------------------------------------------------------ */
  297. //-- 搜索货品
  298. /*------------------------------------------------------ */
  299. elseif ($_REQUEST['act'] == 'search_products')
  300. {
  301. include_once(ROOT_PATH . 'includes/cls_json.php');
  302. $json = new JSON;
  303. $filters = $json->decode($_GET['JSON']);
  304. if (!empty($filters->goods_id))
  305. {
  306. $arr['products'] = get_good_products($filters->goods_id);
  307. }
  308. make_json_result($arr);
  309. }
  310. /*
  311. * 取得秒杀活动列表
  312. * @return   array
  313. */
  314. function seckill_list()
  315. {
  316. $result = get_filter();
  317. if ($result === false)
  318. {
  319. /* 过滤条件 */
  320. $filter['keyword']    = empty($_REQUEST['keyword']) ? '' : trim($_REQUEST['keyword']);
  321. if (isset($_REQUEST['is_ajax']) && $_REQUEST['is_ajax'] == 1)
  322. {
  323. $filter['keyword'] = json_str_iconv($filter['keyword']);
  324. }
  325. $filter['is_going']   = empty($_REQUEST['is_going']) ? 0 : 1;
  326. $filter['sort_by']    = empty($_REQUEST['sort_by']) ? 'act_id' : trim($_REQUEST['sort_by']);
  327. $filter['sort_order'] = empty($_REQUEST['sort_order']) ? 'DESC' : trim($_REQUEST['sort_order']);
  328. $where = "";
  329. if (!empty($filter['keyword']))
  330. {
  331. $where .= " AND goods_name LIKE '%" . mysql_like_quote($filter['keyword']) . "%'";
  332. }
  333. if ($filter['is_going'])
  334. {
  335. $now = gmtime();
  336. $where .= " AND is_finished = 0 AND start_time <= '$now' AND end_time >= '$now' ";
  337. }
  338. $sql = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('goods_activity') .
  339. " WHERE act_type = '" . GAT_SECKILL . "' $where";
  340. $filter['record_count'] = $GLOBALS['db']->getOne($sql);
  341. /* 分页大小 */
  342. $filter = page_and_size($filter);
  343. /* 查询 */
  344. $sql = "SELECT * ".
  345. "FROM " . $GLOBALS['ecs']->table('goods_activity') .
  346. " WHERE act_type = '" . GAT_SECKILL . "' $where ".
  347. " ORDER BY $filter[sort_by] $filter[sort_order] ".
  348. " LIMIT ". $filter['start'] .", $filter[page_size]";
  349. $filter['keyword'] = stripslashes($filter['keyword']);
  350. set_filter($filter, $sql);
  351. }
  352. else
  353. {
  354. $sql    = $result['sql'];
  355. $filter = $result['filter'];
  356. }
  357. $res = $GLOBALS['db']->query($sql);
  358. $list = array();
  359. while ($row = $GLOBALS['db']->fetchRow($res))
  360. {
  361. $ext_info = unserialize($row['ext_info']);
  362. $arr = array_merge($row, $ext_info);
  363. $arr['start_time']  = local_date('Y-m-d H:i', $arr['start_time']);
  364. $arr['end_time']    = local_date('Y-m-d H:i', $arr['end_time']);
  365. $list[] = $arr;
  366. }
  367. $arr = array('item' => $list, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']);
  368. return $arr;
  369. }
  370. /**
  371. * 列表链接
  372. * @param   bool    $is_add     是否添加(插入)
  373. * @param   string  $text       文字
  374. * @return  array('href' => $href, 'text' => $text)
  375. */
  376. function list_link($is_add = true, $text = '')
  377. {
  378. $href = 'seckill_goods.php?act=list';
  379. if (!$is_add)
  380. {
  381. $href .= '&' . list_link_postfix();
  382. }
  383. if ($text == '')
  384. {
  385. $text = $GLOBALS['_LANG']['seckill_list'];
  386. }
  387. return array('href' => $href, 'text' => $text);
  388. }
  389. ?>

5.在加载秒杀对应常量找到includes/inc_constant.php添加秒杀功能对应的常量

  1. define('GAT_SECKILL',               5);

6.在upload->admin->templates中建立两个html页面进行显示和添加分别是sckill_goods_info.php和seckill_list.php

1.seckill_list.php代码如下:

  1. <!-- $Id: auction_info.htm 16992 2010-01-19 08:45:49Z wangleisvn $ -->
  2. {include file="pageheader.htm"}
  3. <script type="text/javascript" src="../js/calendar.php?lang={$cfg_lang}"></script>
  4. <link href="../js/calendar/calendar.css" rel="stylesheet" type="text/css" />
  5. {insert_scripts files="validator.js,../js/transport.js,../js/utils.js}
  6. <div class="main-div">
  7. <form method="post" action="seckill_goods.php" name="theForm" enctype="multipart/form-data" onSubmit="return validate()">
  8. <table cellspacing="1" cellpadding="3" width="100%">
  9. <tr>
  10. <td class="label">{$lang.label_act_name}</td>
  11. <td><input name="act_name" type="text" id="act_name" value="{$seckill.act_name}" maxlength="60" />
  12. {$lang.notice_act_name}</td>
  13. </tr>
  14. <tr>
  15. <td class="label">{$lang.label_act_desc}</td>
  16. <td><textarea  name="act_desc" cols="60" rows="4" id="act_desc">{$seckill.act_desc}</textarea></td>
  17. </tr>
  18. <tr>
  19. <td align="right">{$lang.label_search_goods}</td>
  20. <td><input name="keyword" type="text" id="keyword">
  21. <input name="search" type="button" id="search" value="{$lang.button_search}" class="button" onclick="searchGoods()" /></td>
  22. </tr>
  23. <tr>
  24. <td class="label">{$lang.label_goods_name}</td>
  25. <td><select name="goods_id" id="goods_id" onchange="javascript:change_good_products();">
  26. <option value="{$seckill.goods_id}" selected="selected">{$seckill.goods_name}</option>
  27. </select>
  28. <select name="product_id" {if $auction.product_id <= 0}style="display:none"{/if}>
  29. {html_options options=$good_products_select selected=$auction.product_id}
  30. </select></td>
  31. </tr>
  32. <tr>
  33. <td class="label">{$lang.label_start_time}</td>
  34. <td><input name="start_time" type="text" id="start_time" value="{$seckill.start_time}" readonly="readonly" />
  35. <input name="selbtn1" type="button" id="selbtn1" onclick="return showCalendar('start_time', '%Y-%m-%d %H:%M', '24', false, 'selbtn1');" value="{$lang.btn_select}" class="button" /></td>
  36. </tr>
  37. <tr>
  38. <td class="label">{$lang.label_end_time}</td>
  39. <td><input name="end_time" type="text" id="end_time" value="{$seckill.end_time}" readonly="readonly" />
  40. <input name="selbtn2" type="button" id="selbtn2" onclick="return showCalendar('end_time', '%Y-%m-%d %H:%M', '24', false, 'selbtn2');" value="{$lang.btn_select}" class="button" /></td>
  41. </tr>
  42. <tr>
  43. <td class="label">{$lang.label_start_price}</td>
  44. <td><input name="start_price" type="text" id="start_price" value=""></td>
  45. </tr>
  46. <tr>
  47. <td class="label">{$lang.label_goods_num}</td>
  48. <td><input name="seckill_num" type="text" id="seckill_num" value=""></td>
  49. </tr>
  50. <tr>
  51. <td colspan="2" align="center">
  52. {if $seckill.act_id eq 0 or $seckill.status_no eq "0" or $auction.status_no eq "1"}
  53. <input type="submit" class="button" value="{$lang.button_submit}" />
  54. <input type="reset" class="button" value="{$lang.button_reset}" />
  55. <input type="hidden" name="act" value="{$form_action}" />
  56. {elseif $seckill.status_no eq "2"}
  57. {$lang.settle_frozen_money}
  58. <input type="submit" class="button" value="{$lang.unfreeze}" name="unfreeze" />
  59. <input type="submit" class="button" value="{$lang.deduct}" name="deduct" />
  60. <input type="hidden" name="act" value="settle_money" />
  61. {/if}
  62. <input type="hidden" name="id" value="{$seckill.act_id}" /></td>
  63. </tr>
  64. </table>
  65. </form>
  66. </div>
  67. {literal}
  68. <script language="JavaScript">
  69. <!--
  70. var display_yes = (Browser.isIE) ? 'block' : 'table-row-group';
  71. onload = function()
  72. {
  73. // 开始检查订单
  74. startCheckOrder();
  75. }
  76. /**
  77. * 检查表单输入的数据
  78. */
  79. function validate()
  80. {
  81. validator = new Validator("theForm");
  82. validator.isNumber('start_price', start_price_not_number, false);
  83. validator.isNumber('end_price', end_price_not_number, false);
  84. if (document.forms['theForm'].elements['no_top'].checked == false)
  85. {
  86. validator.gt('end_price', 'start_price', end_gt_start);
  87. }
  88. validator.isNumber('amplitude', amplitude_not_number, false);
  89. validator.isNumber('deposit', deposit_not_number, false);
  90. validator.islt('start_time', 'end_time', start_lt_end);
  91. return validator.passed();
  92. }
  93. function checked_no_top(o)
  94. {
  95. if (o.checked)
  96. {
  97. o.form.elements['end_price'].value = '';
  98. o.form.elements['end_price'].disabled = true;
  99. }
  100. else
  101. {
  102. o.form.elements['end_price'].disabled = false;
  103. }
  104. }
  105. function searchGoods()
  106. {
  107. var filter = new Object;
  108. filter.keyword  = document.forms['theForm'].elements['keyword'].value;
  109. Ajax.call('auction.php?is_ajax=1&act=search_goods', filter, searchGoodsResponse, 'GET', 'JSON');
  110. }
  111. function searchGoodsResponse(result)
  112. {
  113. if (result.error == '1' && result.message != '')
  114. {
  115. alert(result.message);
  116. return;
  117. }
  118. var frm = document.forms['theForm'];
  119. var sel = frm.elements['goods_id'];
  120. var sp = frm.elements['product_id'];
  121. if (result.error == 0)
  122. {
  123. /* 清除 options */
  124. sel.length = 0;
  125. sp.length = 0;
  126. /* 创建 options */
  127. var goods = result.content.goods;
  128. if (goods)
  129. {
  130. for (i = 0; i < goods.length; i++)
  131. {
  132. var opt = document.createElement("OPTION");
  133. opt.value = goods[i].goods_id;
  134. opt.text  = goods[i].goods_name;
  135. sel.options.add(opt);
  136. }
  137. }
  138. else
  139. {
  140. var opt = document.createElement("OPTION");
  141. opt.value = 0;
  142. opt.text  = search_is_null;
  143. sel.options.add(opt);
  144. }
  145. /* 创建 product options */
  146. var products = result.content.products;
  147. if (products)
  148. {
  149. sp.style.display = display_yes;
  150. for (i = 0; i < products.length; i++)
  151. {
  152. var p_opt = document.createElement("OPTION");
  153. p_opt.value = products[i].product_id;
  154. p_opt.text  = products[i].goods_attr_str;
  155. sp.options.add(p_opt);
  156. }
  157. }
  158. else
  159. {
  160. sp.style.display = 'none';
  161. var p_opt = document.createElement("OPTION");
  162. p_opt.value = 0;
  163. p_opt.text  = search_is_null;
  164. sp.options.add(p_opt);
  165. }
  166. }
  167. return;
  168. }
  169. function change_good_products()
  170. {
  171. var filter = new Object;
  172. filter.goods_id = document.forms['theForm'].elements['goods_id'].value;
  173. Ajax.call('snatch.php?is_ajax=1&act=search_products', filter, searchProductsResponse, 'GET', 'JSON');
  174. }
  175. function searchProductsResponse(result)
  176. {
  177. var frm = document.forms['theForm'];
  178. var sp = frm.elements['product_id'];
  179. if (result.error == 0)
  180. {
  181. /* 清除 options */
  182. sp.length = 0;
  183. /* 创建 product options */
  184. var products = result.content.products;
  185. if (products.length)
  186. {
  187. sp.style.display = display_yes;
  188. for (i = 0; i < products.length; i++)
  189. {
  190. var p_opt = document.createElement("OPTION");
  191. p_opt.value = products[i].product_id;
  192. p_opt.text  = products[i].goods_attr_str;
  193. sp.options.add(p_opt);
  194. }
  195. }
  196. else
  197. {
  198. sp.style.display = 'none';
  199. var p_opt = document.createElement("OPTION");
  200. p_opt.value = 0;
  201. p_opt.text  = search_is_null;
  202. sp.options.add(p_opt);
  203. }
  204. }
  205. if (result.message.length > 0)
  206. {
  207. alert(result.message);
  208. }
  209. }
  210. //-->
  211. </script>
  212. {/literal}
  213. {include file="pagefooter.htm"}

2.seckill_goods_info.php代码如下:

  1. <!-- $Id: auction_info.htm 16992 2010-01-19 08:45:49Z wangleisvn $ -->
  2. {include file="pageheader.htm"}
  3. <script type="text/javascript" src="../js/calendar.php?lang={$cfg_lang}"></script>
  4. <link href="../js/calendar/calendar.css" rel="stylesheet" type="text/css" />
  5. {insert_scripts files="validator.js,../js/transport.js,../js/utils.js}
  6. <div class="main-div">
  7. <form method="post" action="seckill_goods.php" name="theForm" enctype="multipart/form-data" onSubmit="return validate()">
  8. <table cellspacing="1" cellpadding="3" width="100%">
  9. <tr>
  10. <td class="label">{$lang.label_act_name}</td>
  11. <td><input name="act_name" type="text" id="act_name" value="{$seckill.act_name}" maxlength="60" />
  12. {$lang.notice_act_name}</td>
  13. </tr>
  14. <tr>
  15. <td class="label">{$lang.label_act_desc}</td>
  16. <td><textarea  name="act_desc" cols="60" rows="4" id="act_desc">{$seckill.act_desc}</textarea></td>
  17. </tr>
  18. <tr>
  19. <td align="right">{$lang.label_search_goods}</td>
  20. <td><input name="keyword" type="text" id="keyword">
  21. <input name="search" type="button" id="search" value="{$lang.button_search}" class="button" onclick="searchGoods()" /></td>
  22. </tr>
  23. <tr>
  24. <td class="label">{$lang.label_goods_name}</td>
  25. <td><select name="goods_id" id="goods_id" onchange="javascript:change_good_products();">
  26. <option value="{$seckill.goods_id}" selected="selected">{$seckill.goods_name}</option>
  27. </select>
  28. <select name="product_id" {if $auction.product_id <= 0}style="display:none"{/if}>
  29. {html_options options=$good_products_select selected=$auction.product_id}
  30. </select></td>
  31. </tr>
  32. <tr>
  33. <td class="label">{$lang.label_start_time}</td>
  34. <td><input name="start_time" type="text" id="start_time" value="{$seckill.start_time}" readonly="readonly" />
  35. <input name="selbtn1" type="button" id="selbtn1" onclick="return showCalendar('start_time', '%Y-%m-%d %H:%M', '24', false, 'selbtn1');" value="{$lang.btn_select}" class="button" /></td>
  36. </tr>
  37. <tr>
  38. <td class="label">{$lang.label_end_time}</td>
  39. <td><input name="end_time" type="text" id="end_time" value="{$seckill.end_time}" readonly="readonly" />
  40. <input name="selbtn2" type="button" id="selbtn2" onclick="return showCalendar('end_time', '%Y-%m-%d %H:%M', '24', false, 'selbtn2');" value="{$lang.btn_select}" class="button" /></td>
  41. </tr>
  42. <tr>
  43. <td class="label">{$lang.label_start_price}</td>
  44. <td><input name="start_price" type="text" id="start_price" value=""></td>
  45. </tr>
  46. <tr>
  47. <td class="label">{$lang.label_goods_num}</td>
  48. <td><input name="seckill_num" type="text" id="seckill_num" value=""></td>
  49. </tr>
  50. <tr>
  51. <td colspan="2" align="center">
  52. {if $seckill.act_id eq 0 or $seckill.status_no eq "0" or $auction.status_no eq "1"}
  53. <input type="submit" class="button" value="{$lang.button_submit}" />
  54. <input type="reset" class="button" value="{$lang.button_reset}" />
  55. <input type="hidden" name="act" value="{$form_action}" />
  56. {elseif $seckill.status_no eq "2"}
  57. {$lang.settle_frozen_money}
  58. <input type="submit" class="button" value="{$lang.unfreeze}" name="unfreeze" />
  59. <input type="submit" class="button" value="{$lang.deduct}" name="deduct" />
  60. <input type="hidden" name="act" value="settle_money" />
  61. {/if}
  62. <input type="hidden" name="id" value="{$seckill.act_id}" /></td>
  63. </tr>
  64. </table>
  65. </form>
  66. </div>
  67. {literal}
  68. <script language="JavaScript">
  69. <!--
  70. var display_yes = (Browser.isIE) ? 'block' : 'table-row-group';
  71. onload = function()
  72. {
  73. // 开始检查订单
  74. startCheckOrder();
  75. }
  76. /**
  77. * 检查表单输入的数据
  78. */
  79. function validate()
  80. {
  81. validator = new Validator("theForm");
  82. validator.isNumber('start_price', start_price_not_number, false);
  83. validator.isNumber('end_price', end_price_not_number, false);
  84. if (document.forms['theForm'].elements['no_top'].checked == false)
  85. {
  86. validator.gt('end_price', 'start_price', end_gt_start);
  87. }
  88. validator.isNumber('amplitude', amplitude_not_number, false);
  89. validator.isNumber('deposit', deposit_not_number, false);
  90. validator.islt('start_time', 'end_time', start_lt_end);
  91. return validator.passed();
  92. }
  93. function checked_no_top(o)
  94. {
  95. if (o.checked)
  96. {
  97. o.form.elements['end_price'].value = '';
  98. o.form.elements['end_price'].disabled = true;
  99. }
  100. else
  101. {
  102. o.form.elements['end_price'].disabled = false;
  103. }
  104. }
  105. function searchGoods()
  106. {
  107. var filter = new Object;
  108. filter.keyword  = document.forms['theForm'].elements['keyword'].value;
  109. Ajax.call('auction.php?is_ajax=1&act=search_goods', filter, searchGoodsResponse, 'GET', 'JSON');
  110. }
  111. function searchGoodsResponse(result)
  112. {
  113. if (result.error == '1' && result.message != '')
  114. {
  115. alert(result.message);
  116. return;
  117. }
  118. var frm = document.forms['theForm'];
  119. var sel = frm.elements['goods_id'];
  120. var sp = frm.elements['product_id'];
  121. if (result.error == 0)
  122. {
  123. /* 清除 options */
  124. sel.length = 0;
  125. sp.length = 0;
  126. /* 创建 options */
  127. var goods = result.content.goods;
  128. if (goods)
  129. {
  130. for (i = 0; i < goods.length; i++)
  131. {
  132. var opt = document.createElement("OPTION");
  133. opt.value = goods[i].goods_id;
  134. opt.text  = goods[i].goods_name;
  135. sel.options.add(opt);
  136. }
  137. }
  138. else
  139. {
  140. var opt = document.createElement("OPTION");
  141. opt.value = 0;
  142. opt.text  = search_is_null;
  143. sel.options.add(opt);
  144. }
  145. /* 创建 product options */
  146. var products = result.content.products;
  147. if (products)
  148. {
  149. sp.style.display = display_yes;
  150. for (i = 0; i < products.length; i++)
  151. {
  152. var p_opt = document.createElement("OPTION");
  153. p_opt.value = products[i].product_id;
  154. p_opt.text  = products[i].goods_attr_str;
  155. sp.options.add(p_opt);
  156. }
  157. }
  158. else
  159. {
  160. sp.style.display = 'none';
  161. var p_opt = document.createElement("OPTION");
  162. p_opt.value = 0;
  163. p_opt.text  = search_is_null;
  164. sp.options.add(p_opt);
  165. }
  166. }
  167. return;
  168. }
  169. function change_good_products()
  170. {
  171. var filter = new Object;
  172. filter.goods_id = document.forms['theForm'].elements['goods_id'].value;
  173. Ajax.call('snatch.php?is_ajax=1&act=search_products', filter, searchProductsResponse, 'GET', 'JSON');
  174. }
  175. function searchProductsResponse(result)
  176. {
  177. var frm = document.forms['theForm'];
  178. var sp = frm.elements['product_id'];
  179. if (result.error == 0)
  180. {
  181. /* 清除 options */
  182. sp.length = 0;
  183. /* 创建 product options */
  184. var products = result.content.products;
  185. if (products.length)
  186. {
  187. sp.style.display = display_yes;
  188. for (i = 0; i < products.length; i++)
  189. {
  190. var p_opt = document.createElement("OPTION");
  191. p_opt.value = products[i].product_id;
  192. p_opt.text  = products[i].goods_attr_str;
  193. sp.options.add(p_opt);
  194. }
  195. }
  196. else
  197. {
  198. sp.style.display = 'none';
  199. var p_opt = document.createElement("OPTION");
  200. p_opt.value = 0;
  201. p_opt.text  = search_is_null;
  202. sp.options.add(p_opt);
  203. }
  204. }
  205. if (result.message.length > 0)
  206. {
  207. alert(result.message);
  208. }
  209. }
  210. //-->
  211. </script>
  212. {/literal}
  213. {include file="pagefooter.htm"}

7.在这里后台秒杀正式完成

显示结果:

ecshop二次开发之后台秒杀的更多相关文章

  1. EcShop二次开发系列教程–总纲

    EcShop作为老牌的B2C独立网店系统,功能非常全名,强大的文件.数据库缓存机制,保证前后台系统执行速度更快.系统平稳运行.但是过多的功能也或多或少的会影响到系统的整个效率,所有在使用EcShop搭 ...

  2. ecshop二次开发 给商品添加自定义字段

    说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. 抱着这种想法我在Ecshop的后台一顿找,不过肿么都木 ...

  3. Ecshop二次开发必备基础

    EcShop二次开发学习方法 近年来,随着互联网的发展,电子商务也跟着一起成长,B2B,C2C,B2C的电子商务模式也不断的成熟.这时催生出了众多电子商务相关的PHP开源产品.B2C方面有Ecshop ...

  4. EcShop二次开发学习方法和Ecshop二次开发必备基础

    ecshop二次开发学习方法 近年来,随着互联网的发展,电子商务也跟着一起成长,B2B,C2C,B2C的电子商务模式也不断的成熟.这时催生出了众多电子商务相关的php开源产品.B2C方面有Ecshop ...

  5. ECShop二次开发指南(一)

    ECSHOP是一套完整的网络商店解决方案,包括前台的商品展示.购物流程和强大易用的后台管理.由于 ecshop简单易用,使用者几乎可以在3几分钟简单的设置一下就可以拥有一个网上商店系统,所以很多的B2 ...

  6. EcShop二次开发学习方法

    EcShop二次开发学习方法 (2012-03-08 11:10:08) 转载▼ 标签: 京东 公用函数库 二次开发 sql语言 数据库设计 杂谈 分类: ecshop 近年来,随着互联网的发展,电子 ...

  7. ECSHOP二次开发指南

    ECSHOP二次开发指南 发布时间:2013-05-28 12:47:00   来源:   评论:0 点击: 次 [字号:大 中 小] QQ空间新浪微博腾讯微博人人网豆瓣网百度空间百度搜藏开心网复制更 ...

  8. ecshop二次开发之购物车常见问题

    1.ecshop二次开发中保存注册用户购物车数据解决方法:ecshop购物车是数据库中cart表来支持的,在ecshop表中rec_id是编号,user_id是注册用户的id,session_id表示 ...

  9. ecshop二次开发秒杀、限时折扣、清仓等功能

    限时抢购,秒杀商品的二次开发 1,先在后台admin/templates 中找goods_info.htm文件到促销部分,改为一个下拉列表的分别是促销,限时,秒杀,值分别是1,2,3这样,代码如下: ...

随机推荐

  1. wpf中在style的template寻找ControlTemplate和DataTemplate的控件

    一.WPF中的两棵树 WPF中每个控件的Template都是由ControlTemplate构成,ControlTemplate包含了构成该控件的各种子控件,这些子控件就构成了VisualTree:而 ...

  2. wpf之渐变色LinearGradientBrush

    xmal代码: <Grid Name="grid1"> <Grid.Background> <LinearGradientBrush> < ...

  3. 简单的sequence unpacking

    t = (1, 2, ‘hl’) x, y, z = t 上述方法可用于任何sequence

  4. HZOI20190818模拟25题解

    题面:https://www.cnblogs.com/Juve/articles/11372379.html A:字符串 其实是CATALAN数水题... 和网格一毛一样:https://www.cn ...

  5. pycharm 安装与激活

    ---恢复内容开始--- 环境:Windows 专业版 1.下载安装 1.到官网下载专业版(专业版功能更全(但要激活码),社区版免费) 2.下载完后双击.exe 文件进行安装 NEXT 下一步 NEX ...

  6. c++容器中map的应用

    原文链接:https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关 ...

  7. Python学习之循环--绕圈圈(蛇形盘)

    效果图: 注意哦,右边多出来的一点不是程序有问题,是打印的时候我用的\t,但100,三个字符顶格的时候给顶出去的,我太懒了,不想再调输出格式了,就这么凑合看吧 实现代码: sum = int(inpu ...

  8. 两天了。照着SVN的界面画的一个界面。

      可以选择显示哪些列. 界面上的东西,都简单,麻烦的是它的下层.下层全部用svn server的服务器自带的svn.exe来支持. 有些位置要启动svn.exe不止一次.所以参数的来回传递,来回组合 ...

  9. Luogu P1712 [NOI2016]区间(线段树)

    P1712 [NOI2016]区间 题意 题目描述 在数轴上有 \(N\) 个闭区间 \([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\) .现在要从中选出 \(M\) 个区间, ...

  10. 跟我一起做一个vue的小项目(七)

    先看下我们所做项目的效果 这些数据都是我们在data中定义的,不是从后端数据中请求的.那么 接下来我们使用axios渲染数据 npm install axios --save 每个组件里面的数据都不相 ...