以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XML源码及示例(仅原创和转载) 』 (http://bbs.xml.org.cn/list.asp?boardid=32) ---- XML 论坛 (http://bbs.xml.org.cn/dispbbs.asp?boardid=32&rootid=&id=8913) |
-- 作者:diy930 -- 发布时间:7/21/2004 1:40:00 PM -- XML 论坛 您知道 Microsoft Internet Explorer 5.5 具有编辑 HTML 的内置支持吗?我一直想有一个基于 XML 的好工具来做联机讨论,和新闻组差不多,但是结构性更强,好让我能轻松地添加新的功能。 我一直希望这类工具中能有这些功能: 轻松维护 - 能删掉我自己张贴的内容,或者指定一些管理员,让他们可以轻松删掉贴子。完整地复制这些论坛的部署和管理。 每个顶级讨论线索是一个可以展开和折叠的层次结构。它使用 Cookie 来记忆您在哪里。这样,您回到讨论时,还会回到同样的位置。 分级 编辑 实际上,IE 5.5 的内置编辑器还有很多这里没有提到的功能。使用工具栏、弹出式菜单和您拥有的其他控件,您可以随心所欲地创建内容更加丰富的用户界面。其实,这段代码是从另一篇 MSDN 文章上获得的:定位和编辑(英文)。 开始 <!ELEMENT discussion (title, threads*)> 这段代码会捕获线索化讨论的层次结构,在这个结构中,消息包含了答复,答复又包含了更多的消息,等等。每个张贴内容的主体都存储在独立的 XHTML 文件中,而 <body> 元素的 src 属性确定了文件的位置。 这个索引存储在论坛目录里名为 index.xml 的文件中。您将此目录作为一个称作 root 的 URL 参数提供给 discuss.asp 网页。例如,上面的网页是使用以下的 URL 显示的: http://localhost/xdiscuss/discuss.asp?root=userdata 这样,同一个论坛 Web 应用程序可以用来维护站点上任意数量的独立论坛。例如,我有一个论坛讨论这个应用程序本身(就是上面那个),另一个则用来讨论我正在开发的产品的新功能。 管理 <admin> 现在,唯一的一个权限是“All”。很显然,可以用很多方法来扩展这个列表。如果能用一个用户界面来维护这个管理消息,那也是个好办法。 源代码 文件名 说明 设计 上图说明了本应用程序的总体消息流:index.xml 文件高速缓存在 ASP 应用程序范围中,以获得更好的性能,该文件还会不时保存到磁盘中,以免丢失所作的更改。这些由共享 ASP 脚本 common.asp 以及 global.asa 和 unload.asp 共同管理。 顶级大纲框架由 outline.asp 生成。outline.asp 运行一个服务器端 XSL 转换器以过滤出用户想看的消息(基于分级进行)。然后,它将筛选后的索引内容发送至客户端,内容中附加的 outline.xsl 转换器将执行客户端 XSL 转换,以生成 DHTML 用户界面。 当您从大纲中选择消息时,底部的详细消息框架将显示 message.asp 的运行结果。message.asp 从指定的论坛中找到指定消息并返回消息的详细信息,同时通过附加的 detail.xsl 转换器建立详细信息 DHTML 用户接口。 在详细信息视图中,您可以删除调用 delete.asp 的消息,并检查您是否具有管理员权限,或者答复这个消息。Reply.asp 建立模板消息,并使用 reply.xsl 转换器来显示多信息文本编辑器。从编辑器视图上,您可以将答复张贴到 post.asp 脚本,它将有关您消息的信息添加到共享索引,并将消息主体保存到服务器上的单独文件中。 一些技巧 缩进 - 使用称作 padding-left 的 CSS 样式生成大纲视图的缩进。根据 <message> 元素的嵌套深度计算该样式的值。此计算在 outline.xsl 转换器中执行,使用以下 XPath 表达式: padding-left:<xsl:value-of select="count(ancestor::message)"/>em; 本地时间 - 服务器在 post.asp 中生成消息的时间戳记,并将其保存为通用协调时间,通用协调时间是指定日期与 1970 年 1 月 1 日午夜之间的差(按毫秒计算)。使用 JScript Date() 对象的 getUTC* 方法完成这一功能。在客户端,多种 XSL 转换器使用 Date 对象的 getTimezoneOffset 方法将时间调回本地时间,并使用 toLocaleString 显示为本地化字符串。这些工作由 XSL/T 转换器中的 msxsl:script 块完成。 多论坛支持 - 一个论坛应用程序,可用于参加同一服务器上的多个论坛。您可以使用“Root”URL 参数选择论坛,每个论坛的 index.xml 文件被高速缓存在应用程序范围中。为了管理所有论坛,使用了另一个动态生成的、自由线索的 XML 文档对象来维护所有载入论坛的主控列表。这样,当在 global.asa 中引发 Application_OnEnd 事件时,commmon.asp 中的 Unload() 方法可以找到所有载入的论坛,并将其全部卸载。 展开/折叠 - 大纲视图实际上是一个只有一行的表。要实现层次结构的展开/折叠,HTML 中需要包含足够的信息,以便 DHTML 脚本代码指出各行之间的父子层次结构。它的实现方式是:通过 outline.xsl 转换器,在每个 <TR> 元素上生成 id、thread、parent 和 depth expando 属性。这些值按 XPath 父子关系来生成,非常巧妙。在 expand.js 中将使用这一 HTML 信息实现展开/折叠功能。当前的展开状态也被维护并保存在 Cookie 中,以便您回来时它还能保持原来的展开状态。通过维护当前展开消息的消息 ID 列表可以实现这一功能。 下一步是什么? 采用新的 .NET Framework(英文)和高度类型化语言(例如 C#),上述程序的性能和可维护性都将获得大幅度提高。 |
-- 作者:swj8606 -- 发布时间:5/17/2006 2:53:00 PM -- 好冷清啊~~ |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |