在DotNetNuke中利用Reports模块拼凑数据(一)

老实说,我非常喜欢“自由度”大的模块;而且,我更喜欢“数据列表”性的模块,而不是像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和待读取的内容,仅此而已。

时间: 2024-12-11 16:10:04

在DotNetNuke中利用Reports模块拼凑数据(一)的相关文章

在DotNetNuke中利用Reports模块拼凑数据(二)

在(一)中,我们描述了如何在一分钟之内(如果你SQL语句足够熟练的话),将已有的数据重新打乱.组合.排列,等等,Whatever you want,总之,是用已有的数据,组合成一个新的数据模块.我们介绍了Reports,这个模块非常方便,也极其简单,就是把我们用SELECT语句选择出来的列,全部都放在一个模块之内,其实,这就是一个非常开放的模块.也非常好用的模块,如果我们自己开发的模块,可以达到这种效果的话,那么,应该就算是非常成功了. Reports的新版(大概是4.0以后的版本,07年的版本

在DotNetNuke中利用Reports模块拼凑数据(三)

这个(三)基本上是滥竽充数的,因为看到了两个网友的留言,所以在这里统一回复一下--确实是充数. 关于Reports模块的分页问题: 其实新版的Reports模块已经支持分页了,在设置界面就有,其实是非常简单的一个设置,如下图所示: 问这样的问题,表示提问题的这位同学根本没有使用过Reports模块啊,呵呵. 至于样式嘛,当然,Reports缺省的Grid方式是不能设置的(其实Grid也已经不错了),所以又提供了HTML和XSL两种列表解析方式,把这两种方式弄熟了,到处都可以用得到,所以,Repo

python中的pickle模块储存数据,和print储存有什么区别吗?

问题描述 python中的pickle模块储存数据,和print储存有什么区别吗? python中的pickle模块储存数据,和print储存有什么区别吗? pickle.dump和print(object,file=XXX)不一样吗? 解决方案 pickle是序列化的方式存储数据,可以还原回对象.print应该只是打印这个对象数据到文件 解决方案二: http://www.cnblogs.com/pzxbc/archive/2012/03/18/2404715.html

SQLServer中利用NTILE函数对数据进行分组的一点使用

原文:SQLServer中利用NTILE函数对数据进行分组的一点使用 本文出处:http://www.cnblogs.com/wy123/p/6908377.html    NTILE函数可以按照指定的排序规则,对数据按照指定的组数(M个对象,按照某种排序分N个组)进行分组,可以展现出某一条数据被分配在哪个组中. 不仅可以单单利用这个特性,还可以借助该特实现更加有意思的功能. NTILE的基本使用 NTILE的作用是对数据进行整体上的分组,比如有60个学生,按照成绩分成"上中下"三个级

PHP中利用APC模块实现文件上传进度条

从5.2开始APC加入了一个叫APC_UPLOAD_PROGRESS的东东,解决了困扰大家已久的进度条问题.并且它把原来的上传时把临时文件全部缓存到内存改成了当临时文件达到设定值时就自动保存到硬盘,有效地改善了内存利用状况. 它的作用原理是在上传时候赋予每个上传一个唯一的ID,当 PHP 脚本收到一个上传文件时,解释程序将自动检查 $_POST数组中名为 APC_UPLOAD_PROGRESS 的隐藏字段,它将成为缓存变量,存储关于上传的信息,这样脚本就可以通过上传的ID来访问上传文件的状态信息

Linux中利用Rsync+Inotify-tools实现数据实时同步备份

说明: 操作系统:CentOS 5.X 源服务器:192.168.21.129 目标服务器:192.168.21.127,192.168.21.128 目的:把源服务器上/home/www.111cn.net目录实时同步到目标服务器的/home/www.111cn.net下 具体操作: 第一部分:分别在两台目标服务器192.168.21.127,192.168.21.128上操作 一.分别在两台在目标服务器安装Rsync服务端 1.关闭SELINUX vi /etc/selinux/config

Ubuntu10.04中利用V4L2读取摄像头数据并保存成文件【转】

转自:http://blog.chinaunix.net/uid-29339876-id-4042245.html 利用V4L2读取UVC摄像头数据并保存成视频文件,主要参考http://linuxtv.org/downloads/v4l-dvb-apis/index.html中的示例Appendix D. Video Capture Example,将读取的文件保存在当前目录下的file.yuv中,修改后的完成代码如下:      点击(此处)折叠或打开 /*  * V4L2 video ca

Win7电脑中利用命令提示符拷贝硬盘数据

  1.首先,在自己的win7电脑中同时按下键盘上的win+R快捷键打开电脑的运行窗口,在打开的运行窗口中,输入cmd并单击回车,这样就可以打开win7电脑的命令提示符窗口了. 2.在打开的命令提示符窗口中,输入copy c:test.txt d: 命令,即可将C盘TEST文件直接复制到D盘中,想要复制哪个磁盘中的哪个文件,只要直接对这个命令进行相应的修改就可以了,或者在复制文件的同时还可以对文件进行重命名,比如要将C盘TEST文件直接复制到D盘中,再将它重命名为test2.txt,即输入命令c

Jquery中利用getJSON读取json数据方法

整个调用过程中,起关键作用的是jsoncallback=?,在客户端调用时需在请求地址中添加参数:jsoncallback=?:同时服务器端则需要把jsoncallback的值作为方法名传回来. 服务端代码:  代码如下 复制代码   protected void Page_Load(object sender, EventArgs e) { Response.Write(Request.QueryString["jsoncallback"] + "({name:'test'