老实说,我非常喜欢“自由度”大的模块;而且,我更喜欢“数据列表”性的模块,而不是像Text/HTML模块一样,只是一个FCKEditor而已,剩余的东西交给用户。没有“历史数据”、没有“痕迹”,一旦你做了修改,这些修改就实实在在的替换掉了原来的东西,原来的数据就变得不可查询了。对于一个网站来说,这并不好,所以Text/HTML只适合做相对来说最简单的静态页面,在某种情况下,和Google Sites有点类似。
Forum模块,我也不太喜欢,因为使用了太多自己的CSS,而不是Portal统一的;尤其是新版最顶端的几个图片,我实在是不喜欢,黑乎乎的。不过,毕竟有一个Forum比自己做一个要好很多,所以,在很多时候,我还是希望直接把Forum放在某个页面上。
有一个问题就是,如果Forum模块不是在首页上,但是用户却可能希望在首页上展示几条某个论坛的数据,那应该怎么办呢?嗯,这个问题其实也好解决,因为Reports模块可以做得到。
首先,假设我们在系统里面已经有了一个论坛(不在首页上,说老实话,把原版的Forum放在首页上的话……,那就太难看了),我们有一个ForumID为 5的板块,我们希望的是在首页上可以显示这个板块最新的五条内容,如果我们还要打开Forum模块再编写一个页面的话,就太麻烦了,所以,我们用 DotNetNuke现有的Reports模块,在几分钟之内搞定这个问题。
Reports的原理其实就是用户编写SQL语句,直接在界面上进行展示,如果说类比的模块的话,用主机管理员登录之后的“主机管理——SQL服务”完成的是同样的功能;当然,SQL服务更为复杂一点。
Reports模块限定为只有主机管理员(Host)才能编写SQL语句,这主要是为了确保数据库的安全,虽然 Reports模块已经将Create、Delete、Update等列为禁用关键词,但是,为了确保数据库的安全,仍然限定只有Host用户才可以读取数据库中的内容。
下面,我们来演示一下,如果在几分钟之内,搞定我们的需求:将Forum某个板块的前五条显示在首页上。
首先,要在首页上新增加一个Reports模块;
然后,用Host用户登录到系统,点击该模块的快捷菜单,点击“设置”,进入设置的界面;在“报表设置”中,Active Data Source使用默认的DotNetNuke Data Source,然后Query字段中填入如下的内容:
SELECT '<a href=/tabid/54/forumid/5/threadid/' + LTrim(Str(ThreadID)) + '/scope/posts/Default.aspx>' + Subject + '</a>' AS 最新更新 FROM Forum_Posts WHERE ThreadID IN (SELECT TOP 5 ThreadID FROM Forum_Threads WHERE ForumID=5 ORDER BY ThreadID DESC ) ORDER BY PostID DESC
好了,完成设置之后,我们保存该设置,并且返回到页面,看一下我们的界面上,是不是已经有了论坛最新的五条记录
点击链接之后,可以直接链接到帖子的内容。
原理大家只要看一下SQL语句就非常清楚了:我们只不过是用SQL语句,读出论坛的标题,然后为该标题加上链接的地址,也就是如/tabid/54/forumid/5/threadid/12/scope/posts/Default.aspx这样的地址,就可以完成以上的功能了。
Reports模块还可以有更多的应用,比如,在我的RedstartForm模块中,我使用Reports模块来汇集当前用户的待办信息,于是,在不同模块上的当前用户的“待办”数据,就可以集中在首页上统一进行显示,用户点击链接,就可以直接到达相关的页面,甚至是直接打开内容了。原理都是一样的,就是用SQL语句拼凑出URL和待读取的内容,仅此而已。