Register  |  
About the author
Baldwin's Status
 Contact Me
Baldwin Sun
Senior Developer for dnn solution & founder of SunBlog module...
Blog搜索
相册库
更多照片请查看相册库
最新评论
Rss Feed
feedsky
抓虾
pageflakes
newsgator
哪吒
我们的服务
  • DotNetNuke 咨询
  • Web设计及其模块开发
  • 免费建站
  • 电子商务
  • 开拓市场
我们致力于开发定制的web 2.0 ,所服务的客户主要包括小中型企业,社区俱乐部及其非盈利机构组织。我们将利用开源的DNN作为我们核心的系统机制,更多相关信息...

DNN模块开发

在这进行一些DNN模块的设计和发布,其中包括核心的优化及其定制模块的分布等等,如果你有什么关于模块的问题,都可以在此跟我们的团队讨论...

如何添加DNN模块的自定义权限

在开发模块的过程中, 有时也许需要某一自定义的权限, 也就是介乎浏览(View)和编辑(Edit)之间的权限, 比如博客的拥有者, 某一评论或列表的添加者等等, 本文将详细说明这一需求的变更缘由和对应的解决方案.

jQuery插件开发: Watermark Plugin

最近在研究SunBlog和jQuery的整合, 不敢说有很多成就, 到此为止算是刚入门吧。jQueryjQuery最让我欣喜的是其插件式的开发模式, 这一点几乎和 DNN的模块概念同出一辙。我将陆续写些文章阐述DNN和jQuery, 比如如何开发插件(jQuery Plugin), 如何利用Ajax方式调用Webservice,如何优化UI等等, 今天就简单说说如何开发jQuery插件。

SunBlog更新:整合jQuery

SunBlog&jQuery
jQuery以其简洁而著称, 也就是"Do more with less"理念贯穿其中, 我想这是我们需要的, 以最简洁的方式附加一系列的方法和属性甚至事件到某一个DOM节点. 而DNN也打算在5.0版本上整合jQuery, 如此ClientAPI就可以借助jQuery的框架发挥更大的威力和性能, 让我们拭目以待. 当然, SunBlog模块也不甘落后, 目前也在整合jQuery, 就是替代之前使用的Asp.Net Ajax Tookit框架, 在整合j的过程中, 发现jQuery的确可以用更少的代码开发出更强大的功能, 比如Search输入框的水印功能(Watermark), 之前我使用的是Asp.Net Ajax Tookit的TextBoxWatermarkExtender控件, 而如今我只需要几行js代码即可实现同样的feature.

SunBlog更新: 增加Window Live Writer的支持

WLW今天本Blog模块(代号"SunBlog")又新增了一个比较"Cool"的功能, 那就是Window live writer(简称WLW), 有了WLW的支持, 在Blog发布帖子不再如此费劲了(如果你用过DNN的FCKEditor发布信息的话, 我想你会明白我的感受的), 同时也不再担心因为网站服务器不响应而丢失信息了, 丢失信息对于自己辛辛苦苦写好的帖子无疑是致命的打击, 而对于我来说使用WLW最好的一点是它支持扩展的插件应用, 也就是说可以用不同的插件来方便帖子的发布,比如代码高亮提示(这是FCKEditor缺失的), 图片添加甚至你可以很方便的为它添加某些常见的效果(水印, 暗影), 最后还有就是本地备份的功能, 从此你可以更好的维护自己的文章及帖子, 偶尔还可以直接在本地查看浏览。 也许还有更多的好处有待发现 :)

TrimEnd() Vs SubString

分享如何处理带有分隔符的字符串的一些小技巧, 希望可以给大家一些启示

SunBlog更新:增加TagCloud Feature(标签功能)

Tag Cloud今天本Blog模块(代号"SunBlog")又新增了一个比较"Cool"的功能, 那就是TagCloud, 我们在Web 2.0经常提及的热点标签功能, 这也是大部分Blog应用(比如SubText,BlogEngine.NET)具有的功能(feature),故SunBlog也考虑进来,方便用户获取到自己比较关注的信息,希望大家喜欢,给予更多的反馈...
what is tag cloud? (更多关于tag cloud信息可访问http://en.wikipedia.org/wiki/Tag_cloud)
A tag cloud or word cloud (or weighted list in visual design) is a visual depiction of user-generated tags, or simply the word content of a site, used typically to describe the content of web sites. Tags are usually single words and are typically listed alphabetically, and the importance of a tag is shown with font size or color. Thus both finding a tag by alphabet and by popularity is possible. The tags are usually hyperlinks that lead to a collection of items that are associated with a tag.

SunBlog更新:增加Gravatar的支持

gravatar feature demo:
今天对本Blog(代号"SunBlog")新增了一个功能:用户评论和gravatar的整合,也就是用户可通过关联自己在gravatar网站的Email获取到avatar,从而可显示自己的头像在评论中,这是大部分Blog应用(比如SubText,BlogEngine.NET)具有的功能(feature),故SunBlog也考虑进来,如此更强调用户的参与和交互,希望大家喜欢,给予更多的反馈...

DNN SQL 语句集粹

在DNN模块开发过程中,写存储过程可算是一个基本功,一开始你可以copy & paste, 但毕竟有些麻烦,每次都得去查找,如果你足够细心,不妨做个记录,这样省时省力,在此分享一下本人模块开发过程可能需要的SQL语句,比如如何添加字段,如何更新表结构,如何添加SQL函数,如何关联外键等等.

剖析DNN分页控件

不知道大家是否用过DNN核心自带的分页控件,我想如果用过的话,也许你已碰到类似我将要提到的问题,那就是该分页控件并非像我们所想的那样,利用经典的asp.net框架中的viewstate来响应(postback)用户的操作,它其实是利用一种更为简单的方式: 用url来维护页面参数,这就使得一旦页面回发(postback), 当前页面就会回滚到原始状态,对应的页面参数也会变成初始值,这对于我们来说无疑是痛苦的。也许你不是很清楚这种状况,不妨举个例子看看, 比如你当前页面的url为:http://localhost/dnndev/tabid/65/category/23/default.aspx, 你注意到url里边存在两个参数(tabid和category), 这时如果你在使用DNN核心自带的分页控件,那对应分页控件的页码也许是类似的链接http://localhost/dnndev/tabid/65/currentpage/4/default.aspx, 当你点击该页码时将会跳转到http://localhost/dnndev/tabid/65/currentpage/4/default.aspx,如此一来category/23这参数也随之丢失了。这样的情况在你是纯粹靠拼字符串来激发页面变化的时候更为明显。所以整个页面的URL里边参数都需要考虑如何维护,防止误操作。深入挖掘该分页控件的代码,你会发现参数维护主要是靠QuerystringParams这一属性来维护,一般维护代码如下:
 
  1.  If Not Request.Params("categoryid"Is Nothing Then  
  2.      m_sViewType = "category"  
  3.      m_oCateggory = CategoryController.GetCategory(CType(Request.Params("categoryid"), Integer))   
  4.   
  5.      _Querystring += "categoryid=" & Request.Params("categoryid").ToString()   
  6.  End If  
  7.   
  8.  If Not Request.Params("BlogDate"Is Nothing Then  
  9.      m_dBlogDate = CType(Date.Parse(Request.Params("BlogDate")), Date)   
  10.      _Querystring += "BlogDate=" & m_dBlogDate.ToString()   
  11.      If Not Request.Params("DateType"Is Nothing Then  
  12.          m_sViewType = Request.Params("DateType")   
  13.          _Querystring += "BlogDate=" & m_sViewType   
  14.      End If  
  15.  End If  
  16.     
  17. 'set the QuerystringParams property   
  18. ctlPagingControlBottom.QuerystringParams = Querystring  
我想你也应该猜到了,这其实也是一个拼字符串的过程,更让你难受的需要你考虑到整个页面url有可能包含的参数信息,对于同一页面多个模块这是无法知晓的。故这将是无可避免的Bugs.当然DNN分页控件并非一无是处,至少很好的支持SEO(搜索引擎),编程更简单些,故对于一个页面只有单个模块的话无疑是一种简单方便的选择,就拿本站点的SunBlog模块来说,因为一般页面就包含Blog相关模块,利用DNN分页控件无疑是明智的。不过个人觉得DNN分页控件有点粗糙,可定制性极差,最后独立出来开发一个更轻量级,优化版本(更简洁的HTML代码)的分页控件,它至少符合SunBlog模块的需求了,目前已在Codeplex.com开源http://www.codeplex.com/dnnsuntoolkit,有兴趣者不妨对照着DNN分页控件看看其中区别。使用方式跟DNN分页控件差别不大。
参考链接:
DNN Paging Control使用方法:
http://www.cto20.com/cto20/tabid/647/EntryId/46/DNN-Best-Kept-Secrets-Part-1-DNN-Paging-Control.aspx
DNN Paging Control的缺陷
http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/118/postid/96091/scope/posts/Default.aspx

New Recommedation Module Released ( v1.1 )

This is a standard dotnetnuke module which can be use to invite friend or tell friends about the website information. Those information may be useful for the users' friends. we can call it "Email Friend" or "Invite your friends" or something similiar one. Right now it support the template engine so you can utilize the token mechanism to implement some custom defined email message. Please visit the source code in codeplex.com: http://www.codeplex.com/Recommendation