dnn皮肤系统教材

dnn皮肤系统教材
2007年04月09日 星期一 09:50
在DotNetNuke中应用皮肤系统的能力出现在应用程序的版本2中,它是一个被期待已久的增强功能。皮肤系统是指应用程序能够通过其设置而改变外观的能力。这种能力将应用程序的逻辑和用户界面或对象提取分离开。正如你所了解到的,DotNetNuke使用了三层面向对象的设计模式,用户界面在其中单独占用一层。这就使使用皮肤系统变得可行,并且应用程序依赖传递给页面的参数可以呈现独特的外观。在本文档中我们将看看皮肤系统的出色之处,并为你提供工具以开始创建你自己设计的皮肤方案。

DotNetNuke使用模板来达到实施皮肤系统的目的,使用模板使我们能够将应用程序的外观和布局属性同将内容显示给用户所需要的应用程序逻辑分开。我们为实现这个功能研究了很多不同的方法,最终,我们开发出了一个皮肤解决方案,此解决方案实现了在创建DotNetNuke站点时让网页设计师和程序工程师独立工作。由此,我们可以更快地部署DotNetNuke门户网站,更重要的是,通过实现功能完备的门户网站和建设目标而降低了相关费用。

通过在用户界面文件中使用tokens和identifiers来代表你可以选择提供在页面上的功能(dynamic functionality)是大多数皮肤系统通常采用的方式。DotNetNuke皮肤解决方案同样也采用了这种技术---当处理页面时,该技术使用合适的皮肤对象或控件替代token来为你定义的token提供功能。当你安装你的皮肤方案到应用程序中去时,就会完成上面提到的处理过程,我们会在下面进行讨论。

DotNetNuke中的皮肤系统允许你使用你喜欢的编辑器来创建你自己的皮肤方案,这为你---作为皮肤开发人员提供非常大的灵活性—你只需要遵循创建皮肤方案的规则就行,而使用什么工具则取决于你自己。而你可以创建.ascx或.html文件的皮肤方案。创建那种类型的皮肤方案取决于你选择的编辑器以及你选择遵循的规则。允许你创建HTML或ASP.NET类型的皮肤方案是皮肤系统的刻意设计,以为皮肤方案的创建提供最大的灵活性并帮助建立起页面设计师和程序工程师之间的协作桥梁。DotNetNuke的核心开发团队认识到,基于HTML的开发人员多于ASP.NET的开发人员,因此允许使用HTML创建皮肤方案可以使更多的人利用DotNetNuke的皮肤系统功能而不需要学习新的技术,当然,学习如何将token放置在你的皮肤方案设计中除外。好了,你已经了解了一些皮肤系统为何如此架构的历史信息,现在让我们去看看皮肤系统的出色之处。

文件的组织
在你把你的皮肤方案安装到应用程序中之前,皮肤方案所包含的皮肤文件必须满足一定的规则。一旦满足了规则,你就可以使用DotNetNuke中的“文件管理员”上载一个包含你皮肤方案的,压缩的zip文件,而DotNetNuke则会转换你的皮肤文件,使之成为可用的门户皮肤。皮肤方案可以应用到门户的不同层面,依赖你的需要,可以应用到host层、Portal层、以及页面层。一旦你成功上载了皮肤方案,DotNetNuke将在Portals/_default/Skins目录下为皮肤方案文件创建一个目录。如果你查看DotNetNuke的文件结构的根结构,你将会注意到有一个Container的目录,你为皮肤创建的任何Container都将存放在这里。这些目录会在他们相应的皮肤ID中描述,而这些皮肤ID则用于唯一地确定在DotNetNuke中使用皮肤。这些设置都存放在一个皮肤表中,以使DotNetNuke在运行时间正确地确定装载什么皮肤。
页面的处理和皮肤的装载
DotNetNuke只使用一个页面来实现显示信息的功能,这个页面就是Default.aspx。这个页面是所有控件和皮肤元素的容器,DotNetNuke需要使用这些控件和皮肤元素来实现提交内容给门户用户的目的。你可以在Default.aspx页面中为其他的信息引用一个placeholder,因为Default.aspx页面的内容是非常基本的,如果你从IDE中查看页面的源代码就会明白。它包含一个需要装载之内容的placeholer,以及一些DotNetNuke使用的错误处理程序。当你看下面的代码,有一些更多的东西将会被“注射”在页面中,而不仅仅是页面的代码所显示的页面应有的外观。

<%@ Page CodeBehind="Default.aspx.vb" language="vb" AutoEventWireup="false"
Explicit="True" Inherits="DotNetNuke.Framework.CDefault" %>
<%@ Register TagPrefix="dnn" Namespace="DotNetNuke.Common.Controls"
Assembly="DotNetNuke" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
        <HEAD id="Head">
              <TITLE>
                    <%= Title %>
              </TITLE>
              <%= Comment %>
              <META NAME="DESCRIPTION" CONTENT="<%= Description %>">
              <META NAME="KEYWORDS" CONTENT="<%= KeyWords %>">
              <META NAME="COPYRIGHT" CONTENT="<%= Copyright %>">
              <META NAME="GENERATOR" CONTENT="<%= Generator %>">
              <META NAME="AUTHOR" CONTENT="<%= Author %>">
              <META NAME="RESOURCE-TYPE" CONTENT=" DOCUMENT">
              <META NAME="DISTRIBUTION" CONTENT=" GLOBAL">
              <META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
              <META NAME="REVISIT-AFTER" CONTENT="1 DAYS">
              <META NAME="RATING" CONTENT="GENERAL">
              <style id="StylePlaceholder" runat="server"></style>
              <asp:placeholder id="CSS" runat="server"></asp:placeholder>
              <asp:placeholder id="FAVICON" runat="server"></asp:placeholder>
              <script src="<%= Page.ResolveUrl("js/dnncore.js") %>"></script>
        </HEAD>
        <BODY ID="Body" runat="server" ONSCROLL="__dnn_bodyscroll()" BOTTOMMARGIN="0"
LEFTMARGIN="0"
              TOPMARGIN="0" RIGHTMARGIN="0" MARGINWIDTH="0" MARGINHEIGHT="0">
              <noscript></noscript>
              <dnn:Form id="Form" runat="server" ENCTYPE="multipart/form-data"
style="height:100%;>
                    <asp:Label ID="SkinError" Runat="server" CssClass="NormalRed"
Visible="False"></asp:Label>
                    <asp:placeholder id="SkinPlaceHolder" runat="server" />
                    <INPUT ID="ScrollTop" runat="server" NAME="ScrollTop"
TYPE="hidden">
                    <INPUT ID="__dnnVariable" runat="server" NAME="__dnnVariable"
TYPE="hidden">
              </dnn:Form>
        </BODY>
</HTML>

你一定想知道所有这一切是如何工作的?当一个URL被请求,同时当用户进入DotNetNuke,请求就被检查,并通过一个数据库表来确定一个合适的皮肤。一旦确定了适当的皮肤,基于皮肤方案的定义,用户自定义的控件就会被“注射”到页面。实现这个功能的逻辑则定义在Admin/Skins/skin.vb文件中。下面的代码显示确定皮肤并装载它的逻辑。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值