您的位置:首页 > 运维架构

项目后台的最新认识和对MVC封装性、可维护性的更深刻认识!

2013-04-02 13:57 260 查看
这周的项目让我认识到只有通过大脑的思考才能将冗杂的代码进行封装后变得更加简洁,并且让我们更简单的去进行后期维护,这就是我所追求的方向,有自己的大脑有自己的封装,有自己的更强大的可维护性!

下面是我对本次我独自完成后台的流程讲解(附代码!):

地址栏输入 admin.php MVC 获取APP_NAME==admin/ 进入adminController调用adminAction;

$this ->smarty ->display('logon.tpl');经过调用smarty display方法 显示登陆界面;

<form method="post" id="login_form" action="admin.php?c=admin&a=validate" onSubmit="return chkinput(this)">表单提交指向参数 admin的validateAction验证登陆<input type="hidden" name="action" value="login" />创建隐藏域,用于验证是否非法操作;

验证函数接收用户名密码 并调用adminModel模型进行接收返回值进行验证,验证失败返回圆截面,验证成功后 header("location:admin.php?c=admin&a=show");

调用showAction利用隐藏域传的action值判断是否非法操作 ,合法操作后调用smarti给adminname赋值并调用display显示admin.tpl进入管理界面;

模板自动加载<body onload="viewpage(1,'管理菜品')">

function viewpage(page,val){

if(val=='管理菜品'){

document.getElementById('tables').innerHTML='</br><th>ID</th><th>菜名</th><th>价格</th><th>介绍</th><th>剩余数量</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>数量</th><th>单价</th><th>购买用户</th><th>总价</th><th>是否发货</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>是否冻结</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>留言内容</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" onmouseover="point(this)" onClick="menu('+add+','+tdid+')">添加</span><span style=" font-weight:bold; background-color:#0072bb;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+update+','+tdid+')">修改</span><span style=" font-weight:bold; background-color:#cd4900;border:1px solid;" class="answer" onmouseover="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" )">已发货</span>';}else{

tdcao.innerHTML = '<span id="fahuo" style=" font-weight:bold; background-color:#0072bb;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+fahuo+','+tdid+')">发货</span>';}

}else if(val=='管理用户'){

if(result[i].freez=='y'){tdcao.innerHTML = '<span style=" font-weight:bold; background-color:#cd4900;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+unfreeze+','+tdid+')">解冻</span>';}else{

tdcao.innerHTML = '<span style=" font-weight:bold; background-color:#0072bb;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+freeze+','+tdid+')">冻结</span>';}

}else if(val=='管理留言'){

tdcao.innerHTML = '<span style=" font-weight:bold; background-color:#cd4900;border:1px solid;" class="answer" onmouseover="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);

}

}

}

}

}

调用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 onmouseover="point(this)" onclick="viewpage('.$first.','.$val.')">首页</span>

<span onmouseover="point(this)" onclick="viewpage('.$prev.','.$val.')">上页</span>

<span onmouseover="point(this)" onclick="viewpage('.$next.','.$val.')">下页</span>

<span onmouseover="point(this)" onclick="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参数判断进行指定的分页处理!将四个分页界面合起来,减少代码冗余量,全后台只有一次ajax代码 只有一次分页处理

if(val=='管理菜品'){

tdcao.innerHTML = '<span style=" font-weight:bold; background-color:#228b22;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+add+','+tdid+')">添加</span><span style=" font-weight:bold; background-color:#0072bb;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+update+','+tdid+')">修改</span><span style=" font-weight:bold; background-color:#cd4900;border:1px solid;" class="answer" onmouseover="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" )">已发货</span>';}else{

tdcao.innerHTML = '<span id="fahuo" style=" font-weight:bold; background-color:#0072bb;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+fahuo+','+tdid+')">发货</span>';}

}else if(val=='管理用户'){

if(result[i].freez=='y'){tdcao.innerHTML = '<span style=" font-weight:bold; background-color:#cd4900;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+unfreeze+','+tdid+')">解冻</span>';}else{

tdcao.innerHTML = '<span style=" font-weight:bold; background-color:#0072bb;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+freeze+','+tdid+')">冻结</span>';}

}else if(val=='管理留言'){

tdcao.innerHTML = '<span style=" font-weight:bold; background-color:#cd4900;border:1px solid;" class="answer" onmouseover="point(this)" onClick="menu('+shan+','+tdid+')">删除</span>';

}

通过给“操作”的《td》赋值来进行调用各项列表的不同操作,并在操作span里加入onclick并传递不同参数,使其向同一个menuController传递不同的处理参数进行相应的增删改查操作并间数据返回到当前界面实行无刷新数据显示!

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>数量:</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>数量:</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="确认删除"></td><td align="center"><input type="button" onclick="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="确认发货"></td><td align="center"><input type="button" onclick="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="确认冻结"></td><td align="center"><input type="button" onclick="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="确认冻结"></td><td align="center"><input type="button" onclick="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="确认删除"></td><td align="center"><input type="button" onclick="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函数 通过修改form的action值来成功的达到向不同界面发送信息数据的效果,并且在form表单中 穿件一个隐藏域<input type="hidden" name="action" value="process" />

在 menuController中每个函数都要先判断 action的值来认定是否为合法操作,非法操作即返回原界面,合法操作即可调用相应的model进行增删改查操作!在controller接收返回值后返回操作界面!

-------------over
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐