惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News - Newest:
Hacker News - Newest: "LLM"
U
Unit 42
月光博客
月光博客
T
The Blog of Author Tim Ferriss
Jina AI
Jina AI
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
美团技术团队
D
Docker
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
The Cloudflare Blog
博客园 - 叶小钗
M
MIT News - Artificial intelligence
AI
AI
Security Archives - TechRepublic
Security Archives - TechRepublic
The Register - Security
The Register - Security
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
宝玉的分享
宝玉的分享
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Security Latest
Security Latest
Recorded Future
Recorded Future
Cloudbric
Cloudbric
K
Kaspersky official blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Visual Studio Blog
Apple Machine Learning Research
Apple Machine Learning Research
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园_首页
T
Threat Research - Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Last Week in AI
Last Week in AI
I
Intezer
The Hacker News
The Hacker News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hacker News: Front Page
Attack and Defense Labs
Attack and Defense Labs
MongoDB | Blog
MongoDB | Blog
O
OpenAI News
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
Project Zero
Project Zero

博客园 - 如风

简述DNN版本升级机制及升级失败后的处理 DNN4.5新特性:个性化客户端 DNN重要变革:性能、易用、友好一个都不能少 DNN模块使用指南之News Feeds (RSS) 模块 DNN新闻管理模块使用指南(版本:1.01.03) DNN皮肤制作-谁动了我的密码? DNN3.3/4.3升级可能出现的问题及解决方法 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2) 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(1) DNN 3.3/4.3 英文版本终于发布了! DNN配置之邮箱设置 DNN技巧之IP访问DNN DNN模块之自助生成web.config DNN皮肤制作不完全指南 DNN皮肤应用与制作常见问题 DNN完全配置之“主机设置” asp.net网页程序中的“公共变量”-ViewState GridView 控件使用不完全指南!(续一) GridView 控件使用不完全指南!
DNN皮肤生成机制剖析
如风 · 2006-04-20 · via 博客园 - 如风

  

以下探讨的问题,纯属个人经验总结,仅供参考!如有任何问题,欢迎共同讨论!更多相关话题,请访问: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]
  格式控制陈述: <dnn:LOGO runat="server" id="dnnLOGO" />
  处理标志: [BANNER]
  标志是皮肤对象: Admin/Skins/Banner.ascx
  标志没有在定义文件发现: [BANNER]
  格式控制陈述: <dnn:BANNER runat="server" id="dnnBANNER" />
  处理标志: [MENU]
  标志是皮肤对象: Admin/Skins/SolPartMenu.ascx
  标志没有在定义文件发现: [MENU]
  格式控制陈述: <dnn:MENU runat="server" id="dnnMENU" />
  处理标志: [USER]
  标志是皮肤对象: Admin/Skins/User.ascx
  标志没有在定义文件发现: [USER]
  格式控制陈述: <dnn:USER runat="server" id="dnnUSER" />
  处理标志: [LOGIN]
  标志是皮肤对象: Admin/Skins/Login.ascx
  标志没有在定义文件发现: [LOGIN]
  格式控制陈述: <dnn:LOGIN runat="server" id="dnnLOGIN" />
  处理标志: [BREADCRUMB]
  标志是皮肤对象: Admin/Skins/BreadCrumb.ascx
  在属性文件发现标志: [BREADCRUMB]
  格式化标志属性: Separator=" » "
  格式化标志属性: RootLevel="0"
  格式控制陈述: <dnn:BREADCRUMB runat="server" id="dnnBREADCRUMB" Separator=" » " RootLevel="0" />
  处理标志: [COPYRIGHT]
  标志是皮肤对象: Admin/Skins/Copyright.ascx
  标志没有在定义文件发现: [COPYRIGHT]
  格式控制陈述: <dnn:COPYRIGHT runat="server" id="dnnCOPYRIGHT" />
  格式控制指令: <%@ 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等文件只做简单地转存,不作处理。