前台效果展示:

2.

3.

后台展示效果:

代码实现:

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

  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文件,添加语言

  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

  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" onsubmit="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="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" onclick="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" onclick="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

  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="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用来显示电子票

  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 onclick="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 onclick="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:;" onclick="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

  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

  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

  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" onclick="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')前面

  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"} -->)把以下代码放到其前面

  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. ECSHOP二次开发指南

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

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

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

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

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

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

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

  5. Ecshop二次开发必备基础

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

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

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

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

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

  8. EcShop二次开发学习方法

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

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

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

随机推荐

  1. docker上构建redis容器

    1.查看docker上的镜像 [root@holly ~]# docker images 2.搜索docker上的redis镜像,选择下载的版本 [root@holly ~]# docker sear ...

  2. Python开发之MySQL安装

    MySQL下载安装后再安装破解版本的Navicat图形化数据库工具即可.   安装python后.再进行如下操作(也可以安装好虚拟环境virtualenv 或者增强工具pip install virt ...

  3. php基础学习过程

    1.基础知识 a.注释: <?php // 这是单行注释 # 这也是单行注释 /* 这是多行注释块 它横跨了 多行 */ ?> b.大小写敏感: 在 PHP 中,所有用户定义的函数.类和关 ...

  4. 矩阵快速幂3 k*n铺方格

    #include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...

  5. 从web.xml入手分析jeecms配置文件

      web.xml文件是web系统的核心配置文件,里面的所有配置都会加载的运行时的web容器,从她可以了解到整个web项目的配置情况.jeecms的所有配置文件都在config文件夹下面,通过web. ...

  6. day67test

    作业 1.按照上方 知识点总结 模块,总结今天所学知识点: 2.有以下广告数据(实际数据命名可以略做调整) ad_data = { tv: [ {img: 'img/tv/001.png', titl ...

  7. 新手必踩坑之display: inline-block

    今日励志语 往日不可追,来日犹可期,祝大家2019年继往开来 迷之间隙 我们创建一个导航列表,并将其列表 item 设置为 inline-block,主要代码如下: <div class=&qu ...

  8. Xcode10 代码块(Code Snippet)添加和删除

    https://blog.csdn.net/lg767201403/article/details/82761448 Code Snippets 使用 https://blog.csdn.net/lv ...

  9. Redis学习03——存储字符串(String)

    --------------------- 作者:愤怒的小明 来源:CSDN 原文:https://blog.csdn.net/qiwenmingshiwo/article/details/78118 ...

  10. hdu1233还是畅通工程

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...