65.9K
CodeProject 正在变化。 阅读更多。
Home

EzEvents

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.46/5 (23投票s)

2001年8月12日

14分钟阅读

viewsIcon

440251

downloadIcon

5179

为您的网站设计的 ASP 事件日历。

引言

最近在为工作创建一个项目网站时,我想添加一个事件日历,以便团队成员能够轻松地将会议、培训、团建活动等事件传达给其他团队成员。是的,我知道,市面上有很多 ASP 日历。我在网上到处寻找,找到了大量的网页日历,但我没有找到完全符合我期望的格式或功能的。而且,大多数真正好的日历都不是免费的,而且没有预算购买一个。所以,我决定自己尝试写一个。我在 www.4guysfromrolla.com 上找到了我想要的基础。在那里,我找到了一篇文章,作者将一个非常简单的日历应用程序(来自 www.asp101.com)添加了仅输入事件的功能。

然而,除了能够输入事件之外,我还需要能够编辑和删除事件,以及输入跨越多天的事件。我还想提供一种方法来清理数据库中的过期事件,这样数据库就不会继续无限制地增长。我不是以网页开发为生的,但我认为我可以做到这一点,所以我就尝试了一下。结果就是我称之为(因为没有更好的名字)EzEvents 的东西。

数据库字段

该应用程序的设计利用 Microsoft® Access 数据库来存储日历的事件。数据库包含六个相关的字段。这些字段列在下表中

字段名 字段类型 字段描述
主题 文本 事件的主题或标题。
Message 文本 事件的正文文本。
DateVal 双精度浮点型 事件的开始日期。
DateVal2 双精度浮点型 事件的结束日期。可能等于或大于开始日期。
AddedBy 文本 添加事件的人员姓名。
DateAdded 日期 添加事件或最后修改事件的日期。

应用程序页面

EzEvents 由六个可查看的页面组成。这些页面列在下表中

页面名称 页面文件名 页面描述
单月日历视图 Default.asp 提供显示单个月份的事件。
前瞻日历视图 Display12Months.asp 提供显示多个月份到未来的事件,从当前月份开始。
选定事件 DisplayEvent.asp 提供显示在日历视图中选定事件的详细信息。
添加事件 AddEvent.asp 允许用户在数据库中输入新事件。
编辑事件 EditEvent.asp 允许用户编辑或删除现有事件。
事件摘要 DisplaySummary.asp 列出正在查看月份的所有事件,格式适合打印,并按时间顺序排序。

日历视图

EzEvents 提供两种日历视图:单月日历视图前瞻日历视图EzEvents 的默认(主/主页)是 单月日历视图Default.asp)。此页面默认仅显示当前月份的日历。它还提供了控件,允许您选择要显示的另一个月份和/或年份。当用户选择新月份或年份时,显示的日历会自动更新以反映该月份的事件,使用服务器端 VBScript 生成的客户端 JavaScript。此外,日历还提供箭头控件,允许您一次向前或向后移动一个月。

单月日历视图 提供了两个箭头按钮。左箭头,即 上个月 按钮,和右箭头,即 下个月 按钮。如果 单月日历视图 显示的是当前年份的第一个月,则 上个月 按钮将不可用(参见 设计说明)。

单月日历视图 提供了一个 前瞻 按钮。通过选择此按钮,用户可以看到未来 12 个月(默认)的日历,从当前月份开始。

两种视图都提供了一个 摘要 按钮,选择该按钮将显示 事件摘要页面事件摘要页面 以适合打印的格式按时间顺序列出正在查看月份的所有事件。

前瞻日历视图 默认显示未来 12 个月的事件。但是,该视图提供了一个控件,允许用户更改要查看的月份数量,从 2 个月到 24 个月。此外,还提供了一个复选框,允许用户保存此设置,以便下次访问该页面时,之前选择的月份数量将在 前瞻日历视图 中显示。此功能使用名为“EZEVENTS”的 cookie 将计数保存在客户端计算机上。

添加事件

单月日历视图前瞻日历视图 都提供一个标有 添加事件 的按钮。点击后,将显示 添加事件页面。此页面提供一个表单,用户可以通过该表单输入新事件的数据。添加事件页面 包含允许用户选择新事件的开始日期和结束日期的控件。如果用户在选择 添加事件 按钮时正在查看当前月份的日历,则控件将默认设置为当前日期;否则,控件将默认设置为正在查看月份的第一天。

用户可以输入仅发生在一天的事件,或跨越多天的事件。如果要列出单日事件,则开始日期和结束日期控件应设置为同一日期。如果用户希望输入跨越多天的事件,则事件要列出的最后一天的日期将输入到 添加事件 页面 提供的结束日期控件中。

添加事件 页面 中的服务器端 VBScript 会生成客户端 JavaScript,以对用户输入的信息执行验证。验证在用户单击 添加事件 页面 上的 添加事件 按钮时执行。在用户正确输入事件信息之前,不会提交事件以添加到数据库。

用户可以选择通过单击 添加事件 页面 上的 返回日历 按钮来放弃 添加事件 过程并返回到最近查看的日历。如果在输入新事件数据后,用户单击 添加事件 页面 上的 添加事件 按钮,则新事件将输入数据库,并将用户带回到最近查看的日历。如果刚输入的事件在当前月份,用户将在该月的日历中看到该事件标题作为超链接。

作为额外的好处,新事件的作者可以选择为他/她定义的事件设置密码保护。这将阻止任何不知道密码的人修改或删除数据库中的事件。保护是有限的,因为密码当前存储在与事件相同的数据库中,因此任何有权读取数据库的人都可以看到它。但是,这有助于阻止对事件的“未经授权”修改。密码最多可以为 20 个字符。

上面的示例图像展示了 单月日历视图。在此示例中,有两个事件。一个发生在单日(2001 年 7 月 6 日)。另一个跨越两天(2001 年 7 月 16 日和 17 日)。您还会注意到,如果显示的是当前月份,则当前日期(本例中为 2001 年 7 月 6 日)将被突出显示。

查看现有事件详细信息

如果用户单击任一日历视图中的事件标题,将显示 选定事件 页面,其中显示有关所选事件的所有可用信息。从此页面,用户可以单击 编辑/删除事件 按钮来修改或删除数据库中的选定事件。如果事件修改被密码保护,作者姓名旁边将显示一个挂锁。用户还可以选择 返回日历 按钮返回到上次查看的日历。

编辑和删除现有事件

如果用户在 选定事件页面 上选择 编辑/删除事件 按钮,将显示 编辑事件页面编辑事件页面 提供了一个与 添加事件页面 提供的表单非常相似的表单。此表单允许用户修改选定事件的详细信息。如果需要,用户可以通过选择 返回日历 按钮放弃编辑/删除操作。

如果用户选择 更新 按钮,用户将被带回到 选定事件 页面,该页面将显示已在数据库中记录的修改后的事件详细信息。这允许用户校对他对事件的更改。然后,用户可以通过选择 返回日历 按钮返回到上次查看的日历,或者通过再次选择 编辑/删除事件 按钮进行进一步的编辑/更正。与 添加事件页面 一样,所有用户输入在提交表单之前都会经过验证。但是,如果用户尝试编辑/删除受密码保护的事件且用户没有正确的密码,作者将被返回到 选定事件页面,该页面现在将包含一条消息,通知用户他/她无权修改所选事件。

配置 EzEvents

通过编辑“Includes”文件夹中的服务器端包含文件“ConfigCalendar.inc”,您可以更改 EzEvents 的外观的一些参数。此文件提供了常量,您可以使用它们来更改 EzEvents 中使用的各种颜色、数据库的名称/位置以及其他有用的常量。提供了一个常量,允许您更改 前瞻日历视图 的月份数量。例如,如果您希望“前瞻”是 3 个月或 15 个月,您只需更改“ConfigCalendar.inc”中 MAXLOOKAHEADMONTHS 的值。

该应用程序还提供自动清理数据库中过期事件的功能。“ConfigCalendar.inc”包含文件定义了一个常量 EVENTEXPIRATIONPERIOD,允许您预先配置过期时间。此时间以天数为单位指定(负值)。当事件变为 EVENTEXIRATIONPERIOD 天旧时,下次有人在浏览器中访问 单月日历视图(EzEvents 的主页)时,它将自动从数据库中删除。包含文件还提供了一个布尔标志,允许您关闭此功能,如果您希望通过其他方式控制此维护任务。

ConfigCalendar.inc”中还提供了一个名为 CALENDARTITLE 的常量,可用于更改应用程序所有页面上的事件日历的标题。

我对“ConfigCalendar.inc”进行了注释,因此应该很容易确定每个常量的使用方法。

安全注意事项

由于我为访问受限的项目开发了 EzEvents,因此我可以信任使用该网站的每个人都能以专业的方式行事(我想)。因此,该应用程序允许每个人访问查看、添加、编辑或删除事件。但是,如果您想充当事件日历内容的“版主”,限制对应用程序添加/编辑/删除功能的访问是一个容易实现的简单方法。此外,“ConfigCalendar.inc”服务器端包含文件中提供了一个常量,允许您轻松地完全消除这些功能,如果您希望自己作为网站管理员来处理。

处理数据库修改

数据库的实际修改由两个处理页面执行:“ProcessAddEvent.asp”和“ProcessEditEvent.asp”。这些页面仅用于处理,从不显示给用户。添加事件页面 提供的表单提交到“ProcessAddEvent.asp”,编辑事件页面 上的表单提交到“ProcessEditEvent.asp”。

执行数据库连接的代码位于服务器端包含文件“DBCONNECT.inc”中。

将 EzEvents 添加到您的网站

要将 EzEvents 添加到您的网站,只需将 zip 文件中包含的文件和文件夹复制到您的 Web 服务器上,在您的网站上添加指向“default.asp”的链接,并在数据库所在的文件夹中提供适当的写入访问权限,如果您希望允许其他人编辑/删除数据库中的事件。

快速查看今日

我提供了代码,允许您将一个表嵌入到您网站的另一个页面上,该表仅列出今天的事件。与日历视图一样,您可以单击事件标题以查看事件的详细信息。在这种情况下,将显示一个 事件查看器 页面。此页面的外观与 选定事件页面 相同,但它不提供允许用户编辑/删除事件的控件。您必须通过前面介绍的主要 EzEvents 界面执行这些操作。例如,您可能希望在网站主页上包含“今日事件”列表。您所要做的就是将该页面保存为 .asp 文件,并在您希望今日事件列表出现的位置包含服务器端包含文件“TodaysEventsTitles.inc”。

设计说明

我从未打算使用此应用程序来存储/显示很久以前发生的事件。计划是使用它来发布将要发生的事件。此外,它支持显示最近发生的事件,以便用户可以看到他们可能错过的事件。在预定义的时段(默认为 7 天)过去后,将删除过期事件。因此,我没有设计此应用程序来支持当前年份第一个月之前的日期。它仅支持从当前年份的第一个月到当前年份加上 MAXYEARSSELECTIONS 年的最后一个月。参见“ConfigCalendar.inc”和“DisplayCalendar.inc”。

每个可查看的页面都很简单,因为所有代码都通过服务器端包含文件提供。您可以轻松地修改可查看页面的外观以匹配您的网站。

在创建此应用程序时,我希望避免使用 Session 对象,因为我们的项目服务器的配置不支持从 Session 对象中释放特定数据。我不是服务器的管理员,因此无法更改服务器的配置。因此,代码通过查询字符串在页面之间传递一些信息。这可能会使一些网页开发人员难以理解,但可能不会。通过查询字符串传递的信息在页面之间是相同的,并且内容简单。这些数据用于持久化关于最近查看的日历(即 单月日历视图前瞻日历视图)的信息。

我还利用表单中的隐藏输入类型(只要有意义)来促进页面之间的数据交换。我试图注释代码,使其尽可能易于理解。不幸的是,很难格式化生成 HTML 的服务器端 VBScript,使其 HTML 非常易读,所以您只能深入研究并学习。

我还避免在生成的 HTML 中使用层叠样式表,以兼容可能需要在我们项目网站上访问此应用程序的旧版浏览器。如前所述,该应用程序确实使用客户端 JavaScript,因此您必须拥有支持脚本的浏览器。

Possible Enhancements

您也许可以想到此应用程序的一些增强功能。这里有几个:

  • 修改“DisplayCalendary.inc”以支持任何日期,无论其发生的久远程度。
  • 如果 EzEvents 将用于公共网站,请通过密码保护对添加/删除功能的访问。
  • 添加一个 休假日程视图,并添加页面以输入/修改/删除项目人员的休假日程。(提示:向数据库添加另一个表来存储休假记录。)在时间关键型项目中,将休假日程发布到项目网站上以便团队成员可以围绕关键人员的缺勤进行计划通常很有用。
  • 选定事件页面 上的一个控件,允许用户通过电子邮件将正在查看的事件通知某人。

结语

我希望您觉得这个应用程序有用。如果您对改进此应用程序有任何建议,请在本文的评论部分告知大家。祝您使用愉快!

© . All rights reserved.