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作为我们核心的系统机制,更多相关信息...

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函数,如何关联外键等等.

Web.config中注册用户控件和自定义控件

本文为转载,应该是某一开发人员翻译鼎鼎大名的scottgu的某一个帖子而来,我也找不到初始翻译者的链接,如果知道请告之,谢谢。其实这也算是我最近在开发facebook application时注意到的技巧(诀窍),在此分享之。

剖析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

Color Picker v1.1 Beta发布

Color Picker
这段有些脱离DNN了, 因为新参与了一个RSS项目,故对DNN的关注和参与有些减少, 不过我月底即将回来, 还是拥抱DNN,研究开源 :)
在此分享一下在该RSS项目应用到的一个小插件'Color Picker', 这是一个颜色选择控件, 可应用了样式的编辑表单, 目前已在CodePlex.com上发布Color Picker v1.1 Beta, 有兴趣者不妨看看, 该控件并非独创而是居于原有的控件修改, 增加了AutoPostback和相应的onColorChanged事件(类似于TextBox控件的onTextChangged事件), 它已在m2land开源的DNNFlashImageRotator得到应用。
Color Picker Demo:
相关链接:
ASP.NET Color Picker Web Server Control(http://www.codeproject.com/KB/custom-controls/WS_ColorPicker.aspx)
免费的Asp.net ColorPicker(http://www.cnblogs.com/m2land/archive/2008/09/08/1280708.html)
DNNFlashImageRotator(http://www.codeplex.com/DNNFIR)

"暴力"解决DNN无法登陆的问题

大家也许看了我之前的一篇文章讲述如何定制DNN登陆页面的文章: 如何定制登陆页面,  然后尝试新建一个页面测试一下, 最后也许误删了该页面的Account Login模块(登陆模块)而导致了你的站点无法登陆, 这时我们怎么回滚这些设置呢? 遗憾的是, DNN并没有对此类问题提供什么好的操作界面或解决方案, 最后还得我们这些DNN Fans(Developer)来挖掘问题的出路和解决方案. 我想大家第一想到方案应该就是直接暴力修改数据库了, 对, 我想在此能分享的也就是暴力解决方案, 其中的原理很简单, 因为DNN默认登陆Url一般可通过这样得到http://yourwebsite/default.aspx?ctl=login (也是原始url, 没有任何Url Rewrite, 如果你深入研究会发现这一页面或是首页或是当前页面), 如果你按照我前边文章定制了登陆页面的话, 那无非就是Portal 的属性LoginTabId 修改为新的页面的TabID( 比如 100, 231), 这时当你点击登陆链接时DNN将根据站点设置跳转到对应的页面, 仔细研读下列代码可知其中奥秘:
 
  1. If PortalSettings.LoginTabId <> -1 And Request.QueryString("override"Is Nothing Then  
  2.         ' user defined tab   
  3.         Response.Redirect(NavigateURL(PortalSettings.LoginTabId, """returnurl=" & ReturnUrl), True)   
  4. Else  
  5.         ' portal tab   
  6.         If PortalSettings.HomeTabId <> -1 Then  
  7.             Response.Redirect(NavigateURL(PortalSettings.HomeTabId, "Login""returnurl=" & ReturnUrl), True)   
  8.         Else  
  9.             Response.Redirect(NavigateURL(PortalSettings.ActiveTab.TabID, "Login""returnurl=" & ReturnUrl), True)   
  10.         End If  
  11.     End If  
  12. End If  
好, 现在你应该也知道如何解决了吧, 有两种方式(都不是独创的, 直接Copy过来, 本着分享的原则, 详细请看相关链接):
1) 如果你有数据库权限, 那就执行这一SQL语句:
 
  1. Update Portals Set LoginTabId=NULL Where PortalId=xx /* xx代表你站点对应的PortalID, 一般是0 */  
最后记得清一下缓存(重启IIS或"修改"Web.config或其他类似方式)
2) 下载这一压缩包(OpenSesame.zip), 解压到站点根目录下, 然后通过Url访问这一文件( http://yourwebsite/OpenSesame.aspx )将自动更新Portal的LoginTabID为null, 从而达到回滚原始设置的目的, 最后记得把这一文件删除了 :) 

本站最新文章索引

为了便于大家直接查找,在此简单汇总一下本人一直以来对DNN研究的相关文章。另外,大家如果有关于DNN方面的问题,也可以在这里提出,我将尽力为大家解答。
第一部分为DNN模块方面, 主要分享一些在DNN模块需要注意的地方,比如如何利用DNN API,优化开发过程,也就是本人一直宣扬的让DNN“物尽所用”的原则:
1 ) DNN核心API简述
2 ) DNN模块开发之利器篇:七种武器
3 ) 开发DNN模块之Utility
4 ) DNN模块开发应用Ajax之Utility
5 ) 一些DNN须知的技巧
6 ) DNN特性之IMC
7 ) DNN Object Hydrator -- CBO解析
8 ) 王者归来—再谈CBO
9 ) 解析DNN新生宠儿DAL
10 ) 解除DNN的传参枷锁
11 ) 在DNN中处理回车键事件
12 ) 一些关于DNN的FAQs(适合New DNNer)
第二部分为DNN皮肤设计, 主要分享DNN皮肤这一概念背后的一些想法及其由此带来的性能优化问题,希望真正做到扬长避短, 同时也稍微涉及到一下在DNN如何设计专业的,符合标准的,纯CSS的皮肤等话题, 有兴趣者不妨参考参考。
1 ) DNN默认核心CSS继承关系解析
2 ) DNN Style Sheet简要总结
3 ) 解析DNN皮肤级别的doctype声明
4 ) DNN登陆注册链接小变身(Skin Object定制开发)
5 ) 展望DNN皮肤前景及其推荐一些皮肤资源
6 ) DNN Skin旅程之琐碎杂想
第三部分为DNN优化专题, 主要分享一些能提升DNN加载速度,优化DNN本身的架构等经验,同时希望大家能借此对DNN有更一步的深入了解, 因为当你在使用某一样产品时,在知道优势时也不妨多关注存在的缺陷和局限,这样你才能规避风险,找到合适的解决方案。
1 ) 你的dnn站点慢了么?
2 ) 如何在DNN创建类IGoogle效果的模块
3 ) 解析DNN新生宠儿DAL
第三部分为DNN最新资讯, 主要分享最新的DNN新闻资讯(比如最近即将发布的Cambrian版本的DNN 5.0)及其本站的一些更新,其中包括中国DNN联盟的最新活动等等.
1 ) Cambrian和Open Force '08专题(不断更新中,敬请关注) 
2 ) 中国DNN联盟正式成立
还有更多更多内容, 不妨关注一下本站,同时希望大家给予更多反馈, 我们会做得更多,而这一切的前提离不开社区的反馈和你们支持。 :)
最后分享一下我一直以来关注DNN社区所收集的Blog站点,其中包括一些很牛的DNN Fans对DNN的独到见解,还有一些就是DNN官方核心团队成员自己的Blog,毋庸置疑, 其所写的文章或随笔都是很有含金量的.很显然,整个关于DNN内容的社区在不断的壮大(相关文章:DNN Content: The growth of community content about Dotnetnuke ),希望在我们中国也应该不甘落后,奋起直追,也算是奥运期间对奥运精神的借鉴和弘扬吧. (资源下载:DNN Blogs链接)

DNN SEO专题

SEO, 是Search Engine Optimization的缩写, 翻译过来是“搜索引擎优化", 直白说就是“针对搜索引擎所做的优化处理工作”。是一种利用搜索引擎的搜索规则来提高目的网站在有关搜索引擎( Google, Baidu, Live Search 等) 内提名的方式。它可以给你的网站带来更多的客户访问量和更高的点击率.  这无疑对于任何一个网站都是处于至高地位的策略.  今天在此将开辟一个专题来谈谈DNN里边的SEO解决方案