張欣悅
摘要:通過對訂餐網(wǎng)站的需求分析,給出了網(wǎng)站系統(tǒng)功能結(jié)構(gòu)圖,明確了系統(tǒng)開發(fā)中要采用模塊化的設(shè)計(jì)思想。網(wǎng)站選用B/S工作模式,用PHP+Apache+MYSQL+Smarty+PDO來開發(fā)系統(tǒng)。該文主要介紹了數(shù)據(jù)庫的設(shè)計(jì)、公共配置文件的設(shè)計(jì)和購物車模塊的關(guān)鍵代碼。
關(guān)鍵詞:PHP;Smarty;模板
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)19-0058-02
隨著互聯(lián)網(wǎng)的發(fā)展,人們在日常生活中通過網(wǎng)絡(luò)購物已經(jīng)非常普及,小到服裝,大到汽車、房子都可以通過互聯(lián)網(wǎng)來便捷購買。隨著互聯(lián)網(wǎng)網(wǎng)速的不斷升級,“互聯(lián)網(wǎng)+” 深深扎根于旅行、住宿、電影等生活服務(wù)類行業(yè),一臺電腦、一部智能手機(jī)就能代勞所有事情。2016年3月17日,上海市浦東新區(qū)市場監(jiān)督管理局正式向盒馬外賣頒發(fā)全國第一張“專業(yè)網(wǎng)絡(luò)訂餐許可證”,這意味著網(wǎng)上外賣正式進(jìn)入“許可證”時(shí)代。網(wǎng)絡(luò)訂餐是一個(gè)全新的業(yè)態(tài),明確了它的餐飲服務(wù)經(jīng)營范圍只能在互聯(lián)網(wǎng)領(lǐng)域。
1 系統(tǒng)的功能分析
一個(gè)完整的網(wǎng)絡(luò)訂餐系統(tǒng),除了要能夠展示賣家提供的所有商品以外,還需要根據(jù)商家的需求,能重點(diǎn)展示商家推薦的商品、套餐、最新商品、最近開展的促銷活動(dòng)等功能;同時(shí)還要能夠滿足用戶分門別類的查詢各類商品、反饋意見給商家等個(gè)性化的需求。系統(tǒng)分為前臺頁面與后臺管理兩部分,前臺頁面主要是為點(diǎn)餐者 服務(wù),后臺主要為餐廳經(jīng)營者服務(wù)?;谝陨系恼{(diào)查分析,確立了本網(wǎng)站前臺所需要滿足的功能。網(wǎng)站前臺的整體功能結(jié)構(gòu)如圖 1所示:
2 系統(tǒng)設(shè)計(jì)
本系統(tǒng)采用 B/S 工作模式,選擇了PHP+Apache+MySQL來開發(fā)。以Windows7為開發(fā)平臺,以Apache為Web服務(wù)器,以MySQL為后臺數(shù)據(jù)庫。同時(shí)使用Smarty模板以及PDO數(shù)據(jù)庫連接層來搭建MVC結(jié)構(gòu)。系統(tǒng)界面使用 Dreamweaver 設(shè)計(jì),采用DIV+CSS進(jìn)行布局,讓網(wǎng)站的表現(xiàn)和結(jié)構(gòu)分離,使用這種方式能在團(tuán)隊(duì)開發(fā)中更容易分工合作而減少相互關(guān)聯(lián)性。
Smarty是一個(gè)用PHP寫出的模板引擎,它分離了邏輯代碼和外在的內(nèi)容,提供了一種易于管理和使用的方法,用來將原本與HTML代碼混雜在一起PHP代碼邏輯分離。,使程序員改變程序的邏輯內(nèi)容不會影響到美工的頁面設(shè)計(jì),美工重新修改頁面不會影響到程序的程序邏輯,這在多人合作的項(xiàng)目中顯得尤為重要。PDO是PHP5.1以上版本附帶的數(shù)據(jù)庫連接層,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,與mysql和mysqli的函數(shù)庫相比,PDO讓跨數(shù)據(jù)庫的使用更具有親和力;與ADODB和MDB2相比,PDO更高效。
2.1系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)
本網(wǎng)站根據(jù)需求,設(shè)計(jì)出能夠滿足用戶需求的各種實(shí)體以及他們之間的關(guān)系。其中,實(shí)體包括:用戶、商品、訂單等。通過對網(wǎng)上訂餐系統(tǒng)的內(nèi)容和數(shù)據(jù)流程分析,設(shè)計(jì)的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)如下:
用戶信息。包括的數(shù)據(jù)項(xiàng)有用戶姓名、用戶密碼、用戶手機(jī)號、用戶地址、訂購等。
商品信息。包括的數(shù)據(jù)項(xiàng)有商品名稱、商品編號、商品類型、商品價(jià)格、商品折扣、商品庫存、商品上架時(shí)間等。
留言信息。包括的數(shù)據(jù)項(xiàng)有用戶編號、留言標(biāo)題、留言內(nèi)容、留言時(shí)間等。
活動(dòng)信息。包括的數(shù)據(jù)項(xiàng)有活動(dòng)名稱、活動(dòng)時(shí)間、活動(dòng)內(nèi)容、活動(dòng)圖片等。
訂單信息。包括的數(shù)據(jù)項(xiàng)有用戶編號、商品數(shù)量、添加時(shí)間、商品價(jià)格等。
根據(jù)以上的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)項(xiàng)建立數(shù)據(jù)庫。
2.2 數(shù)據(jù)庫連接、管理類文件和Smarty模板配置類文件的設(shè)計(jì)
1)選擇安裝Smarty的目錄。從安全性考慮,可以將Smarty安裝在web程序文檔目錄以外的地方,再將Smarty安裝目錄地址包含在PHP.INI文件中的include_path選項(xiàng)即可。
同時(shí),在\system目錄下,創(chuàng)建templates、templates_c、configs、cache目錄,用來放置模板文件、緩存文件等相關(guān)文件。
2)在system目錄下,建立system.class.inc文件、system.inc文件和system.smarty.inc文件。其中system.smarty.inc.php 文件用來定義smarty模板類,指定各種文件的存儲位置;system.inc.php文件用來進(jìn)行數(shù)據(jù)庫連接、類的實(shí)例化;system.class.inc.php文件用來定義數(shù)據(jù)庫連接類和數(shù)據(jù)庫管理類。其中,system.inc.php的部分關(guān)鍵代碼如下:
require("./system/system.smarty.inc.php"); //包含Smarty配置類
require("./system/system.class.inc.php"); //包含數(shù)據(jù)庫連接和操作類
$connobj=new ConnDB("mysql","localhost","root","123456","db_xd");//數(shù)據(jù)庫連接類實(shí)例化
$conn=$connobj->GetConnId(); //執(zhí)行連接操作,返回連接標(biāo)識
$admindb=new AdminDB();//數(shù)據(jù)庫操作類實(shí)例化
$seppage=new SepPage();//分頁類實(shí)例化
$usefun=new UseFun();//使用常用函數(shù)類實(shí)例化
$smarty=new SmartyProject();//調(diào)用smarty模板
function unhtml($params){
extract($params);
$text=$content;
global $usefun;
return $usefun->UnHtml($text);
}
$smarty->register_function("unhtml","unhtml"); //注冊模板函數(shù)
?>
2.3 功能模塊的開發(fā)
程序核心代碼采用 PHP 開發(fā)完成。網(wǎng)站設(shè)定游客可以在網(wǎng)頁上瀏覽各種餐飲,如果需要訂餐則必須要注冊為網(wǎng)站用戶,只有登錄成功后才能進(jìn)行餐飲預(yù)訂和使用購物車的功能。
2.3.1會員注冊和登陸頁面設(shè)計(jì)
本網(wǎng)站整體采用清爽簡潔的設(shè)計(jì)風(fēng)格。根據(jù)訂餐網(wǎng)站的特點(diǎn),為了使網(wǎng)站易用,在用戶注冊時(shí),必填的信息較少,只需要填寫用戶名、密碼、手機(jī)號和地址信息。同時(shí),為了防止惡意注冊,在用戶注冊頁面使用了驗(yàn)證碼功能。通過PHP隨機(jī)函數(shù)產(chǎn)生一個(gè)4位的隨機(jī)數(shù),再通過DG函數(shù)庫,將數(shù)字驗(yàn)證碼轉(zhuǎn)換為圖片格式,然后使用函數(shù)創(chuàng)建一個(gè)背景圖片并增一些干擾元素,來防止驗(yàn)證碼被OCR軟件識別。
2.3.2商品展示頁面設(shè)計(jì)
根據(jù)用戶點(diǎn)餐的特點(diǎn)以及用戶查詢餐飲的習(xí)慣,網(wǎng)站將餐飲的展示分為最新產(chǎn)品、熱門產(chǎn)品、套餐和產(chǎn)品名錄幾個(gè)頁面。每個(gè)頁面根據(jù)主題展示相應(yīng)的餐飲,同時(shí),每種餐飲都有獨(dú)立的介紹頁面。在商品預(yù)訂時(shí),通過SESSION記錄用戶的登陸狀態(tài),如果用戶沒有登陸則需要登陸后才能進(jìn)行商品預(yù)訂。
2.3.3購物車設(shè)計(jì)
訂餐網(wǎng)站的購物車類似于其他電商網(wǎng)站的購物車功能,用于存放用戶選擇的餐飲,同時(shí)記錄用戶所選餐飲的數(shù)量、價(jià)格、總結(jié)等相關(guān)信息。當(dāng)用戶進(jìn)入購物車頁面后,可以對餐飲的數(shù)量進(jìn)行修改;也可以將所選的產(chǎn)品移除出購物車。在對餐飲的品種、數(shù)量、價(jià)格等信息進(jìn)行確認(rèn)后,即可提交訂單。購物車功能的部分關(guān)鍵代碼如下:
session_start();
$member=$_SESSION['member'];
if($member){
$smarty->assign('member',$member);
$scsql = "select * from shopping where username='".$member."' ";
$scarr = $admindb->ExecSQL($scsql,$conn);
if($scarr[0]['csell']==""){
echo "
";
echo "";
}
$n=0;
$s=0;
//print_r($scarr);
//$res=$scarr->fetchAll(PDO::FETCH_ASSOC);
for($i=0;$i $n=$n+$scarr[$i]['csell']; $s=$s+$scarr[$i]['csell']*$scarr[$i]['cprice']; } $smarty->assign('scarr',$scarr); $smarty->assign('n',$n); $smarty->assign('s',$s); $smarty->display("shopcar.tpl"); }else{ echo ""; } 3 結(jié)束語 本網(wǎng)站主要實(shí)現(xiàn)了餐飲的分類查詢,用戶可以在網(wǎng)站上根據(jù)個(gè)人的需求來選擇相應(yīng)的餐飲或者套餐;能將所選的餐飲加入購物車,并能在購物車中修改訂餐信息;用戶能將個(gè)人意見反饋給網(wǎng)站管理員等實(shí)用的功能。本網(wǎng)站是基于PHP+Smarty開發(fā)完成的,可移植性好,具有模塊化開發(fā),分合靈活的特點(diǎn)。后期可以靈活的添加訂單跟蹤、預(yù)約送餐時(shí)間等功能,來進(jìn)一步完善本網(wǎng)站。 參考文獻(xiàn): [1] 繆東東. 基于PHP 的高職院校學(xué)生考勤管理系統(tǒng)的研究[J]. 福建電腦,2013(10):127-129. [2] 陳書益,黃永慧.開源視頻服務(wù)器軟件MJPG-stream的應(yīng)用與研究[J].電子設(shè)計(jì)工程,2012,20(50):172-176. [3] 扎卡斯,姆克皮克.Ajax高級程序設(shè)計(jì)[M].徐鋒,譯.北京:人民郵電出版社,2008.