为DNN开发变换图片模块的总结
DNN 的变换图片模块开发靠一段落,在此总结一下,这个看似简单的工作。
因为装了DotNetNuke_04.08.00_StarterKit.vsi,所以开发module是小case。
用vs2005的My templates中的DotNetNuke dynamic module新建一模块,将多余的东东剔除。得以一个干净的module.
于是乎,现在的工作重点就是考虑如何实现变换图片了。
直接用asp.net来作的话,据说不能作到不刷新页面,而实现图片的变换。摆在面前的只有两条路,一个是用js,一个是用flash.
以前也看过这方面的文章,所有心里已经有数了。就是用js来作。具体的过程,就是google后,选一些质量较高的文章来研究。结果发现用js的话,在单独的asp.net页面里,可以正常的执行,可是放到dnn module里,就是找不到document中定义的成员。
第一次的努力算是暂时用不上了,不是白费,因为,我还是准备在这个模块作好后,再回过头来研究用js在dnn中实现变换图片模块。
接着选用flash方式。
图片存放位置和对应的链接网站还有每个图片的说明文字这三个变量(这个flash有5张图,所有就是15个变量),再加上flash的长和宽和文本高度共18个参数。将这些都存放到dnn数据库的一张表中。
想好了,如何做。
动手……
遇到问题了。
一个是sql脚本中创建列时,对这列赋初值的问题。我试了很多次,感觉自己没有输入错误啊。为什么别人的都可以,就我的没反应。
最终,我在论坛上问到了,这个赋初值生效的前提是对数据表进行insert或update操作后。解决方法很简单,就在建表的脚本最后,加上
insert into 表名(某一列名) select 值
OK,这个问题解决。
第二个问题又来了,因为取图片位置,可以是外部网站的URL,也可以是本地的图片。用dnn自带的portal:url控件来取得路径,可是这并不符合我的需求。
需要将文件的名称以“http://IP或域名/目录/文件名.jpg”的方式保存。
因为在不同的网站,不同的服务器上,这个“IP或域名”是不同的。
而flash文件也是这样。
最后的解决方法是:
对图片:
int ImgFileID = Int32.Parse(ctlURL.Url.Substring(7));
DotNetNuke.Services.FileSystem.FileController objFileController = new DotNetNuke.Services.FileSystem.FileController();
DotNetNuke.Services.FileSystem.FileInfo objImageInfo = objFileController.GetFileById(ImgFileID, PortalId);
tb.Text= DotNetNuke.Entities.Portals.PortalController.GetCurrentPortalSettings().HomeDirectory + objImageInfo.Folder + objImageInfo.FileName;
对flash文件:string swfpath ="http://"+ Request.UserHostName+Request.ApplicationPath+"/DesktopModules/NewsImages/focus.swf";
然后,就是打包了,create module package。参考http://adefwebserver.com/DotNetNukeHELP/DNN_PackageModule/Default.htm完成。较简单。
还有一个问题没有解决,我是在忙了一天后,才决定将其暂时放一边,今后找到线索再来处理,先用英文来代替了。问题我已经发到csdn的论坛上了。
http://topic.csdn.net/u/20080424/10/af02c991-3c37-415b-ba06-75bf5e283a8a.html?seed=1191400102
标题是:100分送给解决者。感谢大家捧场。SQL SERVER 2005 EXPRESS与ASP.net出现中文变成问号的奇怪问题。很可能不是通常的utf-8编码问题。
另外,也在taobao.com上发布了卖module的信息。程序员也需要生活哈。http://auction1.taobao.com/auction/item_detail-0db2-df657f30851b4b6dd01e9cc9e01920ff.jhtml