﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Baldwin's DNN</title>
    <description>在此研究DNN的所有相关课题，希望给DNN在中国的广为人知贡献一点绵薄之力....</description>
    <link>http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/blogid/1/Default.aspx</link>
    <language>zh-CN</language>
    <managingEditor>dnnsun@gmail.com</managingEditor>
    <webMaster>dnnsun@gmail.com</webMaster>
    <pubDate>Wed, 07 Jan 2009 11:40:58 GMT</pubDate>
    <lastBuildDate>Wed, 07 Jan 2009 11:40:58 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>SunBlog RSS Generator Version 2.1.0.0</generator>
    <item>
      <title>DNN登陆注册链接小变身(Skin Object定制开发)</title>
      <description>&lt;div style="text-indent: 1em"&gt;上一篇文章简单解析了DNN多语言解决方案,其中提到了一个皮肤级别的本地化支持.这篇文章接着简单分析如何定制开发自己的皮肤对象(在dnn称之为Skin Objects),不妨来看看我们如何给DNN默认的登陆注册链接皮肤对象做个小变身.首先还是先描述一下需求,例如有客户需要在设计皮肤时可以在登陆注册这两个链接增加一个小图象提示,起到修饰美观的作用,最终效果如图:&lt;/div&gt;
&lt;div&gt;&lt;img height="37" alt="" width="236" border="0" src="http://www.dnnsun.com/Portals/0/Blog/login_skinobject.png" /&gt;&lt;/div&gt;
&lt;div&gt;如何开发呢?其实对我来说,开发DNN的原则就是如何节省代码量,同时可以让DNN物尽所用,但又不能影响以后的升级.我想这个理念在前几篇文章都阐述得淋漓尽致(比如&lt;a target="_blank" href="http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/BlogID/1/EntryID/24/Default.aspx"&gt;&lt;strong&gt;浅谈如何做到dnn物尽所用(二)&lt;/strong&gt;&lt;/a&gt;, &lt;a target="_blank" href="http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/BlogID/1/EntryID/22/Default.aspx"&gt;&lt;strong&gt;浅谈如何做到dnn物尽所用&lt;/strong&gt;&lt;/a&gt;).有兴趣者不妨回头看看,也许你也会得到些许提示的.回到正题,首先我想到就是利用原有的登陆注册这两个链接皮肤对象,再结合DNN自带的CommandButton(文章"&lt;a target="_blank" href="http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/BlogID/1/EntryID/25/Default.aspx"&gt;&lt;strong&gt;再谈dnn的物尽所用(三)&lt;/strong&gt;&lt;/a&gt;"对此有所解析)这一用户控件就可以实现我们的需求了.那我们就开始吧,还是我之前提到开发皮肤对象的步骤:&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;1) &lt;/strong&gt;在网站根目录下的admin/Skins文件夹里创建一个UserControl,比如现在新增dnnsunUser.ascx和dnnsunLogin.ascx(请注意该文件夹下的代码不需要重新编译,如果你是以站点形式发布的).&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;2)&lt;/strong&gt; 创建对应的资源文件(dnnsunUser.ascx.resx, dnnsunUser.ascx.zh-CN.resx及其dnnsunLogin.ascx.resx,ascx.resx, dnnsunLogin.ascx.zh-CN.resx)&lt;/div&gt;
&lt;div&gt;其中上述步骤你可以直接拷贝默认的登陆注册链接皮肤对象,然后重命名即可.接下来就是替代我们即将加入的CommandButton,在页面中注册并添加实例:&lt;/div&gt;
&lt;fieldset&gt;&lt;legend style="color: #000; text-indent: 0em"&gt;dnnsunLogin.ascx&lt;/legend&gt;
&lt;div style="margin: 5px"&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; background: yellow"&gt;&lt;%&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue"&gt;@&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt; &lt;SPAN style="COLOR: #a31515"&gt;Register&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;TagPrefix&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="dnn"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Assembly&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="DotNetNuke"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Namespace&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="DotNetNuke.UI.WebControls"&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND: yellow"&gt;%&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;dnn&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;CommandButton&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="cmdLogin"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;CssClass&lt;/span&gt;&lt;span style="color: blue"&gt;="SkinObject"&lt;/span&gt; &lt;span style="color: red"&gt;CausesValidation&lt;/span&gt;&lt;span style="color: blue"&gt;="false"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/fieldset&gt;
&lt;div&gt;或&lt;/div&gt;
&lt;fieldset&gt;&lt;legend style="color: #000; text-indent: 0em"&gt;dnnsunUser.ascx&lt;/legend&gt;
&lt;div style="margin: 5px"&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; background: yellow"&gt;&lt;%&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue"&gt;@&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt; &lt;SPAN style="COLOR: #a31515"&gt;Register&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;TagPrefix&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="dnn"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Assembly&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="DotNetNuke"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Namespace&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="DotNetNuke.UI.WebControls"&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND: yellow"&gt;%&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;dnn&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;CommandButton&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="cmdRegister"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;CssClass&lt;/span&gt;&lt;span style="color: blue"&gt;="SkinObject"&lt;/span&gt; &lt;span style="color: red"&gt;CausesValidation&lt;/span&gt;&lt;span style="color: blue"&gt;="false"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/fieldset&gt;
&lt;div&gt;接下来就是修改默认的属性及其Page_Load事件,以达到我们的需求,具体实现我就不细说,大家可以下载来看看,逻辑还是原来的逻辑,修改只是一些细微之处,需要注意的现在我们增加了一个属性ImageUrl以满足我们的需求.在该属性中你只要设置当前皮肤的图象路径,比如:&lt;/div&gt;
&lt;fieldset&gt;&lt;legend style="color: #000; text-indent: 0em"&gt;YourSkin.ascx&lt;/legend&gt;
&lt;div style="margin: 5px"&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; background: yellow"&gt;&lt;%&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue"&gt;@&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt; &lt;SPAN style="COLOR: #a31515"&gt;Register&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;TagPrefix&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="dnn"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;TagName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="DNNSUNLOGIN"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Src&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="~/Admin/Skins/dnnsunLogin.ascx"&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND: yellow"&gt;%&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; background: yellow"&gt;&lt;%&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue"&gt;@&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt; &lt;SPAN style="COLOR: #a31515"&gt;Register&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;TagPrefix&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="dnn"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;TagName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="DNNSUNNAV"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Src&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="~/Admin/Skins/dnnsunNav.ascx"&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND: yellow"&gt;%&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;dnn&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;DNNSUNUSER&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="dnnUSER"&lt;/span&gt; &lt;span style="color: red"&gt;ImageUrl&lt;/span&gt;&lt;span style="color: blue"&gt;="register.gif"/&amp;gt;&lt;/span&gt;&lt;span style="color: red"&gt;&amp;#160;&amp;#160;&lt;/span&gt;|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: red"&gt;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;dnn&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;DNNSUNLOGIN&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="dnnLOGIN"&lt;/span&gt; &lt;span style="color: red"&gt;ImageUrl&lt;/span&gt;&lt;span style="color: blue"&gt;="login.gif"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/fieldset&gt;
&lt;div&gt;回过头来看代码如何实现的,你会比较清晰思路,那就是在Page_Load中获取当前皮肤的目录然后合并文件路径,我想大家一看代码就一清二楚了:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div class="dp-highlighter" id="vb"&gt;
&lt;div class="bar"&gt;&amp;#160;&lt;/div&gt;
&lt;ol class="dp-vb"&gt;
    &lt;li class="alt"&gt;&lt;span&gt;&lt;span class="keyword"&gt;If&lt;/span&gt;&lt;span&gt;&amp;#160;&lt;/span&gt;&lt;span class="keyword"&gt;Not&lt;/span&gt;&lt;span&gt;&amp;#160;&lt;/span&gt;&lt;span class="keyword"&gt;String&lt;/span&gt;&lt;span&gt;.IsNullOrEmpty(ImageUrl)&amp;#160;&lt;/span&gt;&lt;span class="keyword"&gt;Then&lt;/span&gt;&lt;span&gt;&amp;#160;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li class=""&gt;&lt;span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;cmdRegister.ImageUrl&amp;#160;=&amp;#160;PortalSettings.ActiveTab.SkinPath&amp;#160;&amp;amp;&amp;#160;ImageUrl &amp;#160;&amp;#160;&lt;/span&gt;&lt;/li&gt;
    &lt;li class="alt"&gt;&lt;span class="keyword"&gt;End&lt;/span&gt;&lt;span&gt;&amp;#160;&lt;/span&gt;&lt;span class="keyword"&gt;If&lt;/span&gt;&lt;span&gt;&amp;#160;&amp;#160;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;link href="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/plugins/highlighter/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css" type="text/css" rel="stylesheet" /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;需要注意的是资源文件定义的键值对,如果你需要定制自己的提示信息,不妨打开对应的资源文件修改其中的定义.比如:&lt;/div&gt;
&lt;div&gt;&lt;font color="#008080"&gt;&lt;strong&gt;WelcomeInfo.Text -- Welcome to dnnsun,{0}&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;你可以修改成:&lt;/div&gt;
&lt;div&gt;&lt;font color="#008080"&gt;&lt;strong&gt;WelcomeInfo.Text -- Hi,{0} you are login incurrently!&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;这些都是很方便的,^_^&lt;br /&gt;
最后一点需要提的是你可能需要在skin.css定义以下类似样式,让提示图片跟文字对齐:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div class="dp-highlighter" id="css"&gt;
&lt;div class="bar"&gt;&amp;#160;&lt;/div&gt;
&lt;ol class="dp-css"&gt;
    &lt;li class="alt"&gt;&lt;span&gt;&lt;span class="comment"&gt;/*&amp;#160;For&amp;#160;The&amp;#160;Login&amp;#160;and&amp;#160;Register&amp;#160;Link&amp;#160;*/&lt;/span&gt;&lt;span&gt;&amp;#160;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li class=""&gt;&lt;span&gt;.SkinObject&amp;#160;input&amp;#160;{&lt;/span&gt;&lt;span class="keyword"&gt;vertical-align&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class="value"&gt;bottom&lt;/span&gt;&lt;span&gt;;}&amp;#160;&amp;#160;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;就像我之前文章提到那样,定制开发自己的皮肤对象最大的优势就是满足定制的需求和支持本地化.这两个控件当然也不例外,本网站就是应用这些控件部分实现了多语言机制!&lt;br /&gt;
你可以从这里获取到这些皮肤对象,&lt;a target="_blank" href="http://www.dnnsun.com/Portals/0/Download/dnnsunLoginAndUser_SkinObjects.zip"&gt;&lt;img height="46" alt="" width="38" align="absBottom" border="0" src="http://www.dnnsun.com/Portals/0/Blog/Downloaded.gif" /&gt; &lt;font color="#800000" size="3"&gt;dnnsunUser and dnnsunLogin Skin-Objects&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
安装步骤如下:&lt;br /&gt;
&lt;strong&gt;1) &amp;#160;&lt;/strong&gt;解压缩zip文件,拷贝dnnsunUser.ascx,dnnsunUser.ascx.vb,dnnsunUser.xml和dnnsunLogin.ascx,dnnsunLogin.ascx.vb,dnnsunLogin.xml到站点根目录下的admin/Skins&lt;br /&gt;
&lt;strong&gt;2)&amp;#160;&lt;/strong&gt; 拷贝dnnsunLogin.ascx.resx,dnnsunLogin.ascx.zh-CN.resx和dnnsunLogin.ascx.resx,dnnsunLogin.ascx.zh-CN.resx到站点根目录下的admin/Skins/App_LocalResources&lt;br /&gt;
使用方法上边已提到,在此就不再累赘了.&lt;/div&gt;
&lt;div&gt;&lt;font color="#339966"&gt;&lt;strong&gt;相关链接:&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#339966"&gt;&lt;strong&gt;&lt;a target="_blank" href="http://seablick.com/blog/articletype/articleview/articleid/92.aspx"&gt;Fixing the DNN Breadcrumb Skin Object&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;</description>
      <link>http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/entryid/37/Default.aspx</link>
      <author>dnnsun@gmail.com</author>
      <comments>http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/entryid/37/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/entryid/37/Default.aspx</guid>
      <pubDate>Thu, 15 May 2008 09:50:01 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.dnnsun.com/DesktopModules/SunBlog/Trackback.aspx?id=37</trackback:ping>
    </item>
  </channel>
</rss>