网络编程
位置:首页>> 网络编程>> Asp编程>> Quickwork For Asp -实战之后台管理

Quickwork For Asp -实战之后台管理

作者:thinkothers 来源:经典论坛 发布时间:2009-12-31 19:13:00 

标签:asp,后台,模块化,框架

最近开始在项目中使用Quickwork For Asp,虽然该框架是自己独立完成的,不过功能没做过详细的总结,所以很多参数总是会弄错,毕竟鱼跟熊掌不可兼得,功能的灵活必然需要记忆更多的函数或参数,不过总的来说还算是顺利,该框架在实际应该中暂时还没有大的问题,体会就是大大优化了代码结构,代码重用性也得到很大的提高,最大程度的HTML与程序分离。

下面给出对于一个表的添、改、删、查操作的相关文件代码.本例旨在了解框架的结构流程,因此代码中未做详细注释,如果你还不熟悉Quickwork For Asp,可以去官方博客了解一下,http://www.anyyes.cn/quick/


附上页面截图:



mod文件-mod_admin_mods.asp

<%
'模块名 admin_mods
'功能   设置管理员菜单及模块集
class admin_mods
'public 模板内调用
    public title,info
    private db,arr
    
    private sub class_initialize()
        set db = new cls_db
        title = "模板管理"
        info  = "除非您十分熟悉模块的作用,否则请不要随意更改."
    end sub
    
    private sub class_terminate()
        set db = nothing
    end sub
    
'private 本类内调用
    private function str_select(slt)
        dim db : set db = new cls_db
        str_select = db.findall("select id,cname from [] where parentid=0 order by orders asc@[select=,"&slt&"]")
        set db = nothing
    end function
    
'默认模块,显示列表信息
    function default()
    
        arr = array("id:list","sql:select id,cname,ename,parentid,ishidn,orders from [] order by orders asc","msg:暂无数据","page")
        
        default = array("admin_admin_mods.html","[loop]",arr)
        
    end function
    
'显示添加表单
    function add_form()
    
        add_form = array("admin_admin_mods_form.html","ishidn","0","orders","0","select",str_select(""))
        
    end function
    
'执行添加表单提交后添加操作
    function add()
    
        arr = array("[]","cname|null","ename|null","parentid|int","ishidn|int","orders","adddate")
        
        if db.add(arr) then call top_alert("已添加",let_(","))
        
    end function
    
'显示编辑表单,与添加表单共用同一个模板
    function up_form()
    
        if not isnum(get_("id")) then call top_back("参数错误")
        
        arr = db.find("id,cname,ename,parentid,ishidn,orders;"&get_("id")&"")
        up_form = array(_
            "admin_admin_mods_form.html",_
            "select",str_select(arr(3)),_
            "id",arr(0),_
            "cname",arr(1),_
            "ename",arr(2),_
            "parentid",arr(3),_
            "ishidn",arr(4),_
            "orders",arr(5)_
        )
        
    end function
'执行修改表单提交后修改操作
    function update()
    
        if not isnum(f("id")) then call top_back("参数错误")
        
        arr = array("[]",f("id"),"cname|null","ename|null","parentid|int","ishidn|int","orders")
        
        if db.update(arr) then call top_alert("已修改",let_(","))
        
    end function
    
'执行删除操作
    function del()
    
        if isn(get_("id")) then call top_back("参数错误")
        
        db.del(get_("id")) : call top_alert("已删除",let_(","))
        
    end function
end class
%>

模板文件-添加和修改的表单-admin_admin_mods_form.html

<h1>{.title} <span>{.info}</span></h1>
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="list">
    <form action="{!form_auto_action}" method="post" >
    <tr class="info">
        <td colspan="2">{!btn_back}</td>
    </tr>
    <tr class="title"><td colspan="2" style="background-image:none" class="green">请参照表单右侧提示填写,带 * 号内容为必填项</td></tr>
    <tr>
        <td width="90" align="right">模块名称</td>
        <td>{!f_input_auto("cname")} <span>* 模块中文名称,即菜单名</span></td>
    </tr>
    <tr>
        <td align="right">英文名</td>
        <td>{!f_input_auto("ename")} <span>* 模板英文名称,即mod名</span></td>
    </tr>
    <tr>
        <td align="right">选择父模块</td>
        <td><select name="parentid" style="width:223px"><option value="0">父模块</option>{$select}</select> <span>* 如为父模块,请选择"父模块"</span></td>
    </tr>
    <tr>
        <td align="right">排序</td>
        <td>{!f_input_auto("orders")} <span>* 必须为整数;父子模块全局排序,请慎重填写;数字越小越靠前</span></td>
    </tr>
    <tr>
        <td align="right">是否隐藏</td>
        <td>{!form_select_is("ishidn","是|否",{$ishidn})} <span>             * 技术人员专用选项,选择隐藏后该模块不会显示在菜单列表中,一般情况请选择否</span></td>
    </tr>
    <tr class="info">
        <td>{!f_hidden_id}{!btn_back}</td><td>{!btn_submit}{!btn_reset}</td>
    </tr>
    </form>
</table>

模板文件-列表页-admin_admin_mods.html

<h1>{.title} <span>{.info}</span></h1>
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="list">
    <tr class="info">
        <td colspan="6">{!btn_add}{!btn_del_select}</td>
    </tr>
    <tr class="title">
        <td width="10">{!btn_select_all}</td>
        <td width="70">操作</td>
        <td width="25%">模块名称</td>
        <td width="25%">英文名</td>
        <td width="15%">是否隐藏</td>
        <td style="background-image:none">排序</td>
    </tr>
    {loop id="list"}
    <tr>
        <td><input type="checkbox" name="select_id" value="[0]" /></td>
        <td>{bar_auto_action([0])}</td>
        <td>{iff([3] = 0,[1],"----" & [1])}</td>
        <td>[2]</td>
        <td>{iff([4]=0,"否","是")}</td>
        <td>[5]</td>
    </tr>
    {/loop}
    <tr class="page">
        <td colspan="6">{$page}</td>
    </tr>
    <tr class="info">
        <td colspan="6">{!btn_add}{!btn_del_select}</td>
    </tr>
</table>

部分全局性质的函数,因为后台管理中很多页面都需要用到删除已选,提交,重置、修改、删除等按钮而且是一成不变的,所以将他们做成了函数,以方便日后管理。

function form_auto_action()
    dim tmp
    tmp = iff(action_ = "add_form","add","update")
    form_auto_action = "index.asp" & let_(","&tmp)
end function
function form_select_is(name,str,chd)
    dim arr(1,1)
    arr(0,0) = 1
    arr(1,0) = split(str,"|")(0)
    arr(0,1) = 0
    arr(1,1) = split(str,"|")(1)
    form_select_is = f_radio(name,arr,chd)
end function
function btn_add()
    btn_add = "<input value=""&raquo;&nbsp;新建"" onclick=""location.href='" & let_(",add_form") & "'"" class=""btn"" type=""button"" />"
end function
function btn_del_select()
    btn_del_select = "<input value=""× 删除已选"" link=""" & let_(",del,id=") & """ name=""btn_del_select"" class=""btn"" type=""button"" />"
end function
function btn_select_all()
    btn_select_all = "<input type=""checkbox"" id=""select_all"" value=""1"" title=""选中/取消选中"" />"
end function
function btn_back()
    btn_back = "<input value=""&laquo;&nbsp;返回"" onclick=""history.back()"" class=""btn"" type=""button"" />"
end function
function btn_submit()
    btn_submit = "<input value=""&raquo;&nbsp;确  定"" class=""btn"" type=""submit"" />"
end function
function btn_reset()
    btn_reset = "<input value=""&laquo;&nbsp;重设"" class=""btn"" type=""reset"" />"
end function
function bar_auto_action(id)
    bar_auto_action = "<a href=""" & let_(",up_form,id=" & id) & """ title=""修改""><img src=""images/a_up.gif"" border=""0"" onmouseover=""this.src='images/a_up_on.gif'"" onmouseout=""this.src='images/a_up.gif'"" /></a> <a href=""" & let_(",del,id=" & id) & """ name=""a_del""  title=""删除""><img src=""images/a_del.gif"" onmouseover=""this.src='images/a_del_on.gif'"" onmouseout=""this.src='images/a_del.gif'"" border=""0"" /></a>"
end function
function f_hidden_id()
    f_hidden_id = "<input type=""hidden"" name=""id"" value=""" & get_("id") & """ />"
end function
function f_input_auto(name)
    f_input_auto = "<input name="""&name&""" type=""text"" class=""text"" size=""40"" value=""{$"&name&"}"" />"
end function
function top_back(s)
    die(top_show_msg & "<script>show_msg('"&s&"','back')</script>")
end function
function top_alert(s,url)
    die(top_show_msg & "<script>show_msg('"&s&"','"&url&"')</script>")
end function
function top_show_msg()
    top_show_msg = "<script>function show_msg(str,url) {f = window.parent.window[0].document.getElementById('msginfo');f.style.display = 'block';f.innerHTML = str;if (url == 'back') {history.back();} else if (url == 'reload') {window.location.reload();} else {location.href = url}}</script>"
end function

模板引擎中有三种标签形式
{$abc}指定的替换标签
{!abc}全局性质的变量,如const、或者函数库中的函数等
{.abc}本模块类中的public 成员或函数,如例中{.title}即为mod文件中的public title

0
投稿

猜你喜欢

  • 可能接触网站与编程设计的人都知道,一个属性值需要引号包括起来,但是有的时候就是因为没有正确设定引号类型,导致程序出错,就连我自己也是这样,我
  • 对于outerHTML这个DOM属性,在IE/Opera/google Chorme等浏览器中都是可以使用的,但唯独Firefox是不支持的
  • 在过去的两年里,你能想象的一些很烂的应用设计也入驻了优雅的iPhone。通过它周边的宣传,使得世界各地的设计者们都利用这个新的移动工具来一展
  •  '-----------------------------------------------------------
  • 我其实是同一天看到Robert Treat几人整理的”Mysql 迁移到Oracle前需要了解的50件事“与Baron Schwartz的”
  • 一般来说,我们判断 iframe 是否加载完成其实与 判断 JavaScript 文件是否加载完成 采用的方法很类似:var&nb
  • W3C终于发布了第一个HTML5草案,大家还沉溺在HTML2XHTML转换的快乐和痛苦中时,却又突然发现,HTML5和XHTML2,到底谁是
  •     不知道算不算DW4的大BUG. DW4实际的运行如下: 读注册表中HKEY_CURRENT_USER/
  • 可以,具体说明和代码见下: <%@ Language=VBScript %><%Option
  • 为什么我写ASP分页教程要提到AJAX呢,因为我们要多练习一下编程过程中,结构化的重要性. 再加上很多朋友对分页感到很高深,所以一直都不敢去
  • 很多开发人员对于IIS和ASP.NET的安装等问题困扰,特此做下面的小总结,请大家多交流!iis 坏了修复办法!一般IIS运行不了ASP.N
  • 设计页面时,经常会从一个页面打开一个子窗口以供浏览者查看。通常,这种子窗口中的内容一经浏览者看过,对于浏览者而言就不再需要,而他们常常会忘记
  • 假如您在安装SQL Server 2005时出现计数器错误,在搜索过所有的方法都不适用的情况下可以采用以下方法:将4个计数器删除:(如果没有
  • asp+access用户登录代码,loginnew.asp网面包含了登录框及验证用户的代码an.mdb数据库名fd表名y_username用
  •  可在图片连接后面加上宽和高,如:width="150" height="50"<h
  • 首先,了解下原理。1,提供文本框进行查询内容的输入2,将查询信息提交页面程序处理3,程序页主要作用:接受查询信息,根据此信息调用特定的SQL
  • 八月的UCDChina书友会主题是“信息分类和方法”,在会场中的内容是不足以简单的概述的,而这次交流至少对于分类、属性、关键词与Tag的定义
  • 很多网友在经典论坛里说自己的网站为什么色彩上总是有问题,总是看起来没什么精神,没办法吸引人注意。小毅观察了一些网友们设计的网站发现他们在用色
  •  ALTER DATABASE DATAFILEd:\ORANT\DATABASE\USER1ORCL.ORA RESIZE 10
  • 今天在看罗素的《西方哲学史》时,忽然想到了这个想法,我认为可以从另外一个角度来看“用户体验“的影响因素。上面这个图是我今天思考的一部分,这是
手机版 网络编程 asp之家 www.aspxhome.com