分享如何处理带有分隔符的字符串的一些小技巧, 希望可以给大家一些启示
Read the rest of entry »
在DNN模块开发过程中,写存储过程可算是一个基本功,一开始你可以copy & paste, 但毕竟有些麻烦,每次都得去查找,如果你足够细心,不妨做个记录,这样省时省力,在此分享一下本人模块开发过程可能需要的SQL语句,比如如何添加字段,如何更新表结构,如何添加SQL函数,如何关联外键等等.
Read the rest of entry »
不知道大家是否用过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这一属性来维护,一般维护代码如下:
- If Not Request.Params("categoryid") Is Nothing Then
- m_sViewType = "category"
- m_oCateggory = CategoryController.GetCategory(CType(Request.Params("categoryid"), Integer))
-
- _Querystring += "categoryid=" & Request.Params("categoryid").ToString()
- End If
-
- If Not Request.Params("BlogDate") Is Nothing Then
- m_dBlogDate = CType(Date.Parse(Request.Params("BlogDate")), Date)
- _Querystring += "BlogDate=" & m_dBlogDate.ToString()
- If Not Request.Params("DateType") Is Nothing Then
- m_sViewType = Request.Params("DateType")
- _Querystring += "BlogDate=" & m_sViewType
- End If
- End If
-
-
- ctlPagingControlBottom.QuerystringParams = Querystring
这段有些脱离DNN了, 因为新参与了一个RSS项目,故对DNN的关注和参与有些减少, 不过我月底即将回来, 还是拥抱DNN,研究开源 :)
在此分享一下在该RSS项目应用到的一个小插件'Color Picker', 这是一个颜色选择控件, 可应用了样式的编辑表单, 目前已在CodePlex.com上发布
Color Picker v1.1 Beta, 有兴趣者不妨看看, 该控件并非独创而是居于原有的控件修改, 增加了AutoPostback和相应的onColorChanged事件(类似于TextBox控件的onTextChangged事件), 它已在m2land开源的
DNNFlashImageRotator得到应用。
Color Picker Demo:

大家也许看了我之前的一篇文章讲述如何定制DNN登陆页面的文章:
如何定制登陆页面, 然后尝试新建一个页面测试一下, 最后也许误删了该页面的Account Login模块(登陆模块)而导致了你的站点无法登陆, 这时我们怎么回滚这些设置呢? 遗憾的是, DNN并没有对此类问题提供什么好的操作界面或解决方案, 最后还得我们这些DNN Fans(Developer)来挖掘问题的出路和解决方案. 我想大家第一想到方案应该就是直接暴力修改数据库了, 对, 我想在此能分享的也就是暴力解决方案, 其中的原理很简单, 因为DNN默认登陆Url一般可通过这样得到
http://yourwebsite/default.aspx?ctl=login (也是原始url, 没有任何Url Rewrite, 如果你深入研究会发现这一页面或是首页或是当前页面), 如果你按照我前边文章定制了登陆页面的话, 那无非就是Portal 的属性LoginTabId 修改为新的页面的TabID( 比如 100, 231), 这时当你点击登陆链接时DNN将根据站点设置跳转到对应的页面, 仔细研读下列代码可知其中奥秘:
- If PortalSettings.LoginTabId <> -1 And Request.QueryString("override") Is Nothing Then
-
- Response.Redirect(NavigateURL(PortalSettings.LoginTabId, "", "returnurl=" & ReturnUrl), True)
- Else
-
- If PortalSettings.HomeTabId <> -1 Then
- Response.Redirect(NavigateURL(PortalSettings.HomeTabId, "Login", "returnurl=" & ReturnUrl), True)
- Else
- Response.Redirect(NavigateURL(PortalSettings.ActiveTab.TabID, "Login", "returnurl=" & ReturnUrl), True)
- End If
- End If
- End If
好, 现在你应该也知道如何解决了吧, 有两种方式(都不是独创的, 直接Copy过来, 本着分享的原则, 详细请看相关链接):
1) 如果你有数据库权限, 那就执行这一SQL语句:
- Update Portals Set LoginTabId=NULL Where PortalId=xx /* xx代表你站点对应的PortalID, 一般是0 */
最后记得清一下缓存(重启IIS或"修改"Web.config或其他类似方式)
为了便于大家直接查找,在此简单汇总一下本人一直以来对DNN研究的相关文章。另外,大家如果有关于DNN方面的问题,也可以在这里提出,我将尽力为大家解答。
还有更多更多内容, 不妨关注一下本站,同时希望大家给予更多反馈, 我们会做得更多,而这一切的前提离不开社区的反馈和你们支持。 :)
SEO, 是Search Engine Optimization的缩写, 翻译过来是“搜索引擎优化", 直白说就是“针对搜索引擎所做的优化处理工作”。是一种利用搜索引擎的搜索规则来提高目的网站在有关搜索引擎( Google, Baidu, Live Search 等) 内提名的方式。它可以给你的网站带来更多的客户访问量和更高的点击率. 这无疑对于任何一个网站都是处于至高地位的策略. 今天在此将开辟一个专题来谈谈DNN里边的SEO解决方案
Read the rest of entry »
2008年7月27日, 这是一个DNN在中国值得纪念的日子, 这一天, 中国DNN联盟正式成立, 同时, 主题为"我与DNN共成长"的第一届团队活动聚会正式拉开了帷幕, 活动中间, 大家彼此讨论和交流DNN的心得及体会, 展望DNN的发展前景和未来的趋势走向. 我有幸在此聚会结识了不少DNN资深人士及其爱好者, 我想大家的目的都是一样的, 就是想为DNN在中国的推广尽一份力,一份心, 当然我们组织这一活动也是让DNN在国内得到更多的支持, 让更多人加入我们的社区, 共同创造一种学习交流的氛围, 让DNN真正名副其实的"开源". 在此期间, m2land全身心的组织这一活动, 包括发起, 宣传, 布置, 联络等等工作, 为此让我们谢谢m2land, 还有小艾,jeemoo等团队核心的协作和支持. 按照我们的初衷, 就是想通过线下的活动让大家有更多的机会互通有无, 为我们的DNN事业提供更多的机会, 对此我们需要包容所有人的目的和想法, 让大家都能在活动中得到自己需要的东西或达到自己的目标( 或学习 或交朋友 或合作等等). 我们会坚持自己, 让这样的交流活动持续下去, 越办越好, 鼓励更多的人加入我们.
最后我共享一下自己的演示PPT, 因为准备比较仓促, 之后稍微整理了一下, 希望对大家有帮助, 更多的资料我们会不断在论坛中共享给大家. ( 下载地址:
玩转DNN.zip )

经过一个月的屏蔽,世界最大的专业开源软件项目网站SourceForge重新可以正常访问,而此时离北京奥运会开幕仅仅只有两个星期,SourceForge被屏蔽了不多不少整整三十天。
SourceForge做为一个专业编程技术网站被屏蔽,令广大的程序员和开发工程师感到不满,因为中国的程序员下载开源软件项目变得非常困难了,而不得不寻找代理服务器才能下载SourceForge上面的代码,至今没有任何官方的消息证实为何屏蔽SourceForge,而一个月后,也没有官方解释为何解封SourceForge。
现在,令广大程序员欣慰的是,我们的SourceForge又可以访问了,中国的程序员应该为此感到欣慰,因为我们永远也不知道何时它将会再次消失。
不知你是否注意到没, 本Blog已添加一个新成员, 那就是相册模块, 作为传播信息和承载交流的平台, Blog本身就该给与更多的手段或方式去把信息展示给读者, 并增加与读者的交互, 而所谓"一图胜千字"的理念也应该得于体现, 故此相册模块也就是应运而生了, 主要是利用目前很火的silverlight技术来搭建(后续文章将分享如何在DNN整合silverlight, 如何开发silverlight模块等等, 敬请关注), 同时现在也正值DNN Open Force '08即将隆重登场, 该相册将重点展示一些关于大会的照片和相关DNN的图片, 希望你们也可以分享一下自己看到的, 觉得很有看头的DNN图片(如果有的话), :)
目前该模块还在测试阶段, 图片将陆续更新....
分享一下最近研究分页算法的心得,也就是发现一个比较有意思的算法,也许不是最优的,也不是最好,当然也不推荐使用,但是在此列举一下以博各位一哂...
Read the rest of entry »

PNG 是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图 形格式(Portable Network Graphic Format,PNG)这一名称来源于非官方的“PNG's Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可 存储多到16位的α通道数据.
Read the rest of entry »