项目后台的最新认识和对MVC封装性、可维护性的更深刻认识!
這周的項目讓我認(rèn)識到只有通過大腦的思考才能將冗雜的代碼進(jìn)行封裝后變得更加簡潔,并且讓我們更簡單的去進(jìn)行后期維護(hù),這就是我所追求的方向,有自己的大腦有自己的封裝,有自己的更強大的可維護(hù)性!
下面是我對本次我獨自完成后臺的流程講解(附代碼!):
地址欄輸入?admin.php?MVC?獲取APP_NAME==admin/?進(jìn)入adminController調(diào)用adminAction;
$this?->smarty?->display('logon.tpl');經(jīng)過調(diào)用smarty?display方法?顯示登陸界面;
?<form?method="post"?id="login_form"?action="admin.php?c=admin&a=validate"?onSubmit="return?chkinput(this)">表單提交指向參數(shù)?admin的validateAction驗證登陸<input?type="hidden"?name="action"?value="login"?/>創(chuàng)建隱藏域,用于驗證是否非法操作;
驗證函數(shù)接收用戶名密碼?并調(diào)用adminModel模型進(jìn)行接收返回值進(jìn)行驗證,驗證失敗返回圓截面,驗證成功后?header("location:admin.php?c=admin&a=show");
調(diào)用showAction利用隱藏域傳的action值判斷是否非法操作?,合法操作后調(diào)用smarti給adminname賦值并調(diào)用display顯示admin.tpl進(jìn)入管理界面;
模板自動加載<body??οnlοad="viewpage(1,'管理菜品')">
function?viewpage(page,val){
????if(val=='管理菜品'){
????document.getElementById('tables').innerHTML='</br><th>ID</th><th>菜名</th><th>價格</th><th>介紹</th><th>剩余數(shù)量</th><th>操作</th>';
var?url?='admin.php?c=admin&a=menuProcess&b=caipin';
}else?if(val=='管理訂單'){
???document.getElementById('tables').innerHTML='</br><th>ID</th><th>菜名</th><th>數(shù)量</th><th>單價</th><th>購買用戶</th><th>總價</th><th>是否發(fā)貨</th><th>操作</th>';
var?url?='admin.php?c=admin&a=menuProcess&b=dingdan';
}else?if(val=='管理用戶'){
???document.getElementById('tables').innerHTML='</br><th>ID</th><th>用戶名</th><th>密碼</th><th>郵箱</th><th>是否凍結(jié)</th><th>操作</th>';
var?url?='admin.php?c=admin&a=menuProcess&b=yonghu';
}
else?if(val=='管理留言'){
???document.getElementById('tables').innerHTML='</br><th>ID</th><th>留言內(nèi)容</th><th>操作</th>';
var?url?='admin.php?c=admin&a=menuProcess&b=liuyan';
}
?????var?xhr;
if(window.ActiveXObject){
??????????????????xhr?=?new?ActiveXObject('Microsoft.XMLHTTP');
?????????}else?if(window.XMLHttpRequest){
??????????????????xhr?=new?XMLHttpRequest();
?????????}
???xhr.open('POST',url,true);
???xhr.onreadystatechange?=?callback;
???????xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
???xhr.send('page='+page+'&val='+val);
???function?callback(){
???????if(xhr.readyState==4){
???????if(xhr.status==200){
??????//alert('heihei');
??????var?json?=?eval('('+xhr.responseText+')');
??var?result?=?eval('('+json[1]+')');
??document.getElementById('item').innerHTML?=?json[0];
??var?jsonText?=?JSON.stringify(result[0]);
??var?num=0;
??for(var?i=0;i<jsonText.length;i++){
????if(jsonText[i]==":"){
??num++;
}?
??}
?var?tdnum=num/2;
?document.getElementById('h4').innerHTML='????'+val;
?for(var?i=0;i<result.length;i++){
????var?tradd?=?document.createElement('tr');
?????var?trs?=?document.createElement('tr');
?var?len?=?result;
?????for(var?j=0;j<tdnum;j++){
????var?tdadd?=?document.createElement('td')
var?tds?=?document.createElement('td');
tds.align='center';
tds.innerHTML?=?result[i][j];
var?tdid?=?result[i].id;
var?trsid?=trs.id?=?"tr"+tdid;
var?tdsid?=tds.id?=?trsid+"td"+j;
?var?add?=?"'add'";
?var?update?=?"'update'";
?var?delet?=?"'delet'";
?var?fahuo?=?"'fahuo'";
?var?freeze?=?"'freeze'";
?var?unfreeze?=?"'unfreeze'";
?var?shan?=?"'shan'";
var?tdcao?=?document.createElement('td');
if(val=='管理菜品'){
???tdcao.innerHTML?=?'<span?style="?font-weight:bold;?background-color:#228b22;border:1px?solid;"?class="answer"?οnmοuseοver="point(this)"?onClick="menu('+add+','+tdid+')">添加</span><span?style="?font-weight:bold;?background-color:#0072bb;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+update+','+tdid+')">修改</span><span?style="?font-weight:bold;?background-color:#cd4900;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+delet+','+tdid+')">刪除</span>';
}else?if(val=='管理訂單'){
???if(result[i].fahuo=='y'){tdcao.innerHTML?=?'<span?style="?font-color:red;?background-color:#cccccc;border:1px?solid;"???class="answer"?)">已發(fā)貨</span>';}else{
???tdcao.innerHTML?=?'<span?id="fahuo"?style="?font-weight:bold;?background-color:#0072bb;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+fahuo+','+tdid+')">發(fā)貨</span>';}
}else?if(val=='管理用戶'){
???if(result[i].freez=='y'){tdcao.innerHTML?=?'<span?style="?font-weight:bold;?background-color:#cd4900;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+unfreeze+','+tdid+')">解凍</span>';}else{
???tdcao.innerHTML?=?'<span??style="?font-weight:bold;?background-color:#0072bb;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+freeze+','+tdid+')">凍結(jié)</span>';}
}else?if(val=='管理留言'){
???tdcao.innerHTML?=?'<span?style="?font-weight:bold;?background-color:#cd4900;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+shan+','+tdid+')">刪除</span>';
}
document.getElementById('tables').appendChild(tradd);
document.getElementById('tables').appendChild(trs);
????trs.appendChild(tds);
tradd.appendChild(tdadd);
}
???trs.appendChild(tdcao);
??}
???}
???}
???}
?????}
調(diào)用ajax返回分頁值提交頁面為?public?function?menuProcessAction(){
?????if($_SESSION['action']=='login'){
?????????$menu?=?$_REQUEST['b'];
?????????$val?=?"'".$_REQUEST['val']."'";
?????$page=$_REQUEST['page'];
?$adminModel?=?new?adminModel('localhost','root','root','dingcan');
?$pagesize?=8;
?$talfun?=?$menu.'Total';
?$pagefun?=?$menu.'Page';
?if($menu=='caipin'){
????$dbtable?=?'caipu';
?}else?if($menu=='dingdan'){
????$dbtable?=?'dingdan';
?}else?if($menu=='yonghu'){
????$dbtable?=?'user';
?}else?if($menu=='liuyan'){
????$dbtable?=?'liuyan';
?}
?$total_rows?=?$adminModel?->Total($dbtable);
?$pages?=?ceil($total_rows/$pagesize);
?$offset?=?$pagesize*($page-1);
?$first?=?1;
?$prev?=?$page-1;
?if($page==1){
????$prev=$page;
?}else{
????$prev?=$page-1;
?}
?$next?=$page+1;
?if($next<$pages){
????$next?=$page+1;
?}else{
????$next=$pages;
?}
?????$last?=??$pages;
?
?$str?=?'</br></br><span><FONT?color="red">第'.?$page.'頁/總'.$pages.'頁?|?總'.$total_rows.'條</FONT></span><span??οnmοuseοver="point(this)"?οnclick="viewpage('.$first.','.$val.')">首頁</span>?
<span??οnmοuseοver="point(this)"?οnclick="viewpage('.$prev.','.$val.')">上頁</span>
<span??οnmοuseοver="point(this)"?οnclick="viewpage('.$next.','.$val.')">下頁</span>
<span?οnmοuseοver="point(this)"??οnclick="viewpage('.$last.','.$val.')">尾頁</span>';
?$pageInfo?=?$adminModel?->Page($dbtable,$offset,$pagesize);
?$return?=array();
?$return[0]?=?$str;
?$return[1]?=??json_encode($pageInfo);
?echo?json_encode($return);
????}else{
???echo?"非法操作!<script>alert('非法操作,請登錄!');location.assign('admin.php')
;</script>";
}
?}
}<?php
class?adminModel?extends?baseModel{
public?function?validateAdmin($name){
?????$sql=mysql_query("select?*?from?admin?where?name='".$name."'");
?????????$info=mysql_fetch_array($sql);
?return?$info;
}
public?function?Total($dbtable){
$sql?=?"select?count(*)?as?total??from?".$dbtable;
$res?=?mysql_query($sql);
$rows?=?mysql_fetch_assoc($res);
$nums?=?$rows['total'];
return?$nums;
}
public?function?Page($dbtable,$offset,$pagesize){
?????$sql?=?"select?*?from?".$dbtable."?limit?$offset,$pagesize";
?$result?=?mysql_query($sql);
?$rows?=?array();
?while($row?=?mysql_fetch_array($result)){
$rows[]?=?$row;
?}
?return?$rows;
}
}
var?url?='admin.php?c=admin&a=menuProcess&b=caipin';
通過js效果和四重的傳遞b參數(shù)判斷進(jìn)行指定的分頁處理!將四個分頁界面合起來,減少代碼冗余量,全后臺只有一次ajax代碼?只有一次分頁處理
if(val=='管理菜品'){
???tdcao.innerHTML?=?'<span?style="?font-weight:bold;?background-color:#228b22;border:1px?solid;"?class="answer"?οnmοuseοver="point(this)"?onClick="menu('+add+','+tdid+')">添加</span><span?style="?font-weight:bold;?background-color:#0072bb;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+update+','+tdid+')">修改</span><span?style="?font-weight:bold;?background-color:#cd4900;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+delet+','+tdid+')">刪除</span>';
}else?if(val=='管理訂單'){
???if(result[i].fahuo=='y'){tdcao.innerHTML?=?'<span?style="?font-color:red;?background-color:#cccccc;border:1px?solid;"???class="answer"?)">已發(fā)貨</span>';}else{
???tdcao.innerHTML?=?'<span?id="fahuo"?style="?font-weight:bold;?background-color:#0072bb;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+fahuo+','+tdid+')">發(fā)貨</span>';}
}else?if(val=='管理用戶'){
???if(result[i].freez=='y'){tdcao.innerHTML?=?'<span?style="?font-weight:bold;?background-color:#cd4900;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+unfreeze+','+tdid+')">解凍</span>';}else{
???tdcao.innerHTML?=?'<span??style="?font-weight:bold;?background-color:#0072bb;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+freeze+','+tdid+')">凍結(jié)</span>';}
}else?if(val=='管理留言'){
???tdcao.innerHTML?=?'<span?style="?font-weight:bold;?background-color:#cd4900;border:1px?solid;"???class="answer"?οnmοuseοver="point(this)"?onClick="menu('+shan+','+tdid+')">刪除</span>';
}
通過給“操作”的《td》賦值來進(jìn)行調(diào)用各項列表的不同操作,并在操作span里加入onclick并傳遞不同參數(shù),使其向同一個menuController傳遞不同的處理參數(shù)進(jìn)行相應(yīng)的增刪改查操作并間數(shù)據(jù)返回到當(dāng)前界面實行無刷新數(shù)據(jù)顯示!
?function?menu(val,tdid){
????if(val=='add'){
?????document.getElementById('formac').action="admin.php?c=menu&a=addMenu";
?????document.getElementById('tables').innerHTML='<tr?><td><span>菜名:</span></td><td><input?type="text"?name="menuname"></td><td>價格:</td><td><input?type="text"?name="menuprice"></td></tr><tr>?</tr><tr><td>介紹:</td><td><input?type="text"?name="menudescrib"></td><td>數(shù)量:</td><td><input?type="text"?name="menunumber"></td></tr><tr></tr><tr></tr><tr?align="center"><td></td><td></td><td></td><td?align="right"><input?type="reset"??style="height:22px;?width:55px;?font-weight:bold;?color:#CCCCCC;background-color:#228b22;border:1px?solid;"?class="answer"?"?value="重置">??<input?type="submit"?style="height:22px;?width:55px;?font-weight:bold;?background-color:#228b22;color:#CCCCCC;border:1px?solid;"?class="answer"?value="添加"></td></tr>';
?document.getElementById('item').innerHTML?=?'';
}else?if(val=='update'){
??????var?menuname?=?document.getElementById('tr'+tdid+'td1').innerHTML;
??var?menuprice?=?document.getElementById('tr'+tdid+'td2').innerHTML;
??var?menudescrib?=?document.getElementById('tr'+tdid+'td3').innerHTML;
??var?menunumber?=?document.getElementById('tr'+tdid+'td4').innerHTML;
??document.getElementById('formac').action="admin.php?c=menu&a=updateMenu&id="+tdid;
??????document.getElementById('tables').innerHTML='<tr?><td><span>菜名:</span></td><td><input?type="text"?name="menuname"?value="'+menuname+'"></td><td>價格:</td><td><input?type="text"?name="menuprice"?value="'+menuprice+'"></td></tr><tr>?</tr><tr><td>介紹:</td><td><input?type="text"?name="menudescrib"?value="'+menudescrib+'"></td><td>數(shù)量:</td><td><input?type="text"?name="menunumber"?value="'+menunumber+'"></td></tr><tr></tr><tr></tr><tr?align="center"><td></td><td></td><td></td><td?align="right"><input?type="reset"??style="height:22px;?width:55px;?font-weight:bold;?color:#CCCCCC;background-color:#228b22;border:1px?solid;"?class="answer"?"?value="重置">??<input?type="submit"?style="height:22px;?width:55px;?font-weight:bold;?background-color:#228b22;color:#CCCCCC;border:1px?solid;"?class="answer"?value="修改"></td></tr>';
??document.getElementById('item').innerHTML?=?'';
}else?if(val=='delet'){
??document.getElementById('formac').action="admin.php?c=menu&a=deletMenu&id="+tdid;
??????document.getElementById('tables').innerHTML='<tr?align="center"><td?align="left"><input?type="submit"?style="height:33px;?width:77px;?font-weight:bold;?background-color:#228b22;color:#CCCCCC;border:1px?solid;"?class="answer"?value="確認(rèn)刪除"></td><td?align="center"><input?type="button"?οnclick="back()"??style="height:33px;?width:77px;?font-weight:bold;?color:#CCCCCC;background-color:#228b22;border:1px?solid;"?class="answer"?"?value="取消"></td></tr>';
??document.getElementById('item').innerHTML?=?'';
}else?if(val=='fahuo'){
??document.getElementById('formac').action="admin.php?c=menu&a=fahuoMenu&id="+tdid;
??????document.getElementById('tables').innerHTML='<tr?align="center"><td?align="left"><input?type="submit"?style="height:33px;?width:77px;?font-weight:bold;?background-color:#228b22;color:#CCCCCC;border:1px?solid;"?class="answer"?value="確認(rèn)發(fā)貨"></td><td?align="center"><input?type="button"?οnclick="back()"??style="height:33px;?width:77px;?font-weight:bold;?color:#CCCCCC;background-color:#228b22;border:1px?solid;"?class="answer"?"?value="取消"></td></tr>';
??document.getElementById('item').innerHTML?=?'';
}else?if(val=='freeze'){
??document.getElementById('formac').action="admin.php?c=menu&a=freezeMenu&id="+tdid;
??????document.getElementById('tables').innerHTML='<tr?align="center"><td?align="left"><input?type="submit"?style="height:33px;?width:77px;?font-weight:bold;?background-color:#228b22;color:#CCCCCC;border:1px?solid;"?class="answer"?value="確認(rèn)凍結(jié)"></td><td?align="center"><input?type="button"?οnclick="back()"??style="height:33px;?width:77px;?font-weight:bold;?color:#CCCCCC;background-color:#228b22;border:1px?solid;"?class="answer"?"?value="取消"></td></tr>';
??document.getElementById('item').innerHTML?=?'';
}else?if(val=='unfreeze'){
??document.getElementById('formac').action="admin.php?c=menu&a=unfreezeMenu&id="+tdid;
??????document.getElementById('tables').innerHTML='<tr?align="center"><td?align="left"><input?type="submit"?style="height:33px;?width:77px;?font-weight:bold;?background-color:#228b22;color:#CCCCCC;border:1px?solid;"?class="answer"?value="確認(rèn)凍結(jié)"></td><td?align="center"><input?type="button"?οnclick="back()"??style="height:33px;?width:77px;?font-weight:bold;?color:#CCCCCC;background-color:#228b22;border:1px?solid;"?class="answer"?"?value="取消"></td></tr>';
??document.getElementById('item').innerHTML?=?'';
}else?if(val=='shan'){
??document.getElementById('formac').action="admin.php?c=menu&a=shanMenu&id="+tdid;
??????document.getElementById('tables').innerHTML='<tr?align="center"><td?align="left"><input?type="submit"?style="height:33px;?width:77px;?font-weight:bold;?background-color:#228b22;color:#CCCCCC;border:1px?solid;"?class="answer"?value="確認(rèn)刪除"></td><td?align="center"><input?type="button"?οnclick="back()"??style="height:33px;?width:77px;?font-weight:bold;?color:#CCCCCC;background-color:#228b22;border:1px?solid;"?class="answer"?"?value="取消"></td></tr>';
??document.getElementById('item').innerHTML?=?'';
}
?}
Menu函數(shù)?通過修改form的action值來成功的達(dá)到向不同界面發(fā)送信息數(shù)據(jù)的效果,并且在form表單中?穿件一個隱藏域<input?type="hidden"?name="action"?value="process"?/>
在?menuController中每個函數(shù)都要先判斷?action的值來認(rèn)定是否為合法操作,非法操作即返回原界面,合法操作即可調(diào)用相應(yīng)的model進(jìn)行增刪改查操作!在controller接收返回值后返回操作界面!
???-------------over
轉(zhuǎn)載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/02/2995366.html
總結(jié)
以上是生活随笔為你收集整理的项目后台的最新认识和对MVC封装性、可维护性的更深刻认识!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 六、九大隐式对象(JSP的9大内置对象)
- 下一篇: C/C++/动态链接库DLL中函数的调用