POPASP2.0 使用教程(含视频教程)

欢迎您使用 POPASP,通过此教程,您将了解到 POPASP 的基本使用方法和一些使用技巧,包括 POPASP 的部署与配置、数据库的连接与链式操作、增删改查、后台表单验证、模板引擎等 POPASP 的特色功能。

为了学习本节内容,特意制作了10个案例,以便帮助快速掌握POPASP的使用。百度网盘下载

如何使用 POPASP

下载与安装

请从 POPASP下载页面下载 POPASP 的最新版本到本地,并解压。然后将 POPASP 文件夹拷贝到您的IIS站点根目录。为了您的学习需要,下面的所有示例都打包在一个文件夹。 如果您通过 http://(您的站点地址)/demo/index.asp/ 访问可以运行 POPASP 自带的数据库操作示例,则表示您已经正确的安装了 POPASP。

文件结构

POPASP 内部的文件结构如下,其中的文件功能简单介绍一下:

文件 功能
popasp.asp 框架入口
popasp.convention.asp 惯例配置
popasp.func.asp 函数库
popasp.model.asp 数据模型样例
popasp_access.class.asp access模型类
popasp_application.class.asp Application操作类
popasp_arr.class.asp 数组类
popasp_autocomplete.class.asp Model验证类
popasp_autovalidate.class.asp Model自动完类
popasp_autovalidate.class.asp Model自动完类
popasp_controller.class.asp 控制器类
popasp_cookie.class.asp cookie操作类
popasp_database_tool.class.asp 数据库操作工具类
popasp_dictionary.class.asp Dictionary操作类
popasp_excel.class.asp Excel操作类
popasp_file.class.asp 文件操作类
popasp_json.class.asp json操作类
popasp_md5.class.asp md5加密类(可加密汉字)
popasp_model.class.asp Model重写类
popasp_molibupload.class.asp molibupload上传类
popasp_mvc.class.asp 框架类
popasp_page.class.asp 分页类
popasp_pagetrace.class.asp 控制台类
popasp_rejection.class.asp 反射类
popasp_structrue.class.asp 部署类
popasp_template.class.asp 模板引擎类
popasp_template_compiler.class.asp 模板解析类
popasp_url.class.asp url分析类
popasp_verify.class.asp 验证码类
Tpl文件夹 内置的一些模板文件
Plugin文件夹 插件文件夹

POPASP1.X兼容Easyasp,POPASP2.0不再兼容Easyasp。

项目部署

首先在网站目录下创建index.asp文件,该文件就是我们要创建项目的入口文件。

<!--#include file="../popasp/popasp.asp" -->

<%
'项目文件夹,部署项目时,不要手工创建home文件夹,否则无法进行项目部署
const APP_PATH = "./home"

'开启POPASP之旅
POP_MVC.start
%>

然后,我们打开浏览器,输入地址并运行:

http://localhost/index.asp

就会看到欢迎页面:

:)
欢迎使用 POPASP!

需要说明的是,在进行项目部署时,因为部署时的判断条件是是否存在项目文件夹,所以不要手工去创建项目文件夹,否则无法完成项目部署。

如果看到欢迎信息,说明项目已经成功部署。部署完后的项目包括如下文件

目录 说明
Common 项目公共文件目录,一般放置项目的公共函数
Conf 项目配置目录,项目的配置文件放在这里
Controller 包含控制器文件
Model 包含模型文件
Tpl 项目模板目录
Plugin 插件目录
Runtime 项目运行时目录,包括Cache(数据缓存)、Data(数据目录)、Compile(模板解析文件)、Class(类的重写与反射文件)、Log(日志文件)

本部分示例为01

关于项目部署更详细的说明请查看帮助文档相关章节。

Hello World

在刚才生成的项目目录中,找到 home/Controller/IndexAction.class.asp 文件,用一个你喜欢的IDE打开,会看到如下代码。

<%
' 本类由系统自动生成,仅供测试用途
Class IndexAction
    public Sub index()
        Response.write "<h1 style=""font-size:80px;margin:30px 0 10px 30px;font-family:'微软雅黑';font-weight: normal;"">☺</h1><p style=""line-height:1.8em;font-size: 36px;margin:0 0 0 30px;font-family:'微软雅黑';font-weight: normal;"">欢迎使用 <b>POPASP</b>!</p>"
    end Sub
End Class
%>

这是系统自动生成的控制器,我们将它改写一下,以便生成 Hello World 。

<%
Class IndexAction
    public Sub index()
        that.assign "tip","Hello World"
    end Sub
End Class
%>

同时,我们还需要将index.asp文件的内容改写一下

<!--#include file="../popasp/popasp.asp" -->

<%
'项目文件夹,部署项目时,不要手工创建home文件夹,否则无法进行项目部署
const APP_PATH = "./home"

'开启POPASP之旅
POP_MVC.run
%>
<%
'调用控制器Index中的方法index
Call A_("Index/index")
%>
<strong><%=V_("tip")%></strong>

在POPASP2.0中,放弃了复杂的模板引擎技术与单文件入口,每个入口页面其实对应的就是MVC中的视图文件。上面的V_函数,是用来调用通过that.assign分配的变量tip,另外还要注意,V_函数是区分变量名大小写的。

提示,在使用IDE编辑文件时,一定要采用 UTF-8无BOM格式编程 ,因为系统采用的是此编码,否则会出错的。

再次在浏览器打开

http://localhost/02/index.asp

会看到浏览器中显示

<strong>Hello World</strong>

或许你用惯了混写代码,突然使用POPASP感觉有些不太适应,像上例为了显示Hellow World,操作了几个文件,似乎有些绕,而这正说明你还是不太了解MVC的工作原理,而MVC的妙处随着你学习POPASP的深入,相信一定会有所感触的。

本部分示例为02

快速查看变量

我们经常需要对一些变量快速查看,比如从数据库中查询的记录、asp的环境变量、通过form表单提交的数据等等。

此时我们可以使用sub过程var_export,使用方法如下所示

<%
Class IndexAction
    public Sub index()
        var_export Request.ServerVariables
    end Sub
End Class
%>

再次在浏览器打开

http://localhost/03/index.asp

会看到环境变量已经全部输出。

本部分示例为03

数据库操作

POPASP在数据库操作的一大靓点是连贯操作。比如在数据库中查询ID=1的文章,

dim rs
set rs = M_("post").db.where(1).field("id,title,add_time").find()
var_export rs

该示例在04

取15篇文章,发送给模板文件并显示

在控制器中,

<%
Class IndexAction
    public Sub index()
        dim rs

        '得到结果集,page(null,10),当第几页为null时,会自动取当前页
        set rs = M_("post").db.page(array(null,10)).field("id,title,add_time").select()

        '分页变量的分配必须要放在list分配之前
        that.assign "page",P_("PAGE")(rs).show()    '在模板文件中使用V_("page")

        'rs以数组形式传入,只传取当前页数据
        that.assign "list",array(rs)
    end Sub
End Class
%>

在index.asp文件中,

<!--#include file="../popasp/popasp.asp" -->

<%
'项目文件夹,部署项目时,不要手工创建home文件夹,否则无法进行项目部署
const APP_PATH = "./home"

'一般项目部署时使用POP_MVC.start,部署完后多用POP_MVC.run,后者不去检查项目文件夹是否存在
POP_MVC.run
%>
<%
'调用控制器Index中的方法index
Call A_("Index/index")
dim key,item
%>
<html>
<head>
    <title>通过控制器取出文章并分配,在模板文件中显示</title>
</head>
<body>

<ul>
  <% for each key in V_("list") : set item = V_("list")(key) %>
  <li><a href="post.asp?id=<%=item("id")%>"><%=item("title")%></a>
      <span><%=item("add_time")%></span>
  </li>
  <% next %>
</ul>

</body>
</html>

该示例在05,在示例中,通过POPASP强大的控制台,可以看到完整的sql语句。

在上例中,我们并没有拼写sql语句,而是通过非常简单的连贯操作就可以从数据库中获取数据,而且我们并没有刻意手工去销毁Recordset对象。在混写代码中,对于何时销毁Recordset变量是件让人头疼的事情,但是在popasp中,程序会自动销毁这些变量,是不是非常得方便呢?

数据库的操作在POPASP中异常方便,一是体现在连贯操作,二是Recordset变量自动销毁,三是MVC分层,代码更易阅读与维护。

数据库其他操作

POPASP的版本目前是2.X,在1.X中对数据模型的操作就已经非常丰富了,在上面的例子中我们看到了连贯操作,另外还包括CRUD的连贯操作、CURD的非连贯操作、增加记录与修改记录时的自动完成与自动验证、自段排除等等,这里只作抛砖引玉,更详细的内容还请查看帮助文档。

数据分页

通常在数据查询后都会对数据集进行分页操作,POPASP也提供了分页类来对数据分页提供支持。POPASP的分页是非常简单易用的。

dim rs

'得到结果集,page(null,10),当第几页为null时,会自动取当前页
set rs = M_("post").db.page(array(null,10)).field("id,title,add_time").select()

that.assign "page",P_("PAGE")(rs).show()    '在模板文件中使用V_("page")

'rs以数组形式传入,只传取当前页数据
that.assign "list",array(rs)

数据分页的操作如此简单,结合数据库查询,两三行代码就可以完成数据分页,而且数据分页类可以根据需要进行相应配置。

本部分示例为06

模板文件的循环语句

在popasp1.X中使用了复杂的模板引擎技术,循环语句也较为复杂。在2.X版本中,没有使用复杂的模板引擎技术,而是使用了ASP原生技术,操作更方便,更易上手。但是有几点需要注意:

因为通过that.assign分配的变量,当其类型为Recordset时会将其转化为Dictionary对象,注意,是Dictionary对象而非数组。在模板文件中进行循环输出时,建议使用for each ... next,这样的循环相比其它循环方式更为方便简单,如果分配变量是数组,这种方法也适用。

在控制器中,

<%
Class IndexAction
    public Sub index()
        dim arr

        '生成一个数字数组,1,2,3……20
        arr = POP_MVC.Arr.Range(1,20)

        '将数组分配
        that.assign "arr",arr
    end Sub
End Class
%>

在index.asp文件中

<!--#include file="../popasp/popasp.asp" -->

<%
'项目文件夹,部署项目时,不要手工创建home文件夹,否则无法进行项目部署
const APP_PATH = "./home"

'一般项目部署时使用POP_MVC.start,部署完后多用POP_MVC.run,后者不去检查项目文件夹是否存在
POP_MVC.run
%>
<%
'调用控制器Index中的方法index
Call A_("Index/index")
dim item
%>
<html>
<head>
    <title>通过控制器取出文章并分配,在模板文件中显示</title>
</head>
<body>

<!--文章列表-->
<ul>
  <% for each item in V_("arr") %>
  <li>
    <%=item%>
  </li>
  <% next %>
</ul>
</body>
</html>

该部分示例在07中

验证码

在POPASP中使用验证码非常方便。

首先我们在Action中先定义一个方法,如下

<%
Class PublicAction
    public Sub verify()
        call that.verify
    end Sub
End Class
%>
http://localhost/08/index.asp?c=Public&a=verify

这样就可以了。因为POPASP2.X采用了多文件入口,即便将index.asp换成其他文件名,只要正确引入了popasp框架,验证码都会正常输出。

用于html中生成验证码图片时,可以如下使用

创建login.asp文件,代码如下:

<!--#include file="../popasp/popasp.asp" -->

<%
'项目文件夹,部署项目时,不要手工创建home文件夹,否则无法进行项目部署
const APP_PATH = "./home"

'一般项目部署时使用POP_MVC.start,部署完后多用POP_MVC.run,后者不去检查项目文件夹是否存在
POP_MVC.run
%>
<%
'调用控制器Index中的方法login,该方法即使不存在,也能正常运行
Call A_("Index/login")
dim item
%>
<html>
<form action="" method="post">
<p>用户名:<input type="text" name="username" /></p>
<p>密码:<input type="password" name="password" /></p>
<p>验证码:<input type="text" name="verify" /><img src="login.asp?c=Public&a=Verify" onclick="javascript:this.src='login.asp?c=Public&a=Verify&tm='+Math.random()" style="cursor:pointer;height:14px;" alt="验证码" /></p>
<p>提交:<input type="submit" name="send" value="提交" /></p>
</form>
</body>
</html>

该部分示例在08中

多文件引入框架的简化

在示例08中,我们发现在引入popasp时,需要多次写以下几行代码

<!--#include file="../popasp/popasp.asp" -->

<%
'项目文件夹,部署项目时,不要手工创建home文件夹,否则无法进行项目部署
const APP_PATH = "./home"

'一般项目部署时使用POP_MVC.start,部署完后多用POP_MVC.run,后者不去检查项目文件夹是否存在
POP_MVC.run
%>

如果要修改popasp的引用路径,或者要修改项目文件夹名称或路径,多个入口文件都需要修改,比较麻烦,下面提供一种简便方法。

首先我们先创建一个文件popasp_inc.asp,代码如下

<!--#include file="../popasp/popasp.asp" -->

<%
'项目文件夹,部署项目时,不要手工创建home文件夹,否则无法进行项目部署
const APP_PATH = "./home"

'框架文件夹路径,这里跟上面的include路径一致
POP_MVC.mvc_dir = "../popasp/"    '该行代码不可少

'一般项目部署时使用POP_MVC.start,部署完后多用POP_MVC.run,后者不去检查项目文件夹是否存在
POP_MVC.run
%>

其它入口文件只要引入该文件即可。比如login.asp可以改写为如下:

<!--#include file="./popasp_inc.asp" -->
<%
'调用控制器Index中的方法login,该方法即使不存在,也能正常运行
Call A_("Index/login")
dim item
%>
<html>
<form action="" method="post">
<p>用户名:<input type="text" name="username" /></p>
<p>密码:<input type="password" name="password" /></p>
<p>验证码:<input type="text" name="verify" /><img src="login.asp?c=Public&a=Verify" onclick="javascript:this.src='login.asp?c=Public&a=Verify&tm='+Math.random()" style="cursor:pointer;height:14px;" alt="验证码" /></p>
<p>提交:<input type="submit" name="send" value="提交" /></p>
</form>
</body>
</html>

本示例为09

使用缓存技术

POPASP在1.X版本中就具备了缓存技术,非常强大,可以使用多种缓存技术。在2.0版本中,只保留了数据缓存技术,使用起来更方便更简单。

IndexAction.Class.asp文件中

<%
Class IndexAction
    public Sub index()
        dim rs,page

        if that.get("page") = "" then
            page = 1
        else
            page = that.get("page")
        end if

        'that.expired方法有两个参数,分别是模板文件名与缓存标识ID,这里可以取当前page作缓存标识
        if that.expired("",page) then
            '得到结果集,page(null,10),当第几页为null时,会自动取当前页
            set rs = M_("post").db.page(array(null,10)).field("id,title,add_time").select()

            '分页变量的分配必须要放在list分配之前
            that.assign "page",P_("PAGE")(rs).show()    '在模板文件中使用V_("page")

            'rs以数组形式传入,只传取当前页数据
            that.assign "list",array(rs)
            that.cache()
        end if
    end Sub
end Class

在模板文件index.asp

<!--#include file="../popasp/popasp.asp" -->

<%
'项目文件夹,部署项目时,不要手工创建home文件夹,否则无法进行项目部署
const APP_PATH = "./home"

'一般项目部署时使用POP_MVC.start,部署完后多用POP_MVC.run,后者不去检查项目文件夹是否存在
POP_MVC.run
%>
<%
'调用控制器Index中的方法index
Call A_("Index/index")
dim key,item
%>
<html>
<head>
    <title>使用缓存技术</title>
</head>
<body>

<!--文章列表-->
<ul>
  <% for each key in V_("list") : set item = V_("list")(key) %>
  <li><a href="post.asp?id=<%=item("id")%>"><%=item("title")%></a>
      <span><%=item("add_time")%></span>
  </li>
  <% next %>
</ul>

<!--下面是分页-->
<div>
<%=V_("page")%>
</div>

</body>
</html>

有没有使用缓存技术,对于模板文件的代码书写没有影响。但是通过控制台,我们可以发现在缓存期内,系统并没有调用数据库。这样大大节省了读取数据库的开销。

本部分示例对应10

总结

通过上面的阅读,你会发现POPASP简单易用,这是因为作者在框架中作了大量的工作用来简化您的操作。通过上面的学习,你对POPASP的了解是远远不够的,我们强烈建议您认真阅读帮助文档来学习,另外附带POPASP2.0版本作者还提供了一套多用户留言管理系统,方便您的学习。另外还要告诉大家一个好消息,作者即将推出POPASP视频教程,敬请期待。

  • 关于我们

    • 酷酷的框架

      2016年7月30日

      POPASP框架是由泡泡脚本网的站长开发的,关于泡泡脚本网...

      Read More