前台效果展示:

2.

3.

后台展示效果:

代码实现:

一、             添加菜单项:路径admin\includes\inc_menu.PHP

[python] view plaincopy
  1. $modules['18_ticket_manage']['01_ticket_list']  = 'ticket.php?act=list';
  2. $modules['18_ticket_manage']['02_ticket_add']  = 'ticket.php?act=add';

配置菜单语言

打开 /languages/zh_cn/admin/common.php文件,添加语言

[python] view plaincopy
  1. //菜单—添加
  2. $_LANG['18_ticket_manage'] = '电子票管理';
  3. //电子票管理
  4. $_LANG['01_ticket_list'] = '电子票列表';
  5. $_LANG['02_ticket_add'] = '添加电子票';

二、上传图片路径:在upload\data\创建ticket_pic文件夹,图片上传路径

三:数据库:

建立ecs_ticket表

建立ecs_ticket_cart

、添加电子票(upload\admin\templates\ticket_add.htm)

1、创建添加电子票模板ticket_add.htm(自己按照ticket表更改布局);
(复制品牌模板upload\admin\templates\brand_info.htm);

以下是修改过后的ticket_add.html

[python] view plaincopy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>SHOP 管理中心 - 品牌管理 </title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <link href="styles/general.css" rel="stylesheet" type="text/css" />
  7. <link href="styles/main.css" rel="stylesheet" type="text/css" />
  8. <script type="text/javascript" src="../js/calendar.php?lang={$cfg_lang}"></script>
  9. <link href="../js/calendar/calendar.css" rel="stylesheet" type="text/css" />
  10. </head>
  11. <body>
  12. <h1>
  13. <span class="action-span"><a href="ticket.php?act=list">电子票列表</a></span>
  14. <span class="action-span1"><a href="index.php?act=main">SHOP 管理中心</a> </span><span id="search_id" class="action-span1"> - 添加电子票 </span>
  15. <div style="clear:both"></div>
  16. </h1>
  17. <div class="main-div">
  18. <form method="post" action="ticket.php" name="theForm" enctype="multipart/form-data" οnsubmit="return validate()">
  19. <table cellspacing="1" cellpadding="3" width="100%">
  20. <tbody><tr>
  21. <td class="label">电影名称</td>
  22. <td><input type="text" name="film_name" maxlength="60" value=""><span class="require-field">*</span></td>
  23. </tr>
  24. <tr>
  25. <td class="label"><a href="javascript:showNotice('warn_brandlogo');" title="点击此处查看提示信息">
  26. <img src="data:images/notice.gif" width="16" height="16" border="0" alt="点击此处查看提示信息"></a>电影海报</td>
  27. <td><input type="file" name="film_pic" id="logo" size="45">    <br><span class="notice-span" style="display:block" id="warn_brandlogo">
  28. 请上传图片,做为影片宣传海报!        </span>
  29. </td>
  30. </tr>
  31. <tr>
  32. <td class="label">开场时间</td>
  33. <td><input name="start_time" type="text" id="start_time" value="{$auction.start_time}" readonly="readonly" />
  34. <input name="selbtn1" type="button" id="selbtn1" οnclick="return showCalendar('start_time', '%Y-%m-%d %H:%M', '24', false, 'selbtn1');" value="{$lang.btn_select}" class="button" />
  35. </td>
  36. </tr>
  37. <tr>
  38. <td class="label">禁止入场时间</td>
  39. <td><input name="end_time" type="text" id="end_time" value="{$auction.end_time}" readonly="readonly" />
  40. <input name="selbtn2" type="button" id="selbtn2" οnclick="return showCalendar('end_time', '%Y-%m-%d %H:%M', '24', false, 'selbtn2');" value="{$lang.btn_select}" class="button" />
  41. </td>
  42. </tr>
  43. <tr>
  44. <td class="label">座位数量</td>
  45. <td><input type="text" name="ticket_num" maxlength="40" size="15" value="50"></td>
  46. </tr>
  47. <tr>
  48. <td class="label">票价</td>
  49. <td><input type="text" name="ticket_price" maxlength="40" size="15" value="50"></td>
  50. </tr>
  51. <tr>
  52. <td class="label">影片描述</td>
  53. <td><textarea name="film_desc" cols="60" rows="4"></textarea></td>
  54. </tr>
  55. <tr>
  56. <td colspan="2" align="center"><br>
  57. <input type="submit" class="button" value=" 确定 ">
  58. <input type="reset" class="button" value=" 重置 ">
  59. <input type="hidden" name="act" value="{$form_action}">
  60. </td>
  61. </tr>
  62. </tbody></table>
  63. </form>
  64. </div>
  65. </body>
  66. </html>

四、创建upload\admin\ticket.php (复制品牌控制器upload\admin\brand.php)

以下是修改好的ticket.php

[python] view plaincopy
  1. <?php
  2. /**
  3. * ECSHOP 管理中心电子票管理
  4. * ============================================================================
  5. * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。
  6. * 网站地址: http://www.ecshop.com;
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * $Author: liubo $
  12. * $Id: brand.php 17217 2011-01-19 06:29:08Z liubo $
  13. */
  14. define('IN_ECS', true);
  15. require(dirname(__FILE__) . '/includes/init.php');
  16. include_once(ROOT_PATH . 'includes/cls_image.php');
  17. $image = new cls_image($_CFG['bgcolor']);
  18. $exc = new exchange($ecs->table("ticket"), $db, 'ticket_id', 'file_name');
  19. /*------------------------------------------------------ */
  20. //-- 电子票列表
  21. /*------------------------------------------------------ */
  22. if ($_REQUEST['act'] == 'list')
  23. {
  24. $smarty->assign('ur_here',      '电子票列表');
  25. $smarty->assign('action_link',  array('text' =>$_LANG['02_ticket_add'] , 'href' => 'ticket.php?act=add'));
  26. $smarty->assign('full_page',    1);
  27. //查询电子票信息(改动的部分)
  28. $sql = "select * from ". $GLOBALS['ecs']->table('ticket');
  29. $res = $GLOBALS['db']->query($sql); //$res资源类型
  30. $list = array();
  31. while($row = $GLOBALS['db']->fetchRow($res))
  32. {
  33. $row['run_time'] = local_date('Y-m-d H:i',$row['run_time']);
  34. $row['ban_time'] = local_date('Y-m-d H:i',$row['ban_time']);
  35. $list[] = $row;
  36. }
  37. $smarty->assign('ticket_list',$list);
  38. assign_query_info();
  39. $smarty->display('ticket_list.htm');
  40. }
  41. /*------------------------------------------------------ */
  42. //-- 添加电子票
  43. /*------------------------------------------------------ */
  44. elseif ($_REQUEST['act'] == 'add')
  45. {
  46. /* 权限判断 */
  47. admin_priv('goods_manage');
  48. $smarty->assign('ur_here',    '电子票添加');
  49. $smarty->assign('action_link', array('text' => $_LANG['01_ticket_list'], 'href' => 'ticket.php?act=list'));
  50. $smarty->assign('form_action', 'insert');
  51. $smarty->display('ticket_add.htm');
  52. }
  53. elseif ($_REQUEST['act'] == 'insert')
  54. {
  55. /*检查电影名称是否重复*/
  56. admin_priv('ticket_manage');
  57. $is_only = $exc->is_only('film_name', $_POST['film_name']);
  58. if (!$is_only)
  59. {
  60. sys_msg(sprintf('已存在', stripslashes($_POST['film_name'])), 1);
  61. }
  62. //时间处理
  63. $run_time = local_strtotime($_POST['start_time']);
  64. $ban_time = local_strtotime($_POST['end_time']);
  65. /*处理图片*/
  66. $img_name = basename($image->upload_image($_FILES['film_pic'],'ticket_pic'));
  67. /*插入数据*/
  68. $sql = "INSERT INTO ".$ecs->table('ticket')."(film_name, film_pic, run_time, ban_time,ticket_num,ticket_price,film_desc) ".
  69. "VALUES ('$_POST[film_name]', '$img_name', '$run_time', '$ban_time', '$_POST[ticket_num]', '$_POST[ticket_price]', '$_POST[film_desc]')";
  70. $db->query($sql);
  71. admin_log($_POST['film_name'],'add','ticket');
  72. /* 清除缓存 */
  73. clear_cache_files();
  74. $link[0]['text'] ='继续添加';
  75. $link[0]['href'] = 'ticket.php?act=add';
  76. $link[1]['text'] = '返回列表';
  77. $link[1]['href'] = 'ticket.php?act=list';
  78. sys_msg('添加成功', 0, $link);
  79. }
  80. /*------------------------------------------------------ */
  81. //-- 编辑品牌
  82. /*------------------------------------------------------ */
  83. elseif ($_REQUEST['act'] == 'edit')
  84. {
  85. /* 权限判断 */
  86. admin_priv('brand_manage');
  87. $sql = "SELECT brand_id, brand_name, site_url, brand_logo, brand_desc, brand_logo, is_show, sort_order ".
  88. "FROM " .$ecs->table('brand'). " WHERE brand_id='$_REQUEST[id]'";
  89. $brand = $db->GetRow($sql);
  90. $smarty->assign('ur_here',     $_LANG['brand_edit']);
  91. $smarty->assign('action_link', array('text' => $_LANG['06_goods_brand_list'], 'href' => 'brand.php?act=list&' . list_link_postfix()));
  92. $smarty->assign('brand',       $brand);
  93. $smarty->assign('form_action', 'updata');
  94. assign_query_info();
  95. $smarty->display('brand_info.htm');
  96. }
  97. elseif ($_REQUEST['act'] == 'updata')
  98. {
  99. admin_priv('brand_manage');
  100. if ($_POST['brand_name'] != $_POST['old_brandname'])
  101. {
  102. /*检查品牌名是否相同*/
  103. $is_only = $exc->is_only('brand_name', $_POST['brand_name'], $_POST['id']);
  104. if (!$is_only)
  105. {
  106. sys_msg(sprintf($_LANG['brandname_exist'], stripslashes($_POST['brand_name'])), 1);
  107. }
  108. }
  109. /*对描述处理*/
  110. if (!empty($_POST['brand_desc']))
  111. {
  112. $_POST['brand_desc'] = $_POST['brand_desc'];
  113. }
  114. $is_show = isset($_REQUEST['is_show']) ? intval($_REQUEST['is_show']) : 0;
  115. /*处理URL*/
  116. $site_url = sanitize_url( $_POST['site_url'] );
  117. /* 处理图片 */
  118. $img_name = basename($image->upload_image($_FILES['brand_logo'],'brandlogo'));
  119. $param = "brand_name = '$_POST[brand_name]',  site_url='$site_url', brand_desc='$_POST[brand_desc]', is_show='$is_show', sort_order='$_POST[sort_order]' ";
  120. if (!empty($img_name))
  121. {
  122. //有图片上传
  123. $param .= " ,brand_logo = '$img_name' ";
  124. }
  125. if ($exc->edit($param,  $_POST['id']))
  126. {
  127. /* 清除缓存 */
  128. clear_cache_files();
  129. admin_log($_POST['brand_name'], 'edit', 'brand');
  130. $link[0]['text'] = $_LANG['back_list'];
  131. $link[0]['href'] = 'brand.php?act=list&' . list_link_postfix();
  132. $note = vsprintf($_LANG['brandedit_succed'], $_POST['brand_name']);
  133. sys_msg($note, 0, $link);
  134. }
  135. else
  136. {
  137. die($db->error());
  138. }
  139. }
  140. /*------------------------------------------------------ */
  141. //-- 编辑品牌名称
  142. /*------------------------------------------------------ */
  143. elseif ($_REQUEST['act'] == 'edit_brand_name')
  144. {
  145. check_authz_json('brand_manage');
  146. $id     = intval($_POST['id']);
  147. $name   = json_str_iconv(trim($_POST['val']));
  148. /* 检查名称是否重复 */
  149. if ($exc->num("brand_name",$name, $id) != 0)
  150. {
  151. make_json_error(sprintf($_LANG['brandname_exist'], $name));
  152. }
  153. else
  154. {
  155. if ($exc->edit("brand_name = '$name'", $id))
  156. {
  157. admin_log($name,'edit','brand');
  158. make_json_result(stripslashes($name));
  159. }
  160. else
  161. {
  162. make_json_result(sprintf($_LANG['brandedit_fail'], $name));
  163. }
  164. }
  165. }
  166. elseif($_REQUEST['act'] == 'add_brand')
  167. {
  168. $brand = empty($_REQUEST['brand']) ? '' : json_str_iconv(trim($_REQUEST['brand']));
  169. if(brand_exists($brand))
  170. {
  171. make_json_error($_LANG['brand_name_exist']);
  172. }
  173. else
  174. {
  175. $sql = "INSERT INTO " . $ecs->table('brand') . "(brand_name)" .
  176. "VALUES ( '$brand')";
  177. $db->query($sql);
  178. $brand_id = $db->insert_id();
  179. $arr = array("id"=>$brand_id, "brand"=>$brand);
  180. make_json_result($arr);
  181. }
  182. }
  183. /*------------------------------------------------------ */
  184. //-- 编辑排序序号
  185. /*------------------------------------------------------ */
  186. elseif ($_REQUEST['act'] == 'edit_sort_order')
  187. {
  188. check_authz_json('brand_manage');
  189. $id     = intval($_POST['id']);
  190. $order  = intval($_POST['val']);
  191. $name   = $exc->get_name($id);
  192. if ($exc->edit("sort_order = '$order'", $id))
  193. {
  194. admin_log(addslashes($name),'edit','brand');
  195. make_json_result($order);
  196. }
  197. else
  198. {
  199. make_json_error(sprintf($_LANG['brandedit_fail'], $name));
  200. }
  201. }
  202. /*------------------------------------------------------ */
  203. //-- 切换是否显示
  204. /*------------------------------------------------------ */
  205. elseif ($_REQUEST['act'] == 'toggle_show')
  206. {
  207. check_authz_json('brand_manage');
  208. $id     = intval($_POST['id']);
  209. $val    = intval($_POST['val']);
  210. $exc->edit("is_show='$val'", $id);
  211. make_json_result($val);
  212. }
  213. /*------------------------------------------------------ */
  214. //-- 删除品牌
  215. /*------------------------------------------------------ */
  216. elseif ($_REQUEST['act'] == 'remove')
  217. {
  218. check_authz_json('brand_manage');
  219. $id = intval($_GET['id']);
  220. /* 删除该品牌的图标 */
  221. $sql = "SELECT brand_logo FROM " .$ecs->table('brand'). " WHERE brand_id = '$id'";
  222. $logo_name = $db->getOne($sql);
  223. if (!empty($logo_name))
  224. {
  225. @unlink(ROOT_PATH . DATA_DIR . '/brandlogo/' .$logo_name);
  226. }
  227. $exc->drop($id);
  228. /* 更新商品的品牌编号 */
  229. $sql = "UPDATE " .$ecs->table('goods'). " SET brand_id=0 WHERE brand_id='$id'";
  230. $db->query($sql);
  231. $url = 'brand.php?act=query&' . str_replace('act=remove', '', $_SERVER['QUERY_STRING']);
  232. ecs_header("Location: $url\n");
  233. exit;
  234. }
  235. /*------------------------------------------------------ */
  236. //-- 删除品牌图片
  237. /*------------------------------------------------------ */
  238. elseif ($_REQUEST['act'] == 'drop_logo')
  239. {
  240. /* 权限判断 */
  241. admin_priv('brand_manage');
  242. $brand_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
  243. /* 取得logo名称 */
  244. $sql = "SELECT brand_logo FROM " .$ecs->table('brand'). " WHERE brand_id = '$brand_id'";
  245. $logo_name = $db->getOne($sql);
  246. if (!empty($logo_name))
  247. {
  248. @unlink(ROOT_PATH . DATA_DIR . '/brandlogo/' .$logo_name);
  249. $sql = "UPDATE " .$ecs->table('brand'). " SET brand_logo = '' WHERE brand_id = '$brand_id'";
  250. $db->query($sql);
  251. }
  252. $link= array(array('text' => $_LANG['brand_edit_lnk'], 'href' => 'brand.php?act=edit&id=' . $brand_id), array('text' => $_LANG['brand_list_lnk'], 'href' => 'brand.php?act=list'));
  253. sys_msg($_LANG['drop_brand_logo_success'], 0, $link);
  254. }
  255. /*------------------------------------------------------ */
  256. //-- 排序、分页、查询
  257. /*------------------------------------------------------ */
  258. elseif ($_REQUEST['act'] == 'query')
  259. {
  260. $brand_list = get_brandlist();
  261. $smarty->assign('brand_list',   $brand_list['brand']);
  262. $smarty->assign('filter',       $brand_list['filter']);
  263. $smarty->assign('record_count', $brand_list['record_count']);
  264. $smarty->assign('page_count',   $brand_list['page_count']);
  265. make_json_result($smarty->fetch('brand_list.htm'), '',
  266. array('filter' => $brand_list['filter'], 'page_count' => $brand_list['page_count']));
  267. }
  268. /**
  269. * 获取品牌列表
  270. *
  271. * @access  public
  272. * @return  array
  273. */
  274. function get_brandlist()
  275. {
  276. $result = get_filter();
  277. if ($result === false)
  278. {
  279. /* 分页大小 */
  280. $filter = array();
  281. /* 记录总数以及页数 */
  282. if (isset($_POST['brand_name']))
  283. {
  284. $sql = "SELECT COUNT(*) FROM ".$GLOBALS['ecs']->table('brand') .' WHERE brand_name = \''.$_POST['brand_name'].'\'';
  285. }
  286. else
  287. {
  288. $sql = "SELECT COUNT(*) FROM ".$GLOBALS['ecs']->table('brand');
  289. }
  290. $filter['record_count'] = $GLOBALS['db']->getOne($sql);
  291. $filter = page_and_size($filter);
  292. /* 查询记录 */
  293. if (isset($_POST['brand_name']))
  294. {
  295. if(strtoupper(EC_CHARSET) == 'GBK')
  296. {
  297. $keyword = iconv("UTF-8", "gb2312", $_POST['brand_name']);
  298. }
  299. else
  300. {
  301. $keyword = $_POST['brand_name'];
  302. }
  303. $sql = "SELECT * FROM ".$GLOBALS['ecs']->table('brand')." WHERE brand_name like '%{$keyword}%' ORDER BY sort_order ASC";
  304. }
  305. else
  306. {
  307. $sql = "SELECT * FROM ".$GLOBALS['ecs']->table('brand')." ORDER BY sort_order ASC";
  308. }
  309. set_filter($filter, $sql);
  310. }
  311. else
  312. {
  313. $sql    = $result['sql'];
  314. $filter = $result['filter'];
  315. }
  316. $res = $GLOBALS['db']->selectLimit($sql, $filter['page_size'], $filter['start']);
  317. $arr = array();
  318. while ($rows = $GLOBALS['db']->fetchRow($res))
  319. {
  320. $brand_logo = empty($rows['brand_logo']) ? '' :
  321. '<a href="../' . DATA_DIR . '/brandlogo/'.$rows['brand_logo'].'" target="_brank"><img src="data:images/picflag.gif" width="16" height="16" border="0" alt='.$GLOBALS['_LANG']['brand_logo'].' /></a>';
  322. $site_url   = empty($rows['site_url']) ? 'N/A' : '<a href="'.$rows['site_url'].'" target="_brank">'.$rows['site_url'].'</a>';
  323. $rows['brand_logo'] = $brand_logo;
  324. $rows['site_url']   = $site_url;
  325. $arr[] = $rows;
  326. }
  327. return array('brand' => $arr, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']);
  328. }
  329. ?>

以下代码是ticket_list.html用来显示电子票

[python] view plaincopy
  1. <!-- $Id: brand_list.htm 15898 2009-05-04 07:25:41Z liuhui $ -->
  2. {if $full_page}
  3. {include file="pageheader.htm"}
  4. {insert_scripts files="../js/utils.js,listtable.js"}
  5. <!-- 品牌搜索 -->
  6. {include file="brand_search.htm"}
  7. <form method="post" action="" name="listForm">
  8. <!-- start brand list -->
  9. <div class="list-div" id="listDiv">
  10. {/if}
  11. <table cellpadding="3" cellspacing="1">
  12. <tr>
  13. <th>电影名称</th>
  14. <th>开场时间</th>
  15. <th>禁止时间</th>
  16. <th>总票数</th>
  17. <th>票价</th>
  18. <th>操作</th>
  19. </tr>
  20. {foreach from=$ticket_list item=ticket}
  21. <tr>
  22. <td class="first-cell">
  23. <span>{$ticket.film_name}</span>
  24. <span οnclick="javascript:listTable.edit(this, 'edit_brand_name', {$brand.brand_id})">{$brand.brand_name|escape:html}</span>
  25. </td>
  26. <td align="center">{$ticket.run_time}</td>
  27. <td align="center">{$ticket.ban_time}</td>
  28. <td align="center"><span οnclick="javascript:listTable.edit(this, 'edit_sort_order', {$brand.brand_id})">{$ticket.ticket_num}</span></td>
  29. <td align="center">{$ticket.ticket_price}</td>
  30. <td align="center">
  31. <a href="brand.php?act=edit&id={$brand.brand_id}" title="{$lang.edit}">编辑</a> |
  32. <a href="javascript:;" οnclick="listTable.remove({$brand.brand_id}, '{$lang.drop_confirm}')" title="{$lang.edit}">删除</a>
  33. </td>
  34. </tr>
  35. {/foreach}
  36. <tr>
  37. <td align="right" nowrap="true" colspan="6">
  38. {include file="page.htm"}
  39. </td>
  40. </tr>
  41. </table>
  42. {if $full_page}
  43. <!-- end brand list -->
  44. </div>
  45. </form>
  46. <script type="text/javascript" language="javascript">
  47. <!--
  48. listTable.recordCount = {$record_count};
  49. listTable.pageCount = {$page_count};
  50. {foreach from=$filter item=item key=key}
  51. listTable.filter.{$key} = '{$item}';
  52. {/foreach}
  53. {literal}
  54. onload = function()
  55. {
  56. // 开始检查订单
  57. startCheckOrder();
  58. }
  59. {/literal}
  60. //-->
  61. </script>
  62. {include file="pagefooter.htm"}
  63. {/if}

到达这里之后,后台添加也就完成了下面是前台的展示效果代码:

一、添加导航栏 :电子票
         打开后台---系统设置—自定义导航栏--添加导航

二、在upload下建立一个控制器ticket.php

以下代码是ticket.php

[python] view plaincopy
  1. <?php
  2. /**
  3. * ECSHOP 前台电子票列表
  4. */
  5. define('IN_ECS', true);
  6. require(dirname(__FILE__) . '/includes/init.php');
  7. if ((DEBUG_MODE & 2) != 2)
  8. {
  9. $smarty->caching = true;
  10. }
  11. /*------------------------------------------------------ */
  12. //-- INPUT
  13. /*------------------------------------------------------ */
  14. /* 获得请求的分类 ID */
  15. if (!empty($_REQUEST['id']))
  16. {
  17. $ticket_id = intval($_REQUEST['id']);
  18. //echo $ticket_id;die;
  19. }
  20. if (empty($ticket_id))
  21. {
  22. assign_template();
  23. $position = assign_ur_here('', $_LANG['all_ticket']);
  24. $smarty->assign('page_title',      $position['title']);    // 页面标题
  25. $smarty->assign('ur_here',         $position['ur_here']);  // 当前位置
  26. $smarty->assign('categories',      get_categories_tree()); // 分类树
  27. $smarty->assign('helps',           get_shop_help());       // 网店帮助
  28. $smarty->assign('top_goods',       get_top10());           // 销售排行
  29. $sql ="select * from " . $GLOBALS['ecs']->table('ticket');
  30. $res = $GLOBALS['db']->query($sql);
  31. $ticket_list = $GLOBALS['db']->getAll($sql);
  32. $smarty->assign('ticket_list', $ticket_list);
  33. $smarty->display('ticket_list.dwt');
  34. exit();
  35. }
  36. $ticket_info = get_ticket_info($ticket_id); // 电子票列表
  37. $seats = str_replace('排', '_', $ticket_info['unavailable']);
  38. $arr = explode(',', str_replace('座', '', $seats));
  39. $ticket_info['unavailable'] = json_encode($arr, true);
  40. #$sql="select * from ecs_ticket where ticket_id = '$ticket_id'";
  41. #$arr=$GLOBALS['db']->getAll($sql);
  42. #print_r($arr);
  43. //print_r($ticket_info);die;
  44. if (empty($ticket_info))
  45. {
  46. ecs_header("Location: ./\n");
  47. exit;
  48. }
  49. $smarty->assign('data_dir',    DATA_DIR);
  50. // 赋值固定内容
  51. assign_template();
  52. $position = assign_ur_here($cate, $ticket_info['ticket_name']);
  53. $smarty->assign('page_title',     $position['title']);   // 页面标题
  54. $smarty->assign('ur_here',        $position['ur_here']); // 当前位置
  55. //print_r($position);die;
  56. $smarty->assign('categories',     get_categories_tree());        // 分类树
  57. $smarty->assign('helps',          get_shop_help());              // 网店帮助
  58. $smarty->assign('top_goods',      get_top10());                  // 销售排行
  59. $smarty->assign('show_marketprice', $_CFG['show_marketprice']);
  60. $smarty->assign('ticket', $ticket_info);
  61. $smarty->display('ticket_info.dwt');
  62. /*------------------------------------------------------ */
  63. //-- PRIVATE FUNCTION
  64. /*------------------------------------------------------ */
  65. /**
  66. * 获得指定电子票的详细信息
  67. *
  68. * @access  private
  69. * @param   integer $id
  70. * @return  void
  71. */
  72. function get_ticket_info($id)
  73. {
  74. $sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('ticket') . " WHERE ticket_id = '$id'";
  75. $row = $GLOBALS['db']->getRow($sql);
  76. $row['run_time'] = local_date('Y-m-d H:i', $row['run_time']);
  77. $row['ban_time'] = local_date('Y-m-d H:i', $row['ban_time']);
  78. return $row;
  79. }
  80. ?>

三、电子票列表模板

1、新建upload\themes\default\ticket_list.dwt(自己布局)

以下是ticket_list.dwt

[python] view plaincopy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="Keywords" content="{$keywords}" />
  6. <meta name="Description" content="{$description}" />
  7. <!-- TemplateBeginEditable name="doctitle" -->
  8. <title>{$page_title}</title>
  9. <!-- TemplateEndEditable -->
  10. <!-- TemplateBeginEditable name="head" -->
  11. <!-- TemplateEndEditable -->
  12. <link rel="shortcut icon" href="favicon.ico" />
  13. <link rel="icon" href="animated_favicon.gif" type="image/gif" />
  14. <link href="{$ecs_css_path}" rel="stylesheet" type="text/css" />
  15. {* 包含脚本文件 *}
  16. {insert_scripts files='common.js'}
  17. </head>
  18. <body>
  19. <!-- #BeginLibraryItem "/library/page_header.lbi" --><!-- #EndLibraryItem -->
  20. <!--当前位置 start-->
  21. <div class="block box">
  22. <div id="ur_here">
  23. <!-- #BeginLibraryItem "/library/ur_here.lbi" --><!-- #EndLibraryItem -->
  24. </div>
  25. </div>
  26. <!--当前位置 end-->
  27. <div class="blank"></div>
  28. <div class="block clearfix">
  29. <!--left start-->
  30. <div class="AreaL">
  31. <!-- TemplateBeginEditable name="左边区域" -->
  32. <!-- #BeginLibraryItem "/library/cart.lbi" --><!-- #EndLibraryItem -->
  33. <!-- #BeginLibraryItem "/library/category_tree.lbi" --><!-- #EndLibraryItem -->
  34. <!-- #BeginLibraryItem "/library/goods_related.lbi" --><!-- #EndLibraryItem -->
  35. <!-- #BeginLibraryItem "/library/goods_fittings.lbi" --><!-- #EndLibraryItem -->
  36. <!-- #BeginLibraryItem "/library/goods_article.lbi" --><!-- #EndLibraryItem -->
  37. <!-- #BeginLibraryItem "/library/goods_attrlinked.lbi" --><!-- #EndLibraryItem -->
  38. <!-- TemplateEndEditable -->
  39. <!-- TemplateBeginEditable name="左边广告区域(宽200px)" -->
  40. <!-- TemplateEndEditable -->
  41. <!--AD end-->
  42. <!-- #BeginLibraryItem "/library/history.lbi" --><!-- #EndLibraryItem -->
  43. </div>
  44. <!--left end-->
  45. <!--right start-->
  46. <div class="AreaR">
  47. <!-- TemplateBeginEditable name="通栏广告区域(宽750px)" -->
  48. <!-- TemplateEndEditable -->
  49. <div class="blank5"></div>
  50. <h3 class="border"><span><!--{$lang.all_ticket}--></span></h3>
  51. <!-- {foreach from=$ticket_list name="ticket_list_foreach" item=ticket_data} -->
  52. <dl style="margin:20px; height:300px; text-align:center;float:left;">
  53. <dt><a href="ticket.php?id={$ticket_data.ticket_id}">
  54. <img src="data/ticket_pic/{$ticket_data.film_pic}" alt="{$ticket_data.ticket_pic|escape:html}" height="270" width="200" /></a></dt>
  55. <dd>余票:{$ticket_data.ticket_num}张|价格:{$ticket_data.ticket_price}元|<a href="ticket.php?id={$ticket_data.ticket_id}">购买</a></dd>
  56. </dl>
  57. <!-- {/foreach} -->
  58. <div class="blank5"></div>
  59. </div
  60. <!--right end-->
  61. </div>
  62. <div class="blank5"></div>
  63. <!--帮助-->
  64. <div class="block">
  65. <div class="box">
  66. <div class="helpTitBg clearfix">
  67. <!-- #BeginLibraryItem "/library/help.lbi" --><!-- #EndLibraryItem -->
  68. </div>
  69. </div>
  70. </div>
  71. <div class="blank"></div>
  72. <!--帮助-->
  73. <!--友情链接 start-->
  74. <!--{if $img_links  or $txt_links }-->
  75. <div id="bottomNav" class="box">
  76. <div class="box_1">
  77. <div class="links clearfix">
  78. <!--开始图片类型的友情链接{foreach from=$img_links item=link}-->
  79. <a href="{$link.url}" target="_blank" title="{$link.name}"><img src="{$link.logo}" alt="{$link.name}" border="0" /></a>
  80. <!--结束图片类型的友情链接{/foreach}-->
  81. <!-- {if $txt_links} -->
  82. <!--开始文字类型的友情链接{foreach from=$txt_links item=link}-->
  83. [<a href="{$link.url}" target="_blank" title="{$link.name}">{$link.name}</a>]
  84. <!--结束文字类型的友情链接{/foreach}-->
  85. <!-- {/if} -->
  86. </div>
  87. </div>
  88. </div>
  89. <!--{/if}-->
  90. <!--友情链接 end-->
  91. <div class="blank"></div>
  92. <!-- #BeginLibraryItem "/library/page_footer.lbi" --><!-- #EndLibraryItem -->
  93. </body>
  94. </html>

创建电子票详情ticket_info.dwt(自己布局);
(复制 goods.dwt模板upload\themes\default\goods.dwt);

以下是ticket_info.dwt

[python] view plaincopy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="Keywords" content="{$keywords}" />
  6. <meta name="Description" content="{$description}" />
  7. <style type="text/css">
  8. .demo{width:700px; margin:40px auto 0 auto; min-height:450px;}
  9. @media screen and (max-width: 360px) {.demo {width:340px}}
  10. ul,li{
  11. list-style:none;
  12. }
  13. .front{width: 300px;margin: 5px 32px 45px 32px;background-color: #f0f0f0;   color: #666;text-align: center;padding: 3px;border-radius: 5px;}
  14. .booking-details {float: right;position: relative;width:200px;height: 400px; }
  15. .booking-details h3 {margin: 5px 5px 0 0;font-size: 16px;}
  16. .booking-details p{line-height:26px; font-size:16px; color:#999;width:300px;}
  17. .booking-details p span{color:#666}
  18. div.seatCharts-cell {color: #182C4E;height: 25px;width: 25px;line-height: 25px;margin: 3px;float: left;text-align: center;outline: none;font-size: 13px;}
  19. div.seatCharts-seat {color: #fff;cursor: pointer;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;}
  20. div.seatCharts-row {height: 35px;}
  21. div.seatCharts-seat.available {background-color: #B9DEA0;}
  22. div.seatCharts-seat.focused {background-color: #76B474;border: none;}
  23. div.seatCharts-seat.selected {background-color: #E6CAC4;}
  24. div.seatCharts-seat.unavailable {background-color: #472B34;cursor: not-allowed;}
  25. div.seatCharts-container {border-right: 1px dotted #adadad;width: 400px;padding: 20px;float: left;}
  26. div.seatCharts-legend {padding-left: 0px;position: absolute;bottom: 16px;}
  27. ul.seatCharts-legendList {padding-left: 0px;}
  28. .seatCharts-legendItem{float:left; width:90px;margin-top: 10px;line-height: 2;}
  29. span.seatCharts-legendDescription {margin-left: 5px;line-height: 30px;}
  30. .checkout-button {display: block;width:80px; height:24px; line-height:20px;margin: 10px auto;border:1px solid #999;font-size: 14px; cursor:pointer}
  31. #selected-seats {max-height: 200px;overflow-y: auto;overflow-x: none;width: 200px;}
  32. #selected-seats li{float:left; width:72px; height:26px; line-height:26px; border:1px solid #d3d3d3; background:#f7f7f7; margin:6px; font-size:14px; font-weight:bold; text-align:center}
  33. .checkout{
  34. float:right;
  35. }
  36. </style>
  37. <!-- TemplateBeginEditable name="doctitle" -->
  38. <title>{$page_title}</title>
  39. <!-- TemplateEndEditable --><!-- TemplateBeginEditable name="head" --><!-- TemplateEndEditable -->
  40. <style>
  41. .p_t{
  42. margin-top:10px;
  43. }
  44. b{
  45. width:100px;
  46. }
  47. a.info{
  48. text-decoration:none;
  49. display:inline-block;
  50. width:75px;
  51. line-height:25px;
  52. border:1px #CCC solid;
  53. text-align:center;
  54. }
  55. </style>
  56. <link rel="shortcut icon" href="favicon.ico" />
  57. <link rel="icon" href="animated_favicon.gif" type="image/gif" />
  58. <link href="{$ecs_css_path}" rel="stylesheet" type="text/css" />
  59. </head>
  60. <body>
  61. <!-- #BeginLibraryItem "/library/page_header.lbi" --><!-- #EndLibraryItem -->
  62. <!--当前位置 start-->
  63. <div class="block box">
  64. <div id="ur_here">
  65. <!-- #BeginLibraryItem "/library/ur_here.lbi" --><!-- #EndLibraryItem -->
  66. </div>
  67. </div>
  68. <!--当前位置 end-->
  69. <div class="blank"></div>
  70. <!-- 电子票 详情 start-->
  71. <div class="block box">
  72. <div class="box">
  73. <div class="box_1">
  74. <h3><span>{$lang.ticket_info}</span></h3>
  75. <div class="boxCenterList">
  76. <table width="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="#dddddd">
  77. <tr>
  78. <td bgcolor="#ffffff" width="200">
  79. <div style="width:300px;text-align: center;">
  80. <img src="data/ticket_pic/{$ticket.film_pic}" width="200" />
  81. </div>
  82. </td>
  83. <td bgcolor="#ffffff" valign="top" style="padding:20px;">
  84. <h1 style="margin-top:10px;line-height:50px;" ><span id="film_name">{$ticket.film_name}</span></h1>
  85. <div style="height:200px;">
  86. <p class="p_t"><b>{$lang.film_start_c}:</b>{$ticket.run_time}</p>
  87. <p class="p_t"><b>{$lang.film_end_c}:</b>{$ticket.ban_time}</p>
  88. <p class="p_t"><b>{$lang.film_act_er}:</b>{$ticket.film_desc}</p>
  89. <!--<p class="p_t"><b>{$lang.film_type_c}:</b>{$ticket.t_id}</p>-->
  90. <p class="p_t"><b>{$lang.film_price_c}:</b><span id="ticket_price">{$ticket.ticket_price}</span>{$lang.film_unit}
  91. <b>{$lang.film_remain}:</b>{$surplus_num}{$lang.film_spread}</p>
  92. </div>
  93. </td>
  94. </tr>
  95. </table>
  96. </div>
  97. </div>
  98. </div>
  99. <div class="blank5"></div>
  100. <!-- 电影 start-->
  101. <div class="box_1">
  102. <h3 style="padding:0 5px;">
  103. <div id="com_b" class="history clearfix">
  104. <h2 class="h2bg">{$lang.film_check_seat}</h2> <!--- 选座 -->
  105. </div>
  106. </h3>
  107. <!--- 电影选座str -->
  108. <div id="com_h" style="display:;">
  109. <div id="main">
  110. <div class="demo">
  111. <div id="seat-map">
  112. <div class="front">{$lang.film_pm_1}</div>
  113. </div>
  114. <div class="booking-details">
  115. <p>{$lang.film_check_seat}:</p>
  116. <ul id="selected-seats"></ul>
  117. <p>{$lang.film_checked_seat}:<span id="counter"></span></p>
  118. <p>{$lang.film_all}:<b><span id="total">0</span></b>{$lang.film_unit}</p>
  119. <div id="legend"></div>
  120. </div>
  121. <div style="text-align: center;">
  122. <input type="button" οnclick="checkout({$ticket.ticket_id})" value="确定购买" style="border-radius:5px;width:200px;height:40px;background: #ff6600;border: none;">
  123. </div>
  124. <div style="clear:both;"></div>
  125. </div>
  126. </div>
  127. </div>
  128. </div>
  129. <!-- 电影选作 end -->
  130. </div>
  131. <!--电子票 详情 end-->
  132. <div class="blank5"></div>
  133. <!--帮助-->
  134. <div class="block">
  135. <div class="box">
  136. <div class="helpTitBg clearfix">
  137. <!-- #BeginLibraryItem "/library/help.lbi" --><!-- #EndLibraryItem -->
  138. </div>
  139. </div>
  140. </div>
  141. <div class="blank"></div>
  142. <!--帮助-->
  143. <!--友情链接 start-->
  144. <!--{if $img_links  or $txt_links }-->
  145. <div id="bottomNav" class="box">
  146. <div class="box_1">
  147. <div class="links clearfix">
  148. <!--开始图片类型的友情链接{foreach from=$img_links item=link}-->
  149. <a href="{$link.url}" target="_blank" title="{$link.name}"><img src="{$link.logo}" alt="{$link.name}" border="0" /></a>
  150. <!--结束图片类型的友情链接{/foreach}-->
  151. <!-- {if $txt_links} -->
  152. <!--开始文字类型的友情链接{foreach from=$txt_links item=link}-->
  153. [<a href="{$link.url}" target="_blank" title="{$link.name}">{$link.name}</a>]
  154. <!--结束文字类型的友情链接{/foreach}-->
  155. <!-- {/if} -->
  156. </div>
  157. </div>
  158. </div>
  159. <!--{/if}-->
  160. <!--友情链接 end-->
  161. <div class="blank"></div>
  162. <!-- #BeginLibraryItem "/library/page_footer.lbi" --><!-- #EndLibraryItem -->
  163. {insert_scripts files='js/seat/jquery-1.8.3.min.js,seat/jquery.seat-charts.min.js'}
  164. <script type="text/javascript">
  165. $(function() {
  166. window.__Object_toJSONString = Object.prototype.toJSONString;
  167. delete Object.prototype.toJSONString;
  168. });
  169. </script>
  170. <script type="text/javascript">
  171. var price = {$ticket.ticket_price}; //票价
  172. // alert(price)
  173. $(document).ready(function() {
  174. var $cart = $('#selected-seats'); //座位区
  175. $counter = $('#counter'); //票数
  176. $total = $('#total'); //总计金额
  177. var sc = $('#seat-map').seatCharts({
  178. map: [  //座位图
  179. 'aaaaaaaaaa',
  180. 'aaaaaaaaaa',
  181. '__________',
  182. 'aaaaaaaa__',
  183. 'aaaaaaaaaa',
  184. 'aaaaaaaaaa',
  185. 'aaaaaaaaaa',
  186. 'aaaaaaaaaa',
  187. 'aaaaaaaaaa',
  188. 'aa__aa__aa'
  189. ],
  190. naming : {
  191. top : false,
  192. getLabel : function (character, row, column) {
  193. return column;
  194. }
  195. },
  196. legend : { //定义图例
  197. node : $('#legend'),
  198. items : [
  199. [ 'a', 'available',   '可选座' ],
  200. [ 'a', 'unavailable', '已售出']
  201. ]
  202. },
  203. click: function () { //点击事件
  204. //seat_id = this.settings.id;
  205. if (this.status() == 'available') { //可选座
  206. $('<li>'+(this.settings.row+1)+'排'+this.settings.label+'座</li>').attr('id', 'cart-item-'+this.settings.id).data('seatId', this.settings.id).appendTo($cart);
  207. $counter.text(sc.find('selected').length+1); // 总票数
  208. $total.text(recalculateTotal(sc)); // 总价格
  209. return 'selected';
  210. } else if (this.status() == 'selected') { //已选中
  211. //更新数量
  212. $counter.text(sc.find('selected').length-1);
  213. //更新总计
  214. $total.text(recalculateTotal(sc)-price-price);
  215. //删除已预订座位
  216. $('#cart-item-'+this.settings.id).remove();
  217. //可选座
  218. return 'available';
  219. } else if (this.status() == 'unavailable') { //已售出
  220. return 'unavailable';
  221. } else {
  222. return this.style();
  223. }
  224. }
  225. });
  226. //已售出的座位
  227. sc.get({$ticket.unavailable}).status('unavailable');
  228. });
  229. //计算总金额
  230. function recalculateTotal(sc) {
  231. var total = 0;
  232. sc.find('selected').each(function () {
  233. total += price;
  234. });
  235. return total += price;
  236. }
  237. function checkout(goodsId, parentId)
  238. {
  239. var goods        = new Object();
  240. var spec_arr     = $('#selected-seats').text(); // 座位
  241. var fittings_arr = new Array();
  242. var number       = $('#counter').html(); // 所选票数
  243. //var formBuy      = document.forms['ECS_FORMBUY'];
  244. var quick        = 0;
  245. //alert(spec_arr);return false;
  246. goods.quick    = quick;
  247. goods.spec     = spec_arr;
  248. goods.goods_id = goodsId;
  249. goods.number   = number;
  250. goods.parent   = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);
  251. Ajax.call('flow.php?step=ticket', 'goods=' + JSON.stringify(goods), addToCartResponse, 'POST', 'JSON');
  252. }
  253. /* *
  254. * 处理添加商品到购物车的反馈信息
  255. */
  256. function addToCartResponse(result)
  257. {
  258. if(result.error == 1)
  259. {
  260. alert(result.message);
  261. location.href = 'flow.php?step=login';
  262. }
  263. else if(result.error == 2)
  264. {
  265. alert(result.message);
  266. }
  267. else if(result.error == 3)
  268. {
  269. alert(result.message);
  270. location.href = 'flow.php?step=ticket_done';
  271. }
  272. else if(result.error == 4)
  273. {
  274. alert(result.message);
  275. }
  276. else if(result.error == 5)
  277. {
  278. alert(result.message);
  279. }
  280. console.log(result);return false;
  281. }
  282. </script>
  283. </body>
  284. </html>

3、找到seat插件,整体文件夹放到upload/js中;

生成订单upload\flow.php

把以下代码放到if ($_REQUEST['step'] == 'add_to_cart')前面

[python] view plaincopy
  1. /* 购买电子票
  2. * */
  3. if ($_REQUEST['step'] == 'ticket')
  4. {
  5. include_once('includes/cls_json.php');
  6. $json  = new JSON;
  7. $_POST['goods'] = strip_tags(urldecode($_POST['goods']));
  8. $_POST['goods'] = json_str_iconv($_POST['goods']);
  9. $goods = $json->decode($_POST['goods']);
  10. //print_r($goods);die;
  11. /*
  12. * 检查用户是否已经登录
  13. * 如果用户已经登录了则检查是否有默认的收货地址
  14. * 如果没有登录则跳转到登录和注册页面
  15. */
  16. if (empty($_SESSION['direct_shopping']) && $_SESSION['user_id'] == 0)
  17. {
  18. $result['error'] = 1;
  19. $result['message'] = "请先登录";
  20. die($json->encode($result));
  21. }
  22. /* 检查:商品数量是否合法 */
  23. if (empty($goods->number))
  24. {
  25. $result['error']   = 2;
  26. $result['message'] = '还没有选座';
  27. echo  $json->encode($result);die;
  28. }
  29. /* 检查:商品数量是否合法*/
  30. /*
  31. if ($goods->number > 1)
  32. {
  33. $result['error']   = 5;
  34. $result['message'] = '系统正在升级,只能选一张票';
  35. echo  $json->encode($result);die;
  36. }
  37. */
  38. $spec = explode(',', trim(str_replace('座', '座,', $goods->spec), ',')); // 座位转换成数组格式
  39. // 随机生成票号
  40. $string = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';
  41. $uid = $_SESSION['user_id'];
  42. for($j = 0; $j < count($spec); $j++){
  43. $str = '';
  44. for ($i=0; $i < 10; $i++) {
  45. $str.= $string[rand(0,strlen($string)-1)];
  46. }
  47. $data[] = $uid.$str;
  48. }
  49. /* 取得商品信息 */
  50. $ticket_info = "SELECT * FROM " .$GLOBALS['ecs']->table('ticket'). " WHERE ticket_id = '".$goods->goods_id ."'""'";
  51. $ticket = $GLOBALS['db']->getRow($ticket_info);
  52. //此处出现问题bug未解决
  53. foreach($spec as $key => $val)
  54. {
  55. /* 初始化要插入购物车的基本件数据 */
  56. $parent[] = array(
  57. 'user_id'        => $_SESSION['user_id'],
  58. 'ticket_order'   => $data[$key],
  59. 'ticket_id'      => $goods->goods_id,
  60. 'film_name'      => $ticket['film_name'],
  61. 'ticket_price'   => $ticket['ticket_price'],
  62. 'seat'           =>  $val
  63. );
  64. }
  65. foreach($spec as $sp) // 查询其他人是否已购买
  66. {
  67. $seat = "SELECT seat FROM " .$GLOBALS['ecs']->table('ticket_cart'). " WHERE seat = '".$sp."' AND ticket_id = '" . $goods->goods_id ."'";
  68. $one = $GLOBALS['db']->getOne($seat);
  69. if($one)
  70. {
  71. $result['error'] = 4;
  72. $result['message'] = '座位已被预定';
  73. }
  74. else
  75. {
  76. //购物车没有此物品,则插入
  77. foreach($parent as $p)
  78. {
  79. $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('ticket_cart'), $p, 'INSERT');
  80. $sql_select="select unavailable from ".$GLOBALS['ecs']->table('ticket')."where ticket_id='$p[ticket_id]'";
  81. $str=$GLOBALS['db']->getOne($sql_select);
  82. //$seat接过来的值 如果数据库为空则添加数据 否则 就拼接原数据+,+新数据
  83. if(empty($str)){
  84. $seat=$p['seat'];
  85. }else{
  86. $seat=$str.",".$p['seat'];
  87. }
  88. $sql_update="update".$GLOBALS['ecs']->table('ticket')."set unavailable='$seat' where ticket_id='$p[ticket_id]'";
  89. $GLOBALS['db']->getAll($sql_update);
  90. $result['error'] = 3;
  91. $result['message'] = "购买成功";
  92. }
  93. }
  94. }
  95. echo  $json->encode($result);die;
  96. }
  97. elseif($_REQUEST['step'] == 'ticket_done')
  98. {
  99. $sql = " select * from ". $GLOBALS['ecs']->table('ticket_cart').
  100. " where user_id = ".$_SESSION['user_id'];
  101. $carts = $GLOBALS['db']->getAll($sql);
  102. $smarty->assign('carts', $carts);
  103. $num = count($carts); // 总票数
  104. $smarty->assign('num', $num);
  105. $price = '';
  106. foreach ($carts as $key => $val)
  107. {
  108. $price    +=  $val['ticket_price'];
  109. }
  110. $smarty->assign('total_price', $price);
  111. }

6、找到themes\default\flow.dwt(生成订单列表)

(搜索<!-- {if $step eq "login"} -->)把以下代码放到其前面

[python] view plaincopy
  1. <!-- {if $step eq "ticket_done"} -->
  2. <div class="flowBox" style="margin:30px auto 70px auto;">
  3. <h6 style="text-align:center; height:30px; line-height:30px;">{$lang.remember_order_number}:</h6>
  4. <table width="99%" align="center" cellpadding="20" cellspacing="0" bgcolor="#fff" style="border:1px solid #ddd; margin:20px auto;" >
  5. <tr>
  6. <td align="center" bgcolor="#FFFFFF">票号</td>
  7. <td align="center" bgcolor="#FFFFFF">电影名称</td>
  8. <td align="center" bgcolor="#FFFFFF">座位号</td>
  9. </tr>
  10. <!--{foreach from=$carts item=cart}-->
  11. <tr>
  12. <td align="center" bgcolor="#FFFFFF">{$cart.ticket_order}</td>
  13. <td align="center" bgcolor="#FFFFFF">{$cart.film_name}</td>
  14. <td align="center" bgcolor="#FFFFFF">{$cart.seat}</td>
  15. </tr>
  16. <!--{/foreach}-->
  17. </table>
  18. <table width="99%" align="center" cellpadding="20" cellspacing="0" bgcolor="#fff" style="border:1px solid #ddd; margin:20px auto;" >
  19. <tr>
  20. <td align="center" bgcolor="#FFFFFF">总票数:{$num}</td>
  21. <td align="center" bgcolor="#FFFFFF"></td>
  22. <td align="center" bgcolor="#FFFFFF">总金额:{$total_price} 元</td>
  23. </tr>
  24. </table>
  25. </div>
  26. <!-- {/if} -->

ok,一切完成。

ecshop二次开发--电子票相关推荐

  1. 小京东等产品后台版权及logo修改教程[ecshop二次开发]

    小京东等产品后台版权及logo修改教程[ecshop二次开发] ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2015-09-08 1.后台登录页面 Logo以及背景 ...

  2. 什么是ECShop二次开发?

    何为ECShop二次开发? 所谓ECShop二次开发,也称之为ecshop功能开发.ecshop插件开发,同时某些时候ecshop的模板开发也可认为是对ecshop的二次开发.ECShop二次开发就是 ...

  3. ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解

    Ecshop文件结构 :ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解 /* ECShop 最新程序 的结构图及各文件相应功能介绍 ECShop文件结构目录 ┣ activity ...

  4. ecshop二次开发--放大镜2

    /*本页面所有内容均是在ecshop二次开发--放大镜的基础上你没有这三个jQuery的时候进行的*/ http://blog.csdn.NET/haoyunyun888/article/detail ...

  5. ecshop二次开发的简单快速入门教程

    ecshop二次开发的简单快速入门教程,具体请下载文档 ecshop_dwt_lbi_详解.rar (106 KB) 下载次数: 9 转载于:https://my.oschina.net/u/3360 ...

  6. ecshop二次开发 给商品添加自定义字段【包含我自己进一步的开发实例详解】

    本文包含商品自定义添加教程及进一步的开发实例: 教程: 说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. ...

  7. echop二次开发——电子票

     先展示下效果: 后台实现过程 一.             添加菜单项:路径admin\includes\inc_menu.php $modules['18_ticket_manage']['01_ ...

  8. ecshop二次开发必备--数据库说明2

    ecs_group_goods 该表应该是商品配件配置表 parent_id mediumint 父商品id goods_id mediumint 配件商品id goods_price decimal ...

  9. Ecshop 二次开发之 朝花夕拾

    Ecshop文件结构 ecshop文件架构说明  /*  ECShop 2.5.1 的结构图及各文件相应功能介绍  ECShop2.5.1_Beta upload 的目录  ┣ activity.ph ...

最新文章

  1. 实用Jquery开发自己的插件
  2. 岗位推荐 | 百度视觉技术部招聘移动端视觉算法工程师
  3. python爬取素材图片代码_基于Python爬取素材网站音频文件
  4. 浏览器json格式化插件 yformater
  5. 使用 docker 部署常用的开发环境
  6. PHP SESSION
  7. 通过谷歌浏览器,找到页面某个事件属于哪个js文件
  8. java中访问权限控制顺序_Java中的四种访问权限控制 | 学步园
  9. 微信表情包像素不合适的解决办法
  10. Linux系统的应用软件流程图绘制软件yEd
  11. MPLS流量工程(TE)
  12. 更进一步!微软成为 OpenInfra 开放基础设施基金会白金会员
  13. 阻塞(blockage)设置优化——Hard,Soft,Partial
  14. 2020.10.3--PS--模糊工具、减淡工具、橡皮擦工具
  15. error: conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’
  16. matlab步进电机半步控制器,步进电机驱动模式:整步、半步、细分
  17. 哈理工 校赛(热身赛)2238 围巾的纠结(判断回路问题)
  18. 30岁之前创业四次:最大痛苦是知道自己错了
  19. z—libirary最新地址获取,zlibirary地址获取方式,zliabary最新地址,zliabary官网登录方式,zliabary最新登陆
  20. mysql常用的两种数据库引擎_Mysql数据库常用两种引擎的介绍

热门文章

  1. nginx代理tcp服务
  2. nacos在windows系统下单机模式启动四部曲(2.1.2,重置密码)
  3. 国画欣赏:新疆美协会员扬笛人物画《怒放丝路》
  4. 剑侠情缘LINUX端怎么打补丁,【亲测】剑侠情缘L手工端+各种补丁+修改教程大全+四区...
  5. c语言中加减乘除英文,英语语法基础知识:英语加减乘除运算的表示方法
  6. springcloud整合nacos,遇见一个萝卜一个坑,不小心蹲了一会儿
  7. 记录日记2021-11-12
  8. delmia机器人建模与装配
  9. android官方降级包,OPPOK3 ColorOS刷机包(官方最新固件升级包安卓10 ColorOS V6)
  10. 至强服务器哪个系列好,至强cpu那么好,为什么日常装机的时候一般都选酷睿系列的呢?...