DNN皮肤生成机制剖析
来源:百度文库 编辑:神马文学网 时间:2024/04/28 00:19:25
以下探讨的问题,纯属个人经验总结,仅供参考!如有任何问题,欢迎共同讨论!更多相关话题,请访问:www.dnngo.com
DNN皮肤的生成机制:
在探讨这个机制之前,我们来看一下以下的一个生成过程:
解压文件:
==========================
开始处理zip文件: DNNGO
正在写文件: blog.htm
......
正在写文件: logo.jpg
正在写文件: top.jpg
结束处理 zip 文件: DNNGO.zip
==========================
初始化:
==========================
为皮肤/容器文件设置初始化值: Skins :: DNNGO
加载压缩包级别属性文件: Skin.xml
正在为ACTIONBUTTON标志加载皮肤对象 : Admin/Containers/ActionButton.ascx
正在为ACTIONS标志加载皮肤对象 : Admin/Containers/SolPartActions.ascx
正在为BANNER标志加载皮肤对象 : Admin/Skins/Banner.ascx
正在为BREADCRUMB标志加载皮肤对象 : Admin/Skins/BreadCrumb.ascx
正在为COPYRIGHT标志加载皮肤对象 : Admin/Skins/Copyright.ascx
正在为CURRENTDATE标志加载皮肤对象 : Admin/Skins/CurrentDate.ascx
正在为DOTNETNUKE标志加载皮肤对象 : Admin/Skins/DotNetNuke.ascx
正在为DROPDOWNACTIONS标志加载皮肤对象 : Admin/Containers/DropDownActions.ascx
正在为HELP标志加载皮肤对象 : Admin/Skins/Help.ascx
正在为HOSTNAME标志加载皮肤对象 : Admin/Skins/HostName.ascx
正在为ICON标志加载皮肤对象 : Admin/Containers/Icon.ascx
正在为LANGUAGE标志加载皮肤对象 : Admin/Skins/Language.ascx
正在为LINKACTIONS标志加载皮肤对象 : Admin/Containers/LinkActions.ascx
正在为LINKS标志加载皮肤对象 : Admin/Skins/Links.ascx
正在为LOGIN标志加载皮肤对象 : Admin/Skins/Login.ascx
正在为LOGO标志加载皮肤对象 : Admin/Skins/Logo.ascx
正在为MENU标志加载皮肤对象 : Admin/Skins/SolPartMenu.ascx
正在为PRINTMODULE标志加载皮肤对象 : Admin/Containers/PrintModule.ascx
正在为PRIVACY标志加载皮肤对象 : Admin/Skins/Privacy.ascx
正在为SEARCH标志加载皮肤对象 : Admin/Skins/Search.ascx
正在为SIGNIN标志加载皮肤对象 : Admin/Security/Signin.ascx
正在为SOLPARTACTIONS标志加载皮肤对象 : Admin/Containers/SolPartActions.ascx
正在为SOLPARTMENU标志加载皮肤对象 : Admin/Skins/SolPartMenu.ascx
正在为TERMS标志加载皮肤对象 : Admin/Skins/Terms.ascx
正在为TITLE标志加载皮肤对象 : Admin/Containers/Title.ascx
正在为TREEVIEW标志加载皮肤对象 : Admin/Skins/TreeViewMenu.ascx
正在为USER标志加载皮肤对象 : Admin/Skins/User.ascx
正在为VISIBILITY标志加载皮肤对象 : Admin/Containers/Visibility.ascx
==========================
把HTML皮肤转换成ASCX皮肤:
==========================
开始处理文件: blog.htm
处理标志: [LOGO]
标志是皮肤对象: Admin/Skins/Logo.ascx
标志没有在定义文件发现: [LOGO]
格式控制陈述:
处理标志: [BANNER]
标志是皮肤对象: Admin/Skins/Banner.ascx
标志没有在定义文件发现: [BANNER]
格式控制陈述:
处理标志: [MENU]
标志是皮肤对象: Admin/Skins/SolPartMenu.ascx
标志没有在定义文件发现: [MENU]
格式控制陈述:
处理标志: [USER]
标志是皮肤对象: Admin/Skins/User.ascx
标志没有在定义文件发现: [USER]
格式控制陈述:
处理标志: [LOGIN]
标志是皮肤对象: Admin/Skins/Login.ascx
标志没有在定义文件发现: [LOGIN]
格式控制陈述:
处理标志: [BREADCRUMB]
标志是皮肤对象: Admin/Skins/BreadCrumb.ascx
在属性文件发现标志: [BREADCRUMB]
格式化标志属性: Separator=" » "
格式化标志属性: RootLevel="0"
格式控制陈述:
处理标志: [COPYRIGHT]
标志是皮肤对象: Admin/Skins/Copyright.ascx
标志没有在定义文件发现: [COPYRIGHT]
格式控制陈述:
格式控制指令: <%@ Control language="vb" CodeBehind="~/admin/Skins/skin.vb" AutoEventWireup="false" Explicit="True"
Inherits="DotNetNuke.UI.Skins.Skin" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="LOGO" Src="~/Admin/Skins/Logo.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="BANNER" Src="~/Admin/Skins/Banner.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="MENU" Src="~/Admin/Skins/SolPartMenu.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="USER" Src="~/Admin/Skins/User.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="LOGIN" Src="~/Admin/Skins/Login.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="BREADCRUMB" Src="~/Admin/Skins/BreadCrumb.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="COPYRIGHT" Src="~/Admin/Skins/Copyright.ascx" %>
正在写文件: blog.ascx
文件处理结束: blog.htm
==========================
不作处理的文件:
==========================
开始处理文件: skin.css
正在写文件: skin.css
文件处理结束: skin.css
.....
开始处理文件: forum.ascx
正在写文件: forum.ascx
文件处理结束: forum.ascx
==========================
处理结束:
==========================
皮肤/容器文件处理结束: Skins :: DNNGO
==========================
从上面的处理流程,我们不难看出,皮肤引擎先把zip格式的皮肤包解压,然后检查skin.xml是否存在,存在的话,它会把skin.xml中定义的属性值,附加到相应的标志上,接下来,检查是否含有Html文件,有的话,皮肤引擎会把Html格式的皮肤转换成ASCX格式的皮肤,其余的文件只作简单的转存处理。
根据上面的分析,我们可以得出一些推论:
1、skin.xml文件相当于一个全局定义文件,定义各个标志的属性,但不必为每个用到的标志做定义,可以按需要进行定义,此处所做的定义,会应用到本皮肤包各个皮肤上。(提示,如需个性化某个皮肤,可以把生成的ASCX修改一下,具体做法是,找到使用该标志的地方,然后对该标志进行属性修改)
2、HTML转ASCX机制,首先,引擎会查找皮肤中出现的所有标志,并检验标志的身份,如果是皮肤对象的话,则给出应该标志的定义文件,然后在“全局变量”中为它查找对应的属性值,有的话,就附加到标志中,完成格式控制陈述。查找完成后,就开始文件的写操作,先写入格式化控制指令,然后写入皮肤代码,其中原标志已经被替换为带格式控制陈述的标志。
3、ASCX、CSS等文件只做简单地转存,不作处理。
DNN皮肤的生成机制:
在探讨这个机制之前,我们来看一下以下的一个生成过程:
解压文件:
==========================
开始处理zip文件: DNNGO
正在写文件: blog.htm
......
正在写文件: logo.jpg
正在写文件: top.jpg
结束处理 zip 文件: DNNGO.zip
==========================
初始化:
==========================
为皮肤/容器文件设置初始化值: Skins :: DNNGO
加载压缩包级别属性文件: Skin.xml
正在为ACTIONBUTTON标志加载皮肤对象 : Admin/Containers/ActionButton.ascx
正在为ACTIONS标志加载皮肤对象 : Admin/Containers/SolPartActions.ascx
正在为BANNER标志加载皮肤对象 : Admin/Skins/Banner.ascx
正在为BREADCRUMB标志加载皮肤对象 : Admin/Skins/BreadCrumb.ascx
正在为COPYRIGHT标志加载皮肤对象 : Admin/Skins/Copyright.ascx
正在为CURRENTDATE标志加载皮肤对象 : Admin/Skins/CurrentDate.ascx
正在为DOTNETNUKE标志加载皮肤对象 : Admin/Skins/DotNetNuke.ascx
正在为DROPDOWNACTIONS标志加载皮肤对象 : Admin/Containers/DropDownActions.ascx
正在为HELP标志加载皮肤对象 : Admin/Skins/Help.ascx
正在为HOSTNAME标志加载皮肤对象 : Admin/Skins/HostName.ascx
正在为ICON标志加载皮肤对象 : Admin/Containers/Icon.ascx
正在为LANGUAGE标志加载皮肤对象 : Admin/Skins/Language.ascx
正在为LINKACTIONS标志加载皮肤对象 : Admin/Containers/LinkActions.ascx
正在为LINKS标志加载皮肤对象 : Admin/Skins/Links.ascx
正在为LOGIN标志加载皮肤对象 : Admin/Skins/Login.ascx
正在为LOGO标志加载皮肤对象 : Admin/Skins/Logo.ascx
正在为MENU标志加载皮肤对象 : Admin/Skins/SolPartMenu.ascx
正在为PRINTMODULE标志加载皮肤对象 : Admin/Containers/PrintModule.ascx
正在为PRIVACY标志加载皮肤对象 : Admin/Skins/Privacy.ascx
正在为SEARCH标志加载皮肤对象 : Admin/Skins/Search.ascx
正在为SIGNIN标志加载皮肤对象 : Admin/Security/Signin.ascx
正在为SOLPARTACTIONS标志加载皮肤对象 : Admin/Containers/SolPartActions.ascx
正在为SOLPARTMENU标志加载皮肤对象 : Admin/Skins/SolPartMenu.ascx
正在为TERMS标志加载皮肤对象 : Admin/Skins/Terms.ascx
正在为TITLE标志加载皮肤对象 : Admin/Containers/Title.ascx
正在为TREEVIEW标志加载皮肤对象 : Admin/Skins/TreeViewMenu.ascx
正在为USER标志加载皮肤对象 : Admin/Skins/User.ascx
正在为VISIBILITY标志加载皮肤对象 : Admin/Containers/Visibility.ascx
==========================
把HTML皮肤转换成ASCX皮肤:
==========================
开始处理文件: blog.htm
处理标志: [LOGO]
标志是皮肤对象: Admin/Skins/Logo.ascx
标志没有在定义文件发现: [LOGO]
格式控制陈述:
处理标志: [BANNER]
标志是皮肤对象: Admin/Skins/Banner.ascx
标志没有在定义文件发现: [BANNER]
格式控制陈述:
处理标志: [MENU]
标志是皮肤对象: Admin/Skins/SolPartMenu.ascx
标志没有在定义文件发现: [MENU]
格式控制陈述:
处理标志: [USER]
标志是皮肤对象: Admin/Skins/User.ascx
标志没有在定义文件发现: [USER]
格式控制陈述:
处理标志: [LOGIN]
标志是皮肤对象: Admin/Skins/Login.ascx
标志没有在定义文件发现: [LOGIN]
格式控制陈述:
处理标志: [BREADCRUMB]
标志是皮肤对象: Admin/Skins/BreadCrumb.ascx
在属性文件发现标志: [BREADCRUMB]
格式化标志属性: Separator=" » "
格式化标志属性: RootLevel="0"
格式控制陈述:
处理标志: [COPYRIGHT]
标志是皮肤对象: Admin/Skins/Copyright.ascx
标志没有在定义文件发现: [COPYRIGHT]
格式控制陈述:
格式控制指令: <%@ Control language="vb" CodeBehind="~/admin/Skins/skin.vb" AutoEventWireup="false" Explicit="True"
Inherits="DotNetNuke.UI.Skins.Skin" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="LOGO" Src="~/Admin/Skins/Logo.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="BANNER" Src="~/Admin/Skins/Banner.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="MENU" Src="~/Admin/Skins/SolPartMenu.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="USER" Src="~/Admin/Skins/User.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="LOGIN" Src="~/Admin/Skins/Login.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="BREADCRUMB" Src="~/Admin/Skins/BreadCrumb.ascx" %>
正在格式化注册指令: <%@ Register TagPrefix="dnn" TagName="COPYRIGHT" Src="~/Admin/Skins/Copyright.ascx" %>
正在写文件: blog.ascx
文件处理结束: blog.htm
==========================
不作处理的文件:
==========================
开始处理文件: skin.css
正在写文件: skin.css
文件处理结束: skin.css
.....
开始处理文件: forum.ascx
正在写文件: forum.ascx
文件处理结束: forum.ascx
==========================
处理结束:
==========================
皮肤/容器文件处理结束: Skins :: DNNGO
==========================
从上面的处理流程,我们不难看出,皮肤引擎先把zip格式的皮肤包解压,然后检查skin.xml是否存在,存在的话,它会把skin.xml中定义的属性值,附加到相应的标志上,接下来,检查是否含有Html文件,有的话,皮肤引擎会把Html格式的皮肤转换成ASCX格式的皮肤,其余的文件只作简单的转存处理。
根据上面的分析,我们可以得出一些推论:
1、skin.xml文件相当于一个全局定义文件,定义各个标志的属性,但不必为每个用到的标志做定义,可以按需要进行定义,此处所做的定义,会应用到本皮肤包各个皮肤上。(提示,如需个性化某个皮肤,可以把生成的ASCX修改一下,具体做法是,找到使用该标志的地方,然后对该标志进行属性修改)
2、HTML转ASCX机制,首先,引擎会查找皮肤中出现的所有标志,并检验标志的身份,如果是皮肤对象的话,则给出应该标志的定义文件,然后在“全局变量”中为它查找对应的属性值,有的话,就附加到标志中,完成格式控制陈述。查找完成后,就开始文件的写操作,先写入格式化控制指令,然后写入皮肤代码,其中原标志已经被替换为带格式控制陈述的标志。
3、ASCX、CSS等文件只做简单地转存,不作处理。
DNN皮肤生成机制剖析
DNN皮肤生成机制剖析 - DNNGO - 博客园
DNN皮肤制作不完全指南
静电鱼&从心理角度剖析星座的防卫机制生成原理
DNN皮肤应用与制作常见问题
DNN页面生成引擎原理 - 阿干正谈 - 博客园
DNN皮肤应用与制作常见问题 - DNNGO- 博客园
剖析Jive的缓存机制
深度剖析消息反射机制
深度剖析消息反射机制
剖析Windows系统服务调用机制
抑通胀需改变基础货币生成机制
教师实践性知识及其生成机制研究 陈静静
DNN中搜索引擎原理
剖析.
memcached全面剖析–3.memcached的删除机制和发展方向 - idv2
DNN系统构架图 - m2land-专注DNN(DotNetNuke) - 博客园
DNN一步一步建网_1-6
...皮肤
[DNN学习所得]显示网站图标
DNN模块开发系列文章7篇
DNN4Free - Free DNN Portals > Sign Up Free!
什么是机制?机制是什么意思?
什么是机制?机制是什么意思?