前台效果展示:
2.
3.
后台展示效果:
代码实现:
一、 添加菜单项:路径admin\includes\inc_menu.php
$modules['18_ticket_manage']['01_ticket_list'] = 'ticket.php?act=list'; $modules['18_ticket_manage']['02_ticket_add'] = 'ticket.php?act=add';
配置菜单语言
打开 /languages/zh_cn/admin/common.php文件,添加语言
//菜单—添加 $_LANG['18_ticket_manage'] = '电子票管理'; //电子票管理 $_LANG['01_ticket_list'] = '电子票列表'; $_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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>SHOP 管理中心 - 品牌管理 </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="styles/general.css" rel="stylesheet" type="text/css" /> <link href="styles/main.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="../js/calendar.php?lang={$cfg_lang}"></script> <link href="../js/calendar/calendar.css" rel="stylesheet" type="text/css" /> </head> <body> <h1> <span class="action-span"><a href="ticket.php?act=list">电子票列表</a></span> <span class="action-span1"><a href="index.php?act=main">SHOP 管理中心</a> </span><span id="search_id" class="action-span1"> - 添加电子票 </span> <div style="clear:both"></div> </h1> <div class="main-div"> <form method="post" action="ticket.php" name="theForm" enctype="multipart/form-data" onsubmit="return validate()"> <table cellspacing="1" cellpadding="3" width="100%"> <tbody><tr> <td class="label">电影名称</td> <td><input type="text" name="film_name" maxlength="60" value=""><span class="require-field">*</span></td> </tr> <tr> <td class="label"><a href="javascript:showNotice('warn_brandlogo');" title="点击此处查看提示信息"> <img src="images/notice.gif" width="16" height="16" border="0" alt="点击此处查看提示信息"></a>电影海报</td> <td><input type="file" name="film_pic" id="logo" size="45"> <br><span class="notice-span" style="display:block" id="warn_brandlogo"> 请上传图片,做为影片宣传海报! </span> </td> </tr> <tr> <td class="label">开场时间</td> <td><input name="start_time" type="text" id="start_time" value="{$auction.start_time}" readonly="readonly" /> <input name="selbtn1" type="button" id="selbtn1" onclick="return showCalendar('start_time', '%Y-%m-%d %H:%M', '24', false, 'selbtn1');" value="{$lang.btn_select}" class="button" /> </td> </tr> <tr> <td class="label">禁止入场时间</td> <td><input name="end_time" type="text" id="end_time" value="{$auction.end_time}" readonly="readonly" /> <input name="selbtn2" type="button" id="selbtn2" onclick="return showCalendar('end_time', '%Y-%m-%d %H:%M', '24', false, 'selbtn2');" value="{$lang.btn_select}" class="button" /> </td> </tr> <tr> <td class="label">座位数量</td> <td><input type="text" name="ticket_num" maxlength="40" size="15" value="50"></td> </tr> <tr> <td class="label">票价</td> <td><input type="text" name="ticket_price" maxlength="40" size="15" value="50"></td> </tr> <tr> <td class="label">影片描述</td> <td><textarea name="film_desc" cols="60" rows="4"></textarea></td> </tr> <tr> <td colspan="2" align="center"><br> <input type="submit" class="button" value=" 确定 "> <input type="reset" class="button" value=" 重置 "> <input type="hidden" name="act" value="{$form_action}"> </td> </tr> </tbody></table> </form> </div> </body> </html>
四、创建upload\admin\ticket.php (复制品牌控制器upload\admin\brand.php)
以下是修改好的ticket.php
<?php /** * ECSHOP 管理中心电子票管理 * ============================================================================ * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。 * 网站地址: http://www.ecshop.com; * ---------------------------------------------------------------------------- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和 * 使用;不允许对程序代码以任何形式任何目的的再发布。 * ============================================================================ * $Author: liubo $ * $Id: brand.php 17217 2011-01-19 06:29:08Z liubo $ */ define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init.php'); include_once(ROOT_PATH . 'includes/cls_image.php'); $image = new cls_image($_CFG['bgcolor']); $exc = new exchange($ecs->table("ticket"), $db, 'ticket_id', 'file_name'); /*------------------------------------------------------ */ //-- 电子票列表 /*------------------------------------------------------ */ if ($_REQUEST['act'] == 'list') { $smarty->assign('ur_here', '电子票列表'); $smarty->assign('action_link', array('text' =>$_LANG['02_ticket_add'] , 'href' => 'ticket.php?act=add')); $smarty->assign('full_page', 1); //查询电子票信息(改动的部分) $sql = "select * from ". $GLOBALS['ecs']->table('ticket'); $res = $GLOBALS['db']->query($sql); //$res资源类型 $list = array(); while($row = $GLOBALS['db']->fetchRow($res)) { $row['run_time'] = local_date('Y-m-d H:i',$row['run_time']); $row['ban_time'] = local_date('Y-m-d H:i',$row['ban_time']); $list[] = $row; } $smarty->assign('ticket_list',$list); assign_query_info(); $smarty->display('ticket_list.htm'); } /*------------------------------------------------------ */ //-- 添加电子票 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'add') { /* 权限判断 */ admin_priv('goods_manage'); $smarty->assign('ur_here', '电子票添加'); $smarty->assign('action_link', array('text' => $_LANG['01_ticket_list'], 'href' => 'ticket.php?act=list')); $smarty->assign('form_action', 'insert'); $smarty->display('ticket_add.htm'); } elseif ($_REQUEST['act'] == 'insert') { /*检查电影名称是否重复*/ admin_priv('ticket_manage'); $is_only = $exc->is_only('film_name', $_POST['film_name']); if (!$is_only) { sys_msg(sprintf('已存在', stripslashes($_POST['film_name'])), 1); } //时间处理 $run_time = local_strtotime($_POST['start_time']); $ban_time = local_strtotime($_POST['end_time']); /*处理图片*/ $img_name = basename($image->upload_image($_FILES['film_pic'],'ticket_pic')); /*插入数据*/ $sql = "INSERT INTO ".$ecs->table('ticket')."(film_name, film_pic, run_time, ban_time,ticket_num,ticket_price,film_desc) ". "VALUES ('$_POST[film_name]', '$img_name', '$run_time', '$ban_time', '$_POST[ticket_num]', '$_POST[ticket_price]', '$_POST[film_desc]')"; $db->query($sql); admin_log($_POST['film_name'],'add','ticket'); /* 清除缓存 */ clear_cache_files(); $link[0]['text'] ='继续添加'; $link[0]['href'] = 'ticket.php?act=add'; $link[1]['text'] = '返回列表'; $link[1]['href'] = 'ticket.php?act=list'; sys_msg('添加成功', 0, $link); } /*------------------------------------------------------ */ //-- 编辑品牌 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'edit') { /* 权限判断 */ admin_priv('brand_manage'); $sql = "SELECT brand_id, brand_name, site_url, brand_logo, brand_desc, brand_logo, is_show, sort_order ". "FROM " .$ecs->table('brand'). " WHERE brand_id='$_REQUEST[id]'"; $brand = $db->GetRow($sql); $smarty->assign('ur_here', $_LANG['brand_edit']); $smarty->assign('action_link', array('text' => $_LANG['06_goods_brand_list'], 'href' => 'brand.php?act=list&' . list_link_postfix())); $smarty->assign('brand', $brand); $smarty->assign('form_action', 'updata'); assign_query_info(); $smarty->display('brand_info.htm'); } elseif ($_REQUEST['act'] == 'updata') { admin_priv('brand_manage'); if ($_POST['brand_name'] != $_POST['old_brandname']) { /*检查品牌名是否相同*/ $is_only = $exc->is_only('brand_name', $_POST['brand_name'], $_POST['id']); if (!$is_only) { sys_msg(sprintf($_LANG['brandname_exist'], stripslashes($_POST['brand_name'])), 1); } } /*对描述处理*/ if (!empty($_POST['brand_desc'])) { $_POST['brand_desc'] = $_POST['brand_desc']; } $is_show = isset($_REQUEST['is_show']) ? intval($_REQUEST['is_show']) : 0; /*处理URL*/ $site_url = sanitize_url( $_POST['site_url'] ); /* 处理图片 */ $img_name = basename($image->upload_image($_FILES['brand_logo'],'brandlogo')); $param = "brand_name = '$_POST[brand_name]', site_url='$site_url', brand_desc='$_POST[brand_desc]', is_show='$is_show', sort_order='$_POST[sort_order]' "; if (!empty($img_name)) { //有图片上传 $param .= " ,brand_logo = '$img_name' "; } if ($exc->edit($param, $_POST['id'])) { /* 清除缓存 */ clear_cache_files(); admin_log($_POST['brand_name'], 'edit', 'brand'); $link[0]['text'] = $_LANG['back_list']; $link[0]['href'] = 'brand.php?act=list&' . list_link_postfix(); $note = vsprintf($_LANG['brandedit_succed'], $_POST['brand_name']); sys_msg($note, 0, $link); } else { die($db->error()); } } /*------------------------------------------------------ */ //-- 编辑品牌名称 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'edit_brand_name') { check_authz_json('brand_manage'); $id = intval($_POST['id']); $name = json_str_iconv(trim($_POST['val'])); /* 检查名称是否重复 */ if ($exc->num("brand_name",$name, $id) != 0) { make_json_error(sprintf($_LANG['brandname_exist'], $name)); } else { if ($exc->edit("brand_name = '$name'", $id)) { admin_log($name,'edit','brand'); make_json_result(stripslashes($name)); } else { make_json_result(sprintf($_LANG['brandedit_fail'], $name)); } } } elseif($_REQUEST['act'] == 'add_brand') { $brand = empty($_REQUEST['brand']) ? '' : json_str_iconv(trim($_REQUEST['brand'])); if(brand_exists($brand)) { make_json_error($_LANG['brand_name_exist']); } else { $sql = "INSERT INTO " . $ecs->table('brand') . "(brand_name)" . "VALUES ( '$brand')"; $db->query($sql); $brand_id = $db->insert_id(); $arr = array("id"=>$brand_id, "brand"=>$brand); make_json_result($arr); } } /*------------------------------------------------------ */ //-- 编辑排序序号 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'edit_sort_order') { check_authz_json('brand_manage'); $id = intval($_POST['id']); $order = intval($_POST['val']); $name = $exc->get_name($id); if ($exc->edit("sort_order = '$order'", $id)) { admin_log(addslashes($name),'edit','brand'); make_json_result($order); } else { make_json_error(sprintf($_LANG['brandedit_fail'], $name)); } } /*------------------------------------------------------ */ //-- 切换是否显示 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'toggle_show') { check_authz_json('brand_manage'); $id = intval($_POST['id']); $val = intval($_POST['val']); $exc->edit("is_show='$val'", $id); make_json_result($val); } /*------------------------------------------------------ */ //-- 删除品牌 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'remove') { check_authz_json('brand_manage'); $id = intval($_GET['id']); /* 删除该品牌的图标 */ $sql = "SELECT brand_logo FROM " .$ecs->table('brand'). " WHERE brand_id = '$id'"; $logo_name = $db->getOne($sql); if (!empty($logo_name)) { @unlink(ROOT_PATH . DATA_DIR . '/brandlogo/' .$logo_name); } $exc->drop($id); /* 更新商品的品牌编号 */ $sql = "UPDATE " .$ecs->table('goods'). " SET brand_id=0 WHERE brand_id='$id'"; $db->query($sql); $url = 'brand.php?act=query&' . str_replace('act=remove', '', $_SERVER['QUERY_STRING']); ecs_header("Location: $url\n"); exit; } /*------------------------------------------------------ */ //-- 删除品牌图片 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'drop_logo') { /* 权限判断 */ admin_priv('brand_manage'); $brand_id = isset($_GET['id']) ? intval($_GET['id']) : 0; /* 取得logo名称 */ $sql = "SELECT brand_logo FROM " .$ecs->table('brand'). " WHERE brand_id = '$brand_id'"; $logo_name = $db->getOne($sql); if (!empty($logo_name)) { @unlink(ROOT_PATH . DATA_DIR . '/brandlogo/' .$logo_name); $sql = "UPDATE " .$ecs->table('brand'). " SET brand_logo = '' WHERE brand_id = '$brand_id'"; $db->query($sql); } $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')); sys_msg($_LANG['drop_brand_logo_success'], 0, $link); } /*------------------------------------------------------ */ //-- 排序、分页、查询 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'query') { $brand_list = get_brandlist(); $smarty->assign('brand_list', $brand_list['brand']); $smarty->assign('filter', $brand_list['filter']); $smarty->assign('record_count', $brand_list['record_count']); $smarty->assign('page_count', $brand_list['page_count']); make_json_result($smarty->fetch('brand_list.htm'), '', array('filter' => $brand_list['filter'], 'page_count' => $brand_list['page_count'])); } /** * 获取品牌列表 * * @access public * @return array */ function get_brandlist() { $result = get_filter(); if ($result === false) { /* 分页大小 */ $filter = array(); /* 记录总数以及页数 */ if (isset($_POST['brand_name'])) { $sql = "SELECT COUNT(*) FROM ".$GLOBALS['ecs']->table('brand') .' WHERE brand_name = \''.$_POST['brand_name'].'\''; } else { $sql = "SELECT COUNT(*) FROM ".$GLOBALS['ecs']->table('brand'); } $filter['record_count'] = $GLOBALS['db']->getOne($sql); $filter = page_and_size($filter); /* 查询记录 */ if (isset($_POST['brand_name'])) { if(strtoupper(EC_CHARSET) == 'GBK') { $keyword = iconv("UTF-8", "gb2312", $_POST['brand_name']); } else { $keyword = $_POST['brand_name']; } $sql = "SELECT * FROM ".$GLOBALS['ecs']->table('brand')." WHERE brand_name like '%{$keyword}%' ORDER BY sort_order ASC"; } else { $sql = "SELECT * FROM ".$GLOBALS['ecs']->table('brand')." ORDER BY sort_order ASC"; } set_filter($filter, $sql); } else { $sql = $result['sql']; $filter = $result['filter']; } $res = $GLOBALS['db']->selectLimit($sql, $filter['page_size'], $filter['start']); $arr = array(); while ($rows = $GLOBALS['db']->fetchRow($res)) { $brand_logo = empty($rows['brand_logo']) ? '' : '<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>'; $site_url = empty($rows['site_url']) ? 'N/A' : '<a href="'.$rows['site_url'].'" target="_brank">'.$rows['site_url'].'</a>'; $rows['brand_logo'] = $brand_logo; $rows['site_url'] = $site_url; $arr[] = $rows; } return array('brand' => $arr, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']); } ?>
以下代码是ticket_list.html用来显示电子票
<!-- $Id: brand_list.htm 15898 2009-05-04 07:25:41Z liuhui $ --> {if $full_page} {include file="pageheader.htm"} {insert_scripts files="../js/utils.js,listtable.js"} <!-- 品牌搜索 --> {include file="brand_search.htm"} <form method="post" action="" name="listForm"> <!-- start brand list --> <div class="list-div" id="listDiv"> {/if} <table cellpadding="3" cellspacing="1"> <tr> <th>电影名称</th> <th>开场时间</th> <th>禁止时间</th> <th>总票数</th> <th>票价</th> <th>操作</th> </tr> {foreach from=$ticket_list item=ticket} <tr> <td class="first-cell"> <span>{$ticket.film_name}</span> <span onclick="javascript:listTable.edit(this, 'edit_brand_name', {$brand.brand_id})">{$brand.brand_name|escape:html}</span> </td> <td align="center">{$ticket.run_time}</td> <td align="center">{$ticket.ban_time}</td> <td align="center"><span onclick="javascript:listTable.edit(this, 'edit_sort_order', {$brand.brand_id})">{$ticket.ticket_num}</span></td> <td align="center">{$ticket.ticket_price}</td> <td align="center"> <a href="brand.php?act=edit&id={$brand.brand_id}" title="{$lang.edit}">编辑</a> | <a href="javascript:;" onclick="listTable.remove({$brand.brand_id}, '{$lang.drop_confirm}')" title="{$lang.edit}">删除</a> </td> </tr> {/foreach} <tr> <td align="right" nowrap="true" colspan="6"> {include file="page.htm"} </td> </tr> </table> {if $full_page} <!-- end brand list --> </div> </form> <script type="text/javascript" language="javascript"> <!-- listTable.recordCount = {$record_count}; listTable.pageCount = {$page_count}; {foreach from=$filter item=item key=key} listTable.filter.{$key} = '{$item}'; {/foreach} {literal} onload = function() { // 开始检查订单 startCheckOrder(); } {/literal} //--> </script> {include file="pagefooter.htm"} {/if}
到达这里之后,后台添加也就完成了下面是前台的展示效果代码:
一、添加导航栏 :电子票
打开后台---系统设置—自定义导航栏--添加导航
二、在upload下建立一个控制器ticket.php
以下代码是ticket.php
<?php /** * ECSHOP 前台电子票列表 */ define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init.php'); if ((DEBUG_MODE & 2) != 2) { $smarty->caching = true; } /*------------------------------------------------------ */ //-- INPUT /*------------------------------------------------------ */ /* 获得请求的分类 ID */ if (!empty($_REQUEST['id'])) { $ticket_id = intval($_REQUEST['id']); //echo $ticket_id;die; } if (empty($ticket_id)) { assign_template(); $position = assign_ur_here('', $_LANG['all_ticket']); $smarty->assign('page_title', $position['title']); // 页面标题 $smarty->assign('ur_here', $position['ur_here']); // 当前位置 $smarty->assign('categories', get_categories_tree()); // 分类树 $smarty->assign('helps', get_shop_help()); // 网店帮助 $smarty->assign('top_goods', get_top10()); // 销售排行 $sql ="select * from " . $GLOBALS['ecs']->table('ticket'); $res = $GLOBALS['db']->query($sql); $ticket_list = $GLOBALS['db']->getAll($sql); $smarty->assign('ticket_list', $ticket_list); $smarty->display('ticket_list.dwt'); exit(); } $ticket_info = get_ticket_info($ticket_id); // 电子票列表 $seats = str_replace('排', '_', $ticket_info['unavailable']); $arr = explode(',', str_replace('座', '', $seats)); $ticket_info['unavailable'] = json_encode($arr, true); #$sql="select * from ecs_ticket where ticket_id = '$ticket_id'"; #$arr=$GLOBALS['db']->getAll($sql); #print_r($arr); //print_r($ticket_info);die; if (empty($ticket_info)) { ecs_header("Location: ./\n"); exit; } $smarty->assign('data_dir', DATA_DIR); // 赋值固定内容 assign_template(); $position = assign_ur_here($cate, $ticket_info['ticket_name']); $smarty->assign('page_title', $position['title']); // 页面标题 $smarty->assign('ur_here', $position['ur_here']); // 当前位置 //print_r($position);die; $smarty->assign('categories', get_categories_tree()); // 分类树 $smarty->assign('helps', get_shop_help()); // 网店帮助 $smarty->assign('top_goods', get_top10()); // 销售排行 $smarty->assign('show_marketprice', $_CFG['show_marketprice']); $smarty->assign('ticket', $ticket_info); $smarty->display('ticket_info.dwt'); /*------------------------------------------------------ */ //-- PRIVATE FUNCTION /*------------------------------------------------------ */ /** * 获得指定电子票的详细信息 * * @access private * @param integer $id * @return void */ function get_ticket_info($id) { $sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('ticket') . " WHERE ticket_id = '$id'"; $row = $GLOBALS['db']->getRow($sql); $row['run_time'] = local_date('Y-m-d H:i', $row['run_time']); $row['ban_time'] = local_date('Y-m-d H:i', $row['ban_time']); return $row; } ?>
三、电子票列表模板
1、新建upload\themes\default\ticket_list.dwt(自己布局)
以下是ticket_list.dwt
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="Keywords" content="{$keywords}" /> <meta name="Description" content="{$description}" /> <!-- TemplateBeginEditable name="doctitle" --> <title>{$page_title}</title> <!-- TemplateEndEditable --> <!-- TemplateBeginEditable name="head" --> <!-- TemplateEndEditable --> <link rel="shortcut icon" href="favicon.ico" /> <link rel="icon" href="animated_favicon.gif" type="image/gif" /> <link href="{$ecs_css_path}" rel="stylesheet" type="text/css" /> {* 包含脚本文件 *} {insert_scripts files='common.js'} </head> <body> <!-- #BeginLibraryItem "/library/page_header.lbi" --><!-- #EndLibraryItem --> <!--当前位置 start--> <div class="block box"> <div id="ur_here"> <!-- #BeginLibraryItem "/library/ur_here.lbi" --><!-- #EndLibraryItem --> </div> </div> <!--当前位置 end--> <div class="blank"></div> <div class="block clearfix"> <!--left start--> <div class="AreaL"> <!-- TemplateBeginEditable name="左边区域" --> <!-- #BeginLibraryItem "/library/cart.lbi" --><!-- #EndLibraryItem --> <!-- #BeginLibraryItem "/library/category_tree.lbi" --><!-- #EndLibraryItem --> <!-- #BeginLibraryItem "/library/goods_related.lbi" --><!-- #EndLibraryItem --> <!-- #BeginLibraryItem "/library/goods_fittings.lbi" --><!-- #EndLibraryItem --> <!-- #BeginLibraryItem "/library/goods_article.lbi" --><!-- #EndLibraryItem --> <!-- #BeginLibraryItem "/library/goods_attrlinked.lbi" --><!-- #EndLibraryItem --> <!-- TemplateEndEditable --> <!-- TemplateBeginEditable name="左边广告区域(宽200px)" --> <!-- TemplateEndEditable --> <!--AD end--> <!-- #BeginLibraryItem "/library/history.lbi" --><!-- #EndLibraryItem --> </div> <!--left end--> <!--right start--> <div class="AreaR"> <!-- TemplateBeginEditable name="通栏广告区域(宽750px)" --> <!-- TemplateEndEditable --> <div class="blank5"></div> <h3 class="border"><span><!--{$lang.all_ticket}--></span></h3> <!-- {foreach from=$ticket_list name="ticket_list_foreach" item=ticket_data} --> <dl style="margin:20px; height:300px; text-align:center;float:left;"> <dt><a href="ticket.php?id={$ticket_data.ticket_id}"> <img src="data/ticket_pic/{$ticket_data.film_pic}" alt="{$ticket_data.ticket_pic|escape:html}" height="270" width="200" /></a></dt> <dd>余票:{$ticket_data.ticket_num}张|价格:{$ticket_data.ticket_price}元|<a href="ticket.php?id={$ticket_data.ticket_id}">购买</a></dd> </dl> <!-- {/foreach} --> <div class="blank5"></div> </div <!--right end--> </div> <div class="blank5"></div> <!--帮助--> <div class="block"> <div class="box"> <div class="helpTitBg clearfix"> <!-- #BeginLibraryItem "/library/help.lbi" --><!-- #EndLibraryItem --> </div> </div> </div> <div class="blank"></div> <!--帮助--> <!--友情链接 start--> <!--{if $img_links or $txt_links }--> <div id="bottomNav" class="box"> <div class="box_1"> <div class="links clearfix"> <!--开始图片类型的友情链接{foreach from=$img_links item=link}--> <a href="{$link.url}" target="_blank" title="{$link.name}"><img src="{$link.logo}" alt="{$link.name}" border="0" /></a> <!--结束图片类型的友情链接{/foreach}--> <!-- {if $txt_links} --> <!--开始文字类型的友情链接{foreach from=$txt_links item=link}--> [<a href="{$link.url}" target="_blank" title="{$link.name}">{$link.name}</a>] <!--结束文字类型的友情链接{/foreach}--> <!-- {/if} --> </div> </div> </div> <!--{/if}--> <!--友情链接 end--> <div class="blank"></div> <!-- #BeginLibraryItem "/library/page_footer.lbi" --><!-- #EndLibraryItem --> </body> </html>
创建电子票详情ticket_info.dwt(自己布局);
(复制 goods.dwt模板upload\themes\default\goods.dwt);
以下是ticket_info.dwt
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="Keywords" content="{$keywords}" /> <meta name="Description" content="{$description}" /> <style type="text/css"> .demo{width:700px; margin:40px auto 0 auto; min-height:450px;} @media screen and (max-width: 360px) {.demo {width:340px}} ul,li{ list-style:none; } .front{width: 300px;margin: 5px 32px 45px 32px;background-color: #f0f0f0; color: #666;text-align: center;padding: 3px;border-radius: 5px;} .booking-details {float: right;position: relative;width:200px;height: 400px; } .booking-details h3 {margin: 5px 5px 0 0;font-size: 16px;} .booking-details p{line-height:26px; font-size:16px; color:#999;width:300px;} .booking-details p span{color:#666} div.seatCharts-cell {color: #182C4E;height: 25px;width: 25px;line-height: 25px;margin: 3px;float: left;text-align: center;outline: none;font-size: 13px;} div.seatCharts-seat {color: #fff;cursor: pointer;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;} div.seatCharts-row {height: 35px;} div.seatCharts-seat.available {background-color: #B9DEA0;} div.seatCharts-seat.focused {background-color: #76B474;border: none;} div.seatCharts-seat.selected {background-color: #E6CAC4;} div.seatCharts-seat.unavailable {background-color: #472B34;cursor: not-allowed;} div.seatCharts-container {border-right: 1px dotted #adadad;width: 400px;padding: 20px;float: left;} div.seatCharts-legend {padding-left: 0px;position: absolute;bottom: 16px;} ul.seatCharts-legendList {padding-left: 0px;} .seatCharts-legendItem{float:left; width:90px;margin-top: 10px;line-height: 2;} span.seatCharts-legendDescription {margin-left: 5px;line-height: 30px;} .checkout-button {display: block;width:80px; height:24px; line-height:20px;margin: 10px auto;border:1px solid #999;font-size: 14px; cursor:pointer} #selected-seats {max-height: 200px;overflow-y: auto;overflow-x: none;width: 200px;} #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} .checkout{ float:right; } </style> <!-- TemplateBeginEditable name="doctitle" --> <title>{$page_title}</title> <!-- TemplateEndEditable --><!-- TemplateBeginEditable name="head" --><!-- TemplateEndEditable --> <style> .p_t{ margin-top:10px; } b{ width:100px; } a.info{ text-decoration:none; display:inline-block; width:75px; line-height:25px; border:1px #CCC solid; text-align:center; } </style> <link rel="shortcut icon" href="favicon.ico" /> <link rel="icon" href="animated_favicon.gif" type="image/gif" /> <link href="{$ecs_css_path}" rel="stylesheet" type="text/css" /> </head> <body> <!-- #BeginLibraryItem "/library/page_header.lbi" --><!-- #EndLibraryItem --> <!--当前位置 start--> <div class="block box"> <div id="ur_here"> <!-- #BeginLibraryItem "/library/ur_here.lbi" --><!-- #EndLibraryItem --> </div> </div> <!--当前位置 end--> <div class="blank"></div> <!-- 电子票 详情 start--> <div class="block box"> <div class="box"> <div class="box_1"> <h3><span>{$lang.ticket_info}</span></h3> <div class="boxCenterList"> <table width="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="#dddddd"> <tr> <td bgcolor="#ffffff" width="200"> <div style="width:300px;text-align: center;"> <img src="data/ticket_pic/{$ticket.film_pic}" width="200" /> </div> </td> <td bgcolor="#ffffff" valign="top" style="padding:20px;"> <h1 style="margin-top:10px;line-height:50px;" ><span id="film_name">{$ticket.film_name}</span></h1> <div style="height:200px;"> <p class="p_t"><b>{$lang.film_start_c}:</b>{$ticket.run_time}</p> <p class="p_t"><b>{$lang.film_end_c}:</b>{$ticket.ban_time}</p> <p class="p_t"><b>{$lang.film_act_er}:</b>{$ticket.film_desc}</p> <!--<p class="p_t"><b>{$lang.film_type_c}:</b>{$ticket.t_id}</p>--> <p class="p_t"><b>{$lang.film_price_c}:</b><span id="ticket_price">{$ticket.ticket_price}</span>{$lang.film_unit} <b>{$lang.film_remain}:</b>{$surplus_num}{$lang.film_spread}</p> </div> </td> </tr> </table> </div> </div> </div> <div class="blank5"></div> <!-- 电影 start--> <div class="box_1"> <h3 style="padding:0 5px;"> <div id="com_b" class="history clearfix"> <h2 class="h2bg">{$lang.film_check_seat}</h2> <!--- 选座 --> </div> </h3> <!--- 电影选座str --> <div id="com_h" style="display:;"> <div id="main"> <div class="demo"> <div id="seat-map"> <div class="front">{$lang.film_pm_1}</div> </div> <div class="booking-details"> <p>{$lang.film_check_seat}:</p> <ul id="selected-seats"></ul> <p>{$lang.film_checked_seat}:<span id="counter"></span></p> <p>{$lang.film_all}:<b><span id="total">0</span></b>{$lang.film_unit}</p> <div id="legend"></div> </div> <div style="text-align: center;"> <input type="button" onclick="checkout({$ticket.ticket_id})" value="确定购买" style="border-radius:5px;width:200px;height:40px;background: #ff6600;border: none;"> </div> <div style="clear:both;"></div> </div> </div> </div> </div> <!-- 电影选作 end --> </div> <!--电子票 详情 end--> <div class="blank5"></div> <!--帮助--> <div class="block"> <div class="box"> <div class="helpTitBg clearfix"> <!-- #BeginLibraryItem "/library/help.lbi" --><!-- #EndLibraryItem --> </div> </div> </div> <div class="blank"></div> <!--帮助--> <!--友情链接 start--> <!--{if $img_links or $txt_links }--> <div id="bottomNav" class="box"> <div class="box_1"> <div class="links clearfix"> <!--开始图片类型的友情链接{foreach from=$img_links item=link}--> <a href="{$link.url}" target="_blank" title="{$link.name}"><img src="{$link.logo}" alt="{$link.name}" border="0" /></a> <!--结束图片类型的友情链接{/foreach}--> <!-- {if $txt_links} --> <!--开始文字类型的友情链接{foreach from=$txt_links item=link}--> [<a href="{$link.url}" target="_blank" title="{$link.name}">{$link.name}</a>] <!--结束文字类型的友情链接{/foreach}--> <!-- {/if} --> </div> </div> </div> <!--{/if}--> <!--友情链接 end--> <div class="blank"></div> <!-- #BeginLibraryItem "/library/page_footer.lbi" --><!-- #EndLibraryItem --> {insert_scripts files='js/seat/jquery-1.8.3.min.js,seat/jquery.seat-charts.min.js'} <script type="text/javascript"> $(function() { window.__Object_toJSONString = Object.prototype.toJSONString; delete Object.prototype.toJSONString; }); </script> <script type="text/javascript"> var price = {$ticket.ticket_price}; //票价 // alert(price) $(document).ready(function() { var $cart = $('#selected-seats'); //座位区 $counter = $('#counter'); //票数 $total = $('#total'); //总计金额 var sc = $('#seat-map').seatCharts({ map: [ //座位图 'aaaaaaaaaa', 'aaaaaaaaaa', '__________', 'aaaaaaaa__', 'aaaaaaaaaa', 'aaaaaaaaaa', 'aaaaaaaaaa', 'aaaaaaaaaa', 'aaaaaaaaaa', 'aa__aa__aa' ], naming : { top : false, getLabel : function (character, row, column) { return column; } }, legend : { //定义图例 node : $('#legend'), items : [ [ 'a', 'available', '可选座' ], [ 'a', 'unavailable', '已售出'] ] }, click: function () { //点击事件 //seat_id = this.settings.id; if (this.status() == 'available') { //可选座 $('<li>'+(this.settings.row+1)+'排'+this.settings.label+'座</li>').attr('id', 'cart-item-'+this.settings.id).data('seatId', this.settings.id).appendTo($cart); $counter.text(sc.find('selected').length+1); // 总票数 $total.text(recalculateTotal(sc)); // 总价格 return 'selected'; } else if (this.status() == 'selected') { //已选中 //更新数量 $counter.text(sc.find('selected').length-1); //更新总计 $total.text(recalculateTotal(sc)-price-price); //删除已预订座位 $('#cart-item-'+this.settings.id).remove(); //可选座 return 'available'; } else if (this.status() == 'unavailable') { //已售出 return 'unavailable'; } else { return this.style(); } } }); //已售出的座位 sc.get({$ticket.unavailable}).status('unavailable'); }); //计算总金额 function recalculateTotal(sc) { var total = 0; sc.find('selected').each(function () { total += price; }); return total += price; } function checkout(goodsId, parentId) { var goods = new Object(); var spec_arr = $('#selected-seats').text(); // 座位 var fittings_arr = new Array(); var number = $('#counter').html(); // 所选票数 //var formBuy = document.forms['ECS_FORMBUY']; var quick = 0; //alert(spec_arr);return false; goods.quick = quick; goods.spec = spec_arr; goods.goods_id = goodsId; goods.number = number; goods.parent = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId); Ajax.call('flow.php?step=ticket', 'goods=' + JSON.stringify(goods), addToCartResponse, 'POST', 'JSON'); } /* * * 处理添加商品到购物车的反馈信息 */ function addToCartResponse(result) { if(result.error == 1) { alert(result.message); location.href = 'flow.php?step=login'; } else if(result.error == 2) { alert(result.message); } else if(result.error == 3) { alert(result.message); location.href = 'flow.php?step=ticket_done'; } else if(result.error == 4) { alert(result.message); } else if(result.error == 5) { alert(result.message); } console.log(result);return false; } </script> </body> </html>
3、找到seat插件,整体文件夹放到upload/js中;
生成订单upload\flow.php
把以下代码放到if ($_REQUEST[‘step‘] == ‘add_to_cart‘)前面
/* 购买电子票 * */ if ($_REQUEST['step'] == 'ticket') { include_once('includes/cls_json.php'); $json = new JSON; $_POST['goods'] = strip_tags(urldecode($_POST['goods'])); $_POST['goods'] = json_str_iconv($_POST['goods']); $goods = $json->decode($_POST['goods']); //print_r($goods);die; /* * 检查用户是否已经登录 * 如果用户已经登录了则检查是否有默认的收货地址 * 如果没有登录则跳转到登录和注册页面 */ if (empty($_SESSION['direct_shopping']) && $_SESSION['user_id'] == 0) { $result['error'] = 1; $result['message'] = "请先登录"; die($json->encode($result)); } /* 检查:商品数量是否合法 */ if (empty($goods->number)) { $result['error'] = 2; $result['message'] = '还没有选座'; echo $json->encode($result);die; } /* 检查:商品数量是否合法*/ /* if ($goods->number > 1) { $result['error'] = 5; $result['message'] = '系统正在升级,只能选一张票'; echo $json->encode($result);die; } */ $spec = explode(',', trim(str_replace('座', '座,', $goods->spec), ',')); // 座位转换成数组格式 // 随机生成票号 $string = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'; $uid = $_SESSION['user_id']; for($j = 0; $j < count($spec); $j++){ $str = ''; for ($i=0; $i < 10; $i++) { $str.= $string[rand(0,strlen($string)-1)]; } $data[] = $uid.$str; } /* 取得商品信息 */ $ticket_info = "SELECT * FROM " .$GLOBALS['ecs']->table('ticket'). " WHERE ticket_id = '".$goods->goods_id ."'"; $ticket = $GLOBALS['db']->getRow($ticket_info); //此处出现问题bug未解决 foreach($spec as $key => $val) { /* 初始化要插入购物车的基本件数据 */ $parent[] = array( 'user_id' => $_SESSION['user_id'], 'ticket_order' => $data[$key], 'ticket_id' => $goods->goods_id, 'film_name' => $ticket['film_name'], 'ticket_price' => $ticket['ticket_price'], 'seat' => $val ); } foreach($spec as $sp) // 查询其他人是否已购买 { $seat = "SELECT seat FROM " .$GLOBALS['ecs']->table('ticket_cart'). " WHERE seat = '".$sp."' AND ticket_id = '" . $goods->goods_id ."'"; $one = $GLOBALS['db']->getOne($seat); if($one) { $result['error'] = 4; $result['message'] = '座位已被预定'; } else { //购物车没有此物品,则插入 foreach($parent as $p) { $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('ticket_cart'), $p, 'INSERT'); $sql_select="select unavailable from ".$GLOBALS['ecs']->table('ticket')."where ticket_id='$p[ticket_id]'"; $str=$GLOBALS['db']->getOne($sql_select); //$seat接过来的值 如果数据库为空则添加数据 否则 就拼接原数据+,+新数据 if(empty($str)){ $seat=$p['seat']; }else{ $seat=$str.",".$p['seat']; } $sql_update="update".$GLOBALS['ecs']->table('ticket')."set unavailable='$seat' where ticket_id='$p[ticket_id]'"; $GLOBALS['db']->getAll($sql_update); $result['error'] = 3; $result['message'] = "购买成功"; } } } echo $json->encode($result);die; } elseif($_REQUEST['step'] == 'ticket_done') { $sql = " select * from ". $GLOBALS['ecs']->table('ticket_cart'). " where user_id = ".$_SESSION['user_id']; $carts = $GLOBALS['db']->getAll($sql); $smarty->assign('carts', $carts); $num = count($carts); // 总票数 $smarty->assign('num', $num); $price = ''; foreach ($carts as $key => $val) { $price += $val['ticket_price']; } $smarty->assign('total_price', $price); }
6、找到themes\default\flow.dwt(生成订单列表)
(搜索<!-- {if $step eq "login"} -->)把以下代码放到其前面
<!-- {if $step eq "ticket_done"} --> <div class="flowBox" style="margin:30px auto 70px auto;"> <h6 style="text-align:center; height:30px; line-height:30px;">{$lang.remember_order_number}:</h6> <table width="99%" align="center" cellpadding="20" cellspacing="0" bgcolor="#fff" style="border:1px solid #ddd; margin:20px auto;" > <tr> <td align="center" bgcolor="#FFFFFF">票号</td> <td align="center" bgcolor="#FFFFFF">电影名称</td> <td align="center" bgcolor="#FFFFFF">座位号</td> </tr> <!--{foreach from=$carts item=cart}--> <tr> <td align="center" bgcolor="#FFFFFF">{$cart.ticket_order}</td> <td align="center" bgcolor="#FFFFFF">{$cart.film_name}</td> <td align="center" bgcolor="#FFFFFF">{$cart.seat}</td> </tr> <!--{/foreach}--> </table> <table width="99%" align="center" cellpadding="20" cellspacing="0" bgcolor="#fff" style="border:1px solid #ddd; margin:20px auto;" > <tr> <td align="center" bgcolor="#FFFFFF">总票数:{$num}</td> <td align="center" bgcolor="#FFFFFF"></td> <td align="center" bgcolor="#FFFFFF">总金额:{$total_price} 元</td> </tr> </table> </div> <!-- {/if} -->
ok,一切完成。