ecshop二次开发之电子票

前台效果展示:






















2.













3.























后台展示效果:

















代码实现:

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

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

配置菜单语言

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

  1. //菜单—添加  
  2.   
  3. $_LANG['18_ticket_manage'] = '电子票管理';  
  4.   
  5. //电子票管理  
  6.   
  7. $_LANG['01_ticket_list'] = '电子票列表';  
  8.   
  9. $_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.   
  18. <div class="main-div">  
  19.     <form method="post" action="ticket.php" name="theForm" enctype="multipart/form-data" onsubmit="return validate()">  
  20.         <table cellspacing="1" cellpadding="3" width="100%">  
  21.             <tbody><tr>  
  22.                 <td class="label">电影名称</td>  
  23.                 <td><input type="text" name="film_name" maxlength="60" value=""><span class="require-field">*</span></td>  
  24.             </tr>  
  25.             <tr>  
  26.                 <td class="label"><a href="javascript:showNotice('warn_brandlogo');" title="点击此处查看提示信息">  
  27.                     <img src="images/notice.gif" width="16" height="16" border="0" alt="点击此处查看提示信息"></a>电影海报</td>  
  28.                 <td><input type="file" name="film_pic" id="logo" size="45">    <br><span class="notice-span" style="display:block" id="warn_brandlogo">  
  29.         请上传图片,做为影片宣传海报!        </span>  
  30.                 </td>  
  31.             </tr>  
  32.             <tr>  
  33.                 <td class="label">开场时间</td>  
  34.                 <td><input name="start_time" type="text" id="start_time" value="{$auction.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" />  
  36.                 </td>  
  37.             </tr>  
  38.             <tr>  
  39.                 <td class="label">禁止入场时间</td>  
  40.                 <td><input name="end_time" type="text" id="end_time" value="{$auction.end_time}" readonly="readonly" />  
  41.                     <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" />  
  42.                 </td>  
  43.             </tr>  
  44.             <tr>  
  45.                 <td class="label">座位数量</td>  
  46.                 <td><input type="text" name="ticket_num" maxlength="40" size="15" value="50"></td>  
  47.             </tr>  
  48.             <tr>  
  49.                 <td class="label">票价</td>  
  50.                 <td><input type="text" name="ticket_price" maxlength="40" size="15" value="50"></td>  
  51.             </tr>  
  52.             <tr>  
  53.                 <td class="label">影片描述</td>  
  54.                 <td><textarea name="film_desc" cols="60" rows="4"></textarea></td>  
  55.             </tr>  
  56.             <tr>  
  57.                 <td colspan="2" align="center"><br>  
  58.                     <input type="submit" class="button" value=" 确定 ">  
  59.                     <input type="reset" class="button" value=" 重置 ">  
  60.                     <input type="hidden" name="act" value="{$form_action}">  
  61.                 </td>  
  62.             </tr>  
  63.             </tbody></table>  
  64.     </form>  
  65. </div>  
  66. </body>  
  67. </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.     //查询电子票信息(改动的部分)  
  29.     $sql = "select * from ". $GLOBALS['ecs']->table('ticket');  
  30.     $res = $GLOBALS['db']->query($sql); //$res资源类型  
  31.     $list = array();  
  32.     while($row = $GLOBALS['db']->fetchRow($res))  
  33.     {  
  34.         $row['run_time'] = local_date('Y-m-d H:i',$row['run_time']);  
  35.         $row['ban_time'] = local_date('Y-m-d H:i',$row['ban_time']);  
  36.   
  37.         $list[] = $row;  
  38.     }  
  39.     $smarty->assign('ticket_list',$list);  
  40.     assign_query_info();  
  41.     $smarty->display('ticket_list.htm');  
  42. }  
  43. /*------------------------------------------------------ */  
  44. //-- 添加电子票  
  45. /*------------------------------------------------------ */  
  46. elseif ($_REQUEST['act'] == 'add')  
  47. {  
  48.     /* 权限判断 */  
  49.     admin_priv('goods_manage');  
  50.     $smarty->assign('ur_here',    '电子票添加');  
  51.     $smarty->assign('action_link', array('text' => $_LANG['01_ticket_list'], 'href' => 'ticket.php?act=list'));  
  52.     $smarty->assign('form_action''insert');  
  53.     $smarty->display('ticket_add.htm');  
  54. }  
  55. elseif ($_REQUEST['act'] == 'insert')  
  56. {  
  57.     /*检查电影名称是否重复*/  
  58.     admin_priv('ticket_manage');  
  59.     $is_only = $exc->is_only('film_name', $_POST['film_name']);  
  60.     if (!$is_only)  
  61.     {  
  62.         sys_msg(sprintf('已存在', stripslashes($_POST['film_name'])), 1);  
  63.     }  
  64.     //时间处理  
  65.     $run_time = local_strtotime($_POST['start_time']);  
  66.     $ban_time = local_strtotime($_POST['end_time']);  
  67.     /*处理图片*/  
  68.     $img_name = basename($image->upload_image($_FILES['film_pic'],'ticket_pic'));  
  69.   
  70.     /*插入数据*/  
  71.     $sql = "INSERT INTO ".$ecs->table('ticket')."(film_name, film_pic, run_time, ban_time,ticket_num,ticket_price,film_desc) ".  
  72.         "VALUES ('$_POST[film_name]', '$img_name', '$run_time', '$ban_time', '$_POST[ticket_num]', '$_POST[ticket_price]', '$_POST[film_desc]')";  
  73.     $db->query($sql);  
  74.     admin_log($_POST['film_name'],'add','ticket');  
  75.     /* 清除缓存 */  
  76.     clear_cache_files();  
  77.     $link[0]['text'] ='继续添加';  
  78.     $link[0]['href'] = 'ticket.php?act=add';  
  79.     $link[1]['text'] = '返回列表';  
  80.     $link[1]['href'] = 'ticket.php?act=list';  
  81.     sys_msg('添加成功'0, $link);  
  82. }  
  83. /*------------------------------------------------------ */  
  84. //-- 编辑品牌  
  85. /*------------------------------------------------------ */  
  86. elseif ($_REQUEST['act'] == 'edit')  
  87. {  
  88.     /* 权限判断 */  
  89.     admin_priv('brand_manage');  
  90.     $sql = "SELECT brand_id, brand_name, site_url, brand_logo, brand_desc, brand_logo, is_show, sort_order ".  
  91.         "FROM " .$ecs->table('brand'). " WHERE brand_id='$_REQUEST[id]'";  
  92.     $brand = $db->GetRow($sql);  
  93.     $smarty->assign('ur_here',     $_LANG['brand_edit']);  
  94.     $smarty->assign('action_link', array('text' => $_LANG['06_goods_brand_list'], 'href' => 'brand.php?act=list&' . list_link_postfix()));  
  95.     $smarty->assign('brand',       $brand);  
  96.     $smarty->assign('form_action''updata');  
  97.     assign_query_info();  
  98.     $smarty->display('brand_info.htm');  
  99. }  
  100. elseif ($_REQUEST['act'] == 'updata')  
  101. {  
  102.     admin_priv('brand_manage');  
  103.     if ($_POST['brand_name'] != $_POST['old_brandname'])  
  104.     {  
  105.         /*检查品牌名是否相同*/  
  106.         $is_only = $exc->is_only('brand_name', $_POST['brand_name'], $_POST['id']);  
  107.         if (!$is_only)  
  108.         {  
  109.             sys_msg(sprintf($_LANG['brandname_exist'], stripslashes($_POST['brand_name'])), 1);  
  110.         }  
  111.     }  
  112.     /*对描述处理*/  
  113.     if (!empty($_POST['brand_desc']))  
  114.     {  
  115.         $_POST['brand_desc'] = $_POST['brand_desc'];  
  116.     }  
  117.     $is_show = isset($_REQUEST['is_show']) ? intval($_REQUEST['is_show']) : 0;  
  118.     /*处理URL*/  
  119.     $site_url = sanitize_url( $_POST['site_url'] );  
  120.     /* 处理图片 */  
  121.     $img_name = basename($image->upload_image($_FILES['brand_logo'],'brandlogo'));  
  122.     $param = "brand_name = '$_POST[brand_name]',  site_url='$site_url', brand_desc='$_POST[brand_desc]', is_show='$is_show', sort_order='$_POST[sort_order]' ";  
  123.     if (!empty($img_name))  
  124.     {  
  125.         //有图片上传  
  126.         $param .= " ,brand_logo = '$img_name' ";  
  127.     }  
  128.   
  129.     if ($exc->edit($param,  $_POST['id']))  
  130.     {  
  131.         /* 清除缓存 */  
  132.         clear_cache_files();  
  133.         admin_log($_POST['brand_name'], 'edit''brand');  
  134.         $link[0]['text'] = $_LANG['back_list'];  
  135.         $link[0]['href'] = 'brand.php?act=list&' . list_link_postfix();  
  136.         $note = vsprintf($_LANG['brandedit_succed'], $_POST['brand_name']);  
  137.         sys_msg($note, 0, $link);  
  138.     }  
  139.     else  
  140.     {  
  141.         die($db->error());  
  142.     }  
  143. }  
  144.   
  145. /*------------------------------------------------------ */  
  146. //-- 编辑品牌名称  
  147. /*------------------------------------------------------ */  
  148. elseif ($_REQUEST['act'] == 'edit_brand_name')  
  149. {  
  150.     check_authz_json('brand_manage');  
  151.   
  152.     $id     = intval($_POST['id']);  
  153.     $name   = json_str_iconv(trim($_POST['val']));  
  154.   
  155.     /* 检查名称是否重复 */  
  156.     if ($exc->num("brand_name",$name, $id) != 0)  
  157.     {  
  158.         make_json_error(sprintf($_LANG['brandname_exist'], $name));  
  159.     }  
  160.     else  
  161.     {  
  162.         if ($exc->edit("brand_name = '$name'", $id))  
  163.         {  
  164.             admin_log($name,'edit','brand');  
  165.             make_json_result(stripslashes($name));  
  166.         }  
  167.         else  
  168.         {  
  169.             make_json_result(sprintf($_LANG['brandedit_fail'], $name));  
  170.         }  
  171.     }  
  172. }  
  173.   
  174. elseif($_REQUEST['act'] == 'add_brand')  
  175. {  
  176.     $brand = empty($_REQUEST['brand']) ? '' : json_str_iconv(trim($_REQUEST['brand']));  
  177.   
  178.     if(brand_exists($brand))  
  179.     {  
  180.         make_json_error($_LANG['brand_name_exist']);  
  181.     }  
  182.     else  
  183.     {  
  184.         $sql = "INSERT INTO " . $ecs->table('brand') . "(brand_name)" .  
  185.             "VALUES ( '$brand')";  
  186.   
  187.         $db->query($sql);  
  188.         $brand_id = $db->insert_id();  
  189.   
  190.         $arr = array("id"=>$brand_id, "brand"=>$brand);  
  191.   
  192.         make_json_result($arr);  
  193.     }  
  194. }  
  195. /*------------------------------------------------------ */  
  196. //-- 编辑排序序号  
  197. /*------------------------------------------------------ */  
  198. elseif ($_REQUEST['act'] == 'edit_sort_order')  
  199. {  
  200.     check_authz_json('brand_manage');  
  201.   
  202.     $id     = intval($_POST['id']);  
  203.     $order  = intval($_POST['val']);  
  204.     $name   = $exc->get_name($id);  
  205.   
  206.     if ($exc->edit("sort_order = '$order'", $id))  
  207.     {  
  208.         admin_log(addslashes($name),'edit','brand');  
  209.   
  210.         make_json_result($order);  
  211.     }  
  212.     else  
  213.     {  
  214.         make_json_error(sprintf($_LANG['brandedit_fail'], $name));  
  215.     }  
  216. }  
  217.   
  218. /*------------------------------------------------------ */  
  219. //-- 切换是否显示  
  220. /*------------------------------------------------------ */  
  221. elseif ($_REQUEST['act'] == 'toggle_show')  
  222. {  
  223.     check_authz_json('brand_manage');  
  224.     $id     = intval($_POST['id']);  
  225.     $val    = intval($_POST['val']);  
  226.     $exc->edit("is_show='$val'", $id);  
  227.     make_json_result($val);  
  228. }  
  229.   
  230. /*------------------------------------------------------ */  
  231. //-- 删除品牌  
  232. /*------------------------------------------------------ */  
  233. elseif ($_REQUEST['act'] == 'remove')  
  234. {  
  235.     check_authz_json('brand_manage');  
  236.     $id = intval($_GET['id']);  
  237.     /* 删除该品牌的图标 */  
  238.     $sql = "SELECT brand_logo FROM " .$ecs->table('brand'). " WHERE brand_id = '$id'";  
  239.     $logo_name = $db->getOne($sql);  
  240.     if (!empty($logo_name))  
  241.     {  
  242.         @unlink(ROOT_PATH . DATA_DIR . '/brandlogo/' .$logo_name);  
  243.     }  
  244.     $exc->drop($id);  
  245.     /* 更新商品的品牌编号 */  
  246.     $sql = "UPDATE " .$ecs->table('goods'). " SET brand_id=0 WHERE brand_id='$id'";  
  247.     $db->query($sql);  
  248.     $url = 'brand.php?act=query&' . str_replace('act=remove''', $_SERVER['QUERY_STRING']);  
  249.     ecs_header("Location: $url\n");  
  250.     exit;  
  251. }  
  252. /*------------------------------------------------------ */  
  253. //-- 删除品牌图片  
  254. /*------------------------------------------------------ */  
  255. elseif ($_REQUEST['act'] == 'drop_logo')  
  256. {  
  257.     /* 权限判断 */  
  258.     admin_priv('brand_manage');  
  259.     $brand_id = isset($_GET['id']) ? intval($_GET['id']) : 0;  
  260.     /* 取得logo名称 */  
  261.     $sql = "SELECT brand_logo FROM " .$ecs->table('brand'). " WHERE brand_id = '$brand_id'";  
  262.     $logo_name = $db->getOne($sql);  
  263.     if (!empty($logo_name))  
  264.     {  
  265.         @unlink(ROOT_PATH . DATA_DIR . '/brandlogo/' .$logo_name);  
  266.         $sql = "UPDATE " .$ecs->table('brand'). " SET brand_logo = '' WHERE brand_id = '$brand_id'";  
  267.         $db->query($sql);  
  268.     }  
  269.     $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'));  
  270.     sys_msg($_LANG['drop_brand_logo_success'], 0, $link);  
  271. }  
  272.   
  273. /*------------------------------------------------------ */  
  274. //-- 排序、分页、查询  
  275. /*------------------------------------------------------ */  
  276. elseif ($_REQUEST['act'] == 'query')  
  277. {  
  278.     $brand_list = get_brandlist();  
  279.     $smarty->assign('brand_list',   $brand_list['brand']);  
  280.     $smarty->assign('filter',       $brand_list['filter']);  
  281.     $smarty->assign('record_count', $brand_list['record_count']);  
  282.     $smarty->assign('page_count',   $brand_list['page_count']);  
  283.   
  284.     make_json_result($smarty->fetch('brand_list.htm'), '',  
  285.         array('filter' => $brand_list['filter'], 'page_count' => $brand_list['page_count']));  
  286. }  
  287. /**  
  288.  * 获取品牌列表  
  289.  *  
  290.  * @access  public  
  291.  * @return  array  
  292.  */  
  293. function get_brandlist()  
  294. {  
  295.     $result = get_filter();  
  296.     if ($result === false)  
  297.     {  
  298.         /* 分页大小 */  
  299.         $filter = array();  
  300.   
  301.         /* 记录总数以及页数 */  
  302.         if (isset($_POST['brand_name']))  
  303.         {  
  304.             $sql = "SELECT COUNT(*) FROM ".$GLOBALS['ecs']->table('brand') .' WHERE brand_name = \''.$_POST['brand_name'].'\'';  
  305.         }  
  306.         else  
  307.         {  
  308.             $sql = "SELECT COUNT(*) FROM ".$GLOBALS['ecs']->table('brand');  
  309.         }  
  310.   
  311.         $filter['record_count'] = $GLOBALS['db']->getOne($sql);  
  312.   
  313.         $filter = page_and_size($filter);  
  314.   
  315.         /* 查询记录 */  
  316.         if (isset($_POST['brand_name']))  
  317.         {  
  318.             if(strtoupper(EC_CHARSET) == 'GBK')  
  319.             {  
  320.                 $keyword = iconv("UTF-8""gb2312", $_POST['brand_name']);  
  321.             }  
  322.             else  
  323.             {  
  324.                 $keyword = $_POST['brand_name'];  
  325.             }  
  326.             $sql = "SELECT * FROM ".$GLOBALS['ecs']->table('brand')." WHERE brand_name like '%{$keyword}%' ORDER BY sort_order ASC";  
  327.         }  
  328.         else  
  329.         {  
  330.             $sql = "SELECT * FROM ".$GLOBALS['ecs']->table('brand')." ORDER BY sort_order ASC";  
  331.         }  
  332.   
  333.         set_filter($filter, $sql);  
  334.     }  
  335.     else  
  336.     {  
  337.         $sql    = $result['sql'];  
  338.         $filter = $result['filter'];  
  339.     }  
  340.     $res = $GLOBALS['db']->selectLimit($sql, $filter['page_size'], $filter['start']);  
  341.   
  342.     $arr = array();  
  343.     while ($rows = $GLOBALS['db']->fetchRow($res))  
  344.     {  
  345.         $brand_logo = empty($rows['brand_logo']) ? '' :  
  346.             '<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>';  
  347.         $site_url   = empty($rows['site_url']) ? 'N/A' : '<a href="'.$rows['site_url'].'" target="_brank">'.$rows['site_url'].'</a>';  
  348.   
  349.         $rows['brand_logo'] = $brand_logo;  
  350.         $rows['site_url']   = $site_url;  
  351.   
  352.         $arr[] = $rows;  
  353.     }  
  354.   
  355.     return array('brand' => $arr, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']);  
  356. }  
  357.   
  358. ?>  


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

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

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




















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

以下代码是ticket.php

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

三、电子票列表模板

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.   
  60.   
  61. </head>  
  62.   
  63.   
  64. <body>  
  65.     <!-- #BeginLibraryItem "/library/page_header.lbi" --><!-- #EndLibraryItem -->  
  66.     <!--当前位置 start-->  
  67.     <div class="block box">  
  68.         <div id="ur_here">  
  69.         <!-- #BeginLibraryItem "/library/ur_here.lbi" --><!-- #EndLibraryItem -->  
  70.         </div>  
  71.     </div>  
  72.     <!--当前位置 end-->  
  73.     <div class="blank"></div>  
  74.     <!-- 电子票 详情 start-->  
  75.     <div class="block box">  
  76.         <div class="box">  
  77.         <div class="box_1">  
  78.         <h3><span>{$lang.ticket_info}</span></h3>  
  79.             <div class="boxCenterList">  
  80.                 <table width="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="#dddddd">  
  81.                     <tr>  
  82.                         <td bgcolor="#ffffff" width="200">  
  83.                             <div style="width:300px;text-align: center;">  
  84.                                 <img src="data/ticket_pic/{$ticket.film_pic}" width="200" />  
  85.                             </div>  
  86.                         </td>  
  87.                         <td bgcolor="#ffffff" valign="top" style="padding:20px;">  
  88.                             <h1 style="margin-top:10px;line-height:50px;" ><span id="film_name">{$ticket.film_name}</span></h1>  
  89.                             <div style="height:200px;">     
  90.                                 <p class="p_t"><b>{$lang.film_start_c}:</b>{$ticket.run_time}</p>  
  91.                                 <p class="p_t"><b>{$lang.film_end_c}:</b>{$ticket.ban_time}</p>  
  92.                                 <p class="p_t"><b>{$lang.film_act_er}:</b>{$ticket.film_desc}</p>  
  93.                                 <!--<p class="p_t"><b>{$lang.film_type_c}:</b>{$ticket.t_id}</p>-->  
  94.                                 <p class="p_t"><b>{$lang.film_price_c}:</b><span id="ticket_price">{$ticket.ticket_price}</span>{$lang.film_unit}  
  95.                                 <b>{$lang.film_remain}:</b>{$surplus_num}{$lang.film_spread}</p>  
  96.                             </div>  
  97.                         </td>  
  98.                     </tr>  
  99.                 </table>  
  100.   
  101.             </div>  
  102.         </div>  
  103.         </div>  
  104.         <div class="blank5"></div>  
  105.         <!-- 电影 start-->  
  106.         <div class="box_1">  
  107.             <h3 style="padding:0 5px;">  
  108.                 <div id="com_b" class="history clearfix">  
  109.                     <h2 class="h2bg">{$lang.film_check_seat}</h2> <!--- 选座 -->  
  110.                 </div>  
  111.             </h3>  
  112.             <!--- 电影选座str -->  
  113.             <div id="com_h" style="display:;">  
  114.                 <div id="main">  
  115.                     <div class="demo">  
  116.                         <div id="seat-map">  
  117.                             <div class="front">{$lang.film_pm_1}</div>  
  118.                         </div>  
  119.                         <div class="booking-details">  
  120.   
  121.                             <p>{$lang.film_check_seat}:</p>  
  122.                             <ul id="selected-seats"></ul>  
  123.                             <p>{$lang.film_checked_seat}:<span id="counter"></span></p>  
  124.                             <p>{$lang.film_all}:<b><span id="total">0</span></b>{$lang.film_unit}</p>  
  125.                             <div id="legend"></div>  
  126.   
  127.                         </div>  
  128.                         <div style="text-align: center;">  
  129.                             <input type="button" onclick="checkout({$ticket.ticket_id})" value="确定购买" style="border-radius:5px;width:200px;height:40px;background: #ff6600;border: none;">  
  130.                         </div>  
  131.                         <div style="clear:both;"></div>  
  132.                     </div>  
  133.   
  134.                 </div>  
  135.             </div>  
  136.         </div>  
  137.         <!-- 电影选作 end -->  
  138.       
  139.   </div>    
  140. <!--电子票 详情 end-->  
  141.   
  142. <div class="blank5"></div>  
  143. <!--帮助-->  
  144. <div class="block">  
  145.   <div class="box">  
  146.    <div class="helpTitBg clearfix">  
  147.     <!-- #BeginLibraryItem "/library/help.lbi" --><!-- #EndLibraryItem -->  
  148.    </div>  
  149.   </div>    
  150. </div>  
  151. <div class="blank"></div>  
  152. <!--帮助-->  
  153. <!--友情链接 start-->  
  154. <!--{if $img_links  or $txt_links }-->  
  155. <div id="bottomNav" class="box">  
  156.  <div class="box_1">  
  157.   <div class="links clearfix">  
  158.     <!--开始图片类型的友情链接{foreach from=$img_links item=link}-->  
  159.     <a href="{$link.url}" target="_blank" title="{$link.name}"><img src="{$link.logo}" alt="{$link.name}" border="0" /></a>  
  160.     <!--结束图片类型的友情链接{/foreach}-->  
  161.     <!-- {if $txt_links} -->  
  162.     <!--开始文字类型的友情链接{foreach from=$txt_links item=link}-->  
  163.     [<a href="{$link.url}" target="_blank" title="{$link.name}">{$link.name}</a>]   
  164.     <!--结束文字类型的友情链接{/foreach}-->  
  165.     <!-- {/if} -->  
  166.   </div>  
  167.  </div>  
  168. </div>  
  169. <!--{/if}-->  
  170. <!--友情链接 end-->  
  171. <div class="blank"></div>  
  172. <!-- #BeginLibraryItem "/library/page_footer.lbi" --><!-- #EndLibraryItem -->  
  173.   
  174.   
  175.     {insert_scripts files='js/seat/jquery-1.8.3.min.js,seat/jquery.seat-charts.min.js'}  
  176.     <script type="text/javascript">  
  177.             $(function() {  
  178.                 window.__Object_toJSONString = Object.prototype.toJSONString;  
  179.                 delete Object.prototype.toJSONString;  
  180.             });  
  181.         </script>  
  182.         <script type="text/javascript">  
  183.             var price = {$ticket.ticket_price}; //票价  
  184.             // alert(price)  
  185.             $(document).ready(function() {  
  186.                 var $cart = $('#selected-seats'); //座位区  
  187.                 $counter = $('#counter'); //票数  
  188.                 $total = $('#total'); //总计金额  
  189.                   
  190.                 var sc = $('#seat-map').seatCharts({  
  191.                     map: [  //座位图  
  192.                     'aaaaaaaaaa',  
  193.                     'aaaaaaaaaa',  
  194.                     '__________',  
  195.                     'aaaaaaaa__',  
  196.                     'aaaaaaaaaa',  
  197.                     'aaaaaaaaaa',  
  198.                     'aaaaaaaaaa',  
  199.                     'aaaaaaaaaa',  
  200.                     'aaaaaaaaaa',  
  201.                     'aa__aa__aa'  
  202.                     ],  
  203.                     naming : {  
  204.                         top : false,  
  205.                         getLabel : function (character, row, column) {  
  206.                             return column;  
  207.                         }  
  208.                     },  
  209.                     legend : { //定义图例  
  210.                         node : $('#legend'),  
  211.                         items : [  
  212.                         [ 'a''available',   '可选座' ],  
  213.                         [ 'a''unavailable''已售出']  
  214.                         ]                     
  215.                     },  
  216.                     click: function () { //点击事件  
  217.                         //seat_id = this.settings.id;  
  218.                         if (this.status() == 'available') { //可选座  
  219.                             $('<li>'+(this.settings.row+1)+'排'+this.settings.label+'座</li>').attr('id''cart-item-'+this.settings.id).data('seatId', this.settings.id).appendTo($cart);  
  220.                               
  221.                             $counter.text(sc.find('selected').length+1); // 总票数  
  222.                             $total.text(recalculateTotal(sc)); // 总价格     
  223.                               
  224.                             return 'selected';  
  225.                         } else if (this.status() == 'selected') { //已选中  
  226.                             //更新数量  
  227.                             $counter.text(sc.find('selected').length-1);  
  228.                             //更新总计  
  229.                             $total.text(recalculateTotal(sc)-price-price);  
  230.                               
  231.                               
  232.                             //删除已预订座位  
  233.                             $('#cart-item-'+this.settings.id).remove();  
  234.                             //可选座  
  235.                             return 'available';  
  236.                         } else if (this.status() == 'unavailable') { //已售出  
  237.                             return 'unavailable';  
  238.                         } else {  
  239.                             return this.style();  
  240.                         }  
  241.                           
  242.                     }  
  243.                       
  244.                 });  
  245.                 //已售出的座位  
  246.                 sc.get({$ticket.unavailable}).status('unavailable');  
  247.                   
  248.                   
  249.             });  
  250.             //计算总金额  
  251.             function recalculateTotal(sc) {  
  252.                 var total = 0;  
  253.                 sc.find('selected').each(function () {  
  254.                     total += price;  
  255.                 });  
  256.                 return total += price;  
  257.             }  
  258.               
  259.               
  260.             function checkout(goodsId, parentId)  
  261.             {  
  262.               var goods        = new Object();  
  263.               var spec_arr     = $('#selected-seats').text(); // 座位  
  264.               var fittings_arr = new Array();  
  265.               var number       = $('#counter').html(); // 所选票数  
  266.               //var formBuy      = document.forms['ECS_FORMBUY'];  
  267.               var quick        = 0;  
  268.                 //alert(spec_arr);return false;  
  269.                 
  270.               goods.quick    = quick;  
  271.               goods.spec     = spec_arr;  
  272.               goods.goods_id = goodsId;  
  273.               goods.number   = number;  
  274.               goods.parent   = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);  
  275.   
  276.               Ajax.call('flow.php?step=ticket''goods=' + JSON.stringify(goods), addToCartResponse, 'POST''JSON');  
  277.   
  278.             }  
  279.   
  280.             /* *  
  281.              * 处理添加商品到购物车的反馈信息  
  282.              */  
  283.             function addToCartResponse(result)  
  284.             {  
  285.                 if(result.error == 1)  
  286.                 {  
  287.                     alert(result.message);  
  288.                     location.href = 'flow.php?step=login';  
  289.                 }  
  290.                 else if(result.error == 2)  
  291.                 {  
  292.                     alert(result.message);  
  293.                 }  
  294.                 else if(result.error == 3)  
  295.                 {  
  296.                     alert(result.message);  
  297.                     location.href = 'flow.php?step=ticket_done';  
  298.                 }  
  299.                 else if(result.error == 4)  
  300.                 {  
  301.                     alert(result.message);  
  302.                 }  
  303.                 else if(result.error == 5)  
  304.                 {  
  305.                     alert(result.message);  
  306.                 }  
  307.                 console.log(result);return false;  
  308.             }  
  309.               
  310.         </script>  
  311. </body>  
  312. </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.     /* 取得商品信息 */  
  51.     $ticket_info = "SELECT * FROM " .$GLOBALS['ecs']->table('ticket'). " WHERE ticket_id = '".$goods->goods_id ."'""'"; 
  52.     $ticket = $GLOBALS['db']->getRow($ticket_info); 
  53.     //此处出现问题bug未解决 
  54.        foreach($spec as $key => $val) 
  55.        {           
  56.               /* 初始化要插入购物车的基本件数据 */ 
  57.               $parent[] = array( 
  58.                      'user_id'        => $_SESSION['user_id'], 
  59.                      'ticket_order'   => $data[$key], 
  60.                      'ticket_id'      => $goods->goods_id, 
  61.                      'film_name'      => $ticket['film_name'], 
  62.                      'ticket_price'   => $ticket['ticket_price'], 
  63.                      'seat'           =>  $val 
  64.               );      
  65.        } 
  66.        foreach($spec as $sp) // 查询其他人是否已购买 
  67.        { 
  68.               $seat = "SELECT seat FROM " .$GLOBALS['ecs']->table('ticket_cart'). " WHERE seat = '".$sp."' AND ticket_id = '" . $goods->goods_id ."'";    
  69.               $one = $GLOBALS['db']->getOne($seat);           
  70.               if($one)   
  71.               {  
  72.                      $result['error'] = 4;  
  73.                      $result['message'] = '座位已被预定';                  
  74.               }  
  75.               else  
  76.               {  
  77.                      //购物车没有此物品,则插入  
  78.                      foreach($parent as $p)  
  79.                      {  
  80.                         $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('ticket_cart'), $p, 'INSERT');   
  81.                         $sql_select="select unavailable from ".$GLOBALS['ecs']->table('ticket')."where ticket_id='$p[ticket_id]'";  
  82.                         $str=$GLOBALS['db']->getOne($sql_select);  
  83.                         //$seat接过来的值 如果数据库为空则添加数据 否则 就拼接原数据+,+新数据  
  84.                         if(empty($str)){  
  85.                            $seat=$p['seat'];  
  86.                         }else{  
  87.                             $seat=$str.",".$p['seat'];  
  88.                         }  
  89.                         $sql_update="update".$GLOBALS['ecs']->table('ticket')."set unavailable='$seat' where ticket_id='$p[ticket_id]'";  
  90.                         $GLOBALS['db']->getAll($sql_update);   
  91.                                    $result['error'] = 3;  
  92.                                    $result['message'] = "购买成功";  
  93.                      }                       
  94.               }  
  95.        }   
  96.        echo  $json->encode($result);die;  
  97. }  
  98. elseif($_REQUEST['step'] == 'ticket_done')  
  99. {  
  100.               $sql = " select * from ". $GLOBALS['ecs']->table('ticket_cart').  
  101.               " where user_id = ".$_SESSION['user_id'];            
  102.               $carts = $GLOBALS['db']->getAll($sql);  
  103.               $smarty->assign('carts', $carts);                            
  104.               $num = count($carts); // 总票数  
  105.               $smarty->assign('num', $num);       
  106.               $price = '';  
  107.               foreach ($carts as $key => $val)  
  108.               {  
  109.                      $price    +=  $val['ticket_price'];  
  110.               }  
  111.               $smarty->assign('total_price', $price);              
  112. }  


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

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

  1. <!-- {if $step eq "ticket_done"} -->  
  2.   
  3.          <div class="flowBox" style="margin:30px auto 70px auto;">  
  4.   
  5.            
  6.   
  7.                    <h6 style="text-align:center; height:30px; line-height:30px;">{$lang.remember_order_number}:</h6>  
  8.   
  9.            
  10.   
  11.                    <table width="99%" align="center" cellpadding="20" cellspacing="0" bgcolor="#fff" style="border:1px solid #ddd; margin:20px auto;" >  
  12.   
  13. <tr>  
  14.   
  15.                                      <td align="center" bgcolor="#FFFFFF">票号</td>  
  16.   
  17.                                      <td align="center" bgcolor="#FFFFFF">电影名称</td>  
  18.   
  19.                                      <td align="center" bgcolor="#FFFFFF">座位号</td>  
  20.   
  21. </tr>  
  22.   
  23.                             <!--{foreach from=$carts item=cart}-->  
  24.   
  25. <tr>  
  26.   
  27.                                      <td align="center" bgcolor="#FFFFFF">{$cart.ticket_order}</td>  
  28.   
  29.                                      <td align="center" bgcolor="#FFFFFF">{$cart.film_name}</td>  
  30.   
  31.                                      <td align="center" bgcolor="#FFFFFF">{$cart.seat}</td>  
  32.   
  33. </tr>  
  34.   
  35. <!--{/foreach}-->  
  36.   
  37.                    </table>  
  38.   
  39.                    <table width="99%" align="center" cellpadding="20" cellspacing="0" bgcolor="#fff" style="border:1px solid #ddd; margin:20px auto;" >  
  40.   
  41.                             <tr>  
  42.   
  43.                                      <td align="center" bgcolor="#FFFFFF">总票数:{$num}</td>  
  44.   
  45.                                      <td align="center" bgcolor="#FFFFFF"></td>  
  46.   
  47.                                      <td align="center" bgcolor="#FFFFFF">总金额:{$total_price} 元</td>  
  48.   
  49.                             </tr>  
  50.   
  51.                    </table>  
  52.   
  53.          </div>         
  54.   
  55.          <!-- {/if} -->  

ok,一切完成。

posted on 2016-12-02 07:55  如果蜗牛有爱情  阅读(240)  评论(0编辑  收藏  举报

导航