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

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
V
Visual Studio Blog
有赞技术团队
有赞技术团队
U
Unit 42
D
Docker
小众软件
小众软件
F
Full Disclosure
I
Intezer
Scott Helme
Scott Helme
P
Privacy International News Feed
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
B
Blog
Martin Fowler
Martin Fowler
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Spread Privacy
Spread Privacy
宝玉的分享
宝玉的分享
S
Security Affairs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
月光博客
月光博客
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
Schneier on Security
Schneier on Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Threat Research - Cisco Blogs
量子位
Hacker News - Newest:
Hacker News - Newest: "LLM"
H
Heimdal Security Blog
N
Netflix TechBlog - Medium
H
Hacker News: Front Page
P
Proofpoint News Feed
G
GRAHAM CLULEY
V
Vulnerabilities – Threatpost
S
Schneier on Security

博客园 - 游民一族

VR发展的最大障碍在于内容? 无法修改Form尺寸的解决方法 [ATL/ActiveX]全屏显示ActiveX控件 近期业余生活以及计划(持续更新) 远程控制之屏幕截取 小结 [C#]mouse_event模拟点击时坐标参数无效?! Javascript: IE中命名函数直接量的Bug? - 游民一族 - 博客园 ASP.NET AJAX Client Library: 更繁?更简? ASP.NET动态创建控件之绝境求生 喜讯,公司换宽屏液晶显示器了 分享:基于UDP协议实现可靠的数据传输 C#线程:只要任何一个线程在运行,程序就不退出?! 基于Web的仿WF工作流设计器 [ASP.NET]ASP.NET 2.0中Membership的UserID问题 [ASP.NET AJAX]谨记给UpdatePanel中动态添加的控件赋ID VS 2005 BUG: 新增JScript文件编码问题引起乱码? 过滤ASP.NET输出HTML中的无用空格 在JavaScript中实现命名空间 [C#]NHibernate处理多帐套问题
[ASP.NET]如何灵活定制皮肤/页面:布局设计器介绍
游民一族 · 2007-02-06 · via 博客园 - 游民一族

以前看过DotNetNuke 4(以下简称DNN)的部分源码,作为一个CMS它的实现无疑有很多值得借鉴的地方。个人比较注重页面的呈现部分,所以特别关注其中的换肤、布局等部分,虽然DNN的这方面的实现已经十分优秀,但是我认为还是有改进的地方的,这也是本文要介绍的主要内容:布局设计器!

那DNN在皮肤/布局方面到底有什么不好的呢?那就是,用户不能很方便地添加新的皮肤!要添加新的皮肤,只能是Web开发/设计人员设计添加新的用户控件(.ASCX,这是DNN皮肤的实现机制),并将相关的图片文件拷贝到Portals\*\Skins目录下,如果站点没有提供相关的上传功能的话,这项工作只能由管理员进行;而且修改起来也特别不方便,可能还需要重新上传。如果能够在线修改皮肤的布局和内容,那岂不是完美了么?!

为了达到以上目的,DNN那种将皮肤实现为“静态”的ascx形式显然不可取!大家知道,DNN的页面是通过将模块拖到指定皮肤上形成的,那么我们就模仿这种方式,就是说:皮肤是通过将模块拖放到一个空白页面形成的,这个空白页面已经由布局设计器拆分成特定的布局,如DNN内定的“三行,中间行分为三列”的标准布局(不知道怎么描述,大家能看懂么?我驾驭文笔的能力比较差的说!),当然,皮肤中应该留出一个或多个空白区域,让具体页面放置它们各自的内容。

如果理解了上面的描述的话,那么毫无疑问,第一步需要将空白页面拆成N个区域,然后才能往各个区域拖放模块形成皮肤。举个例子,我们将页面分成三行,然后往第一行和最后一行放置一个Html模块(看过DNN的人都应该知道这个模块的作用吧?!),然后编辑第一行的Html模块形成页头,编辑最后一行的Html模块形成页脚,哈哈,一个拥有页头、页脚,中间有个空白区域的皮肤就形成了!

目前我已经把布局编辑器封装成一个服务器端控件,利用ASP.NET 2.0引入的Callback特性,达到类似ajax的效果,演示截图如下:

结合布局设计器以及ASP.NET WebPart框架,我做了一个基本可用的例子,证明其可行性,下面是简单拆分成两列的效果(嘻嘻,好像丑了点,毕竟我不是美工,没有任何加工的嘛):

P.S. 以上均为个人学习研究结果,可能用于公司项目,不提供源码下载,不过实现也不复杂,想想我都能作,可见是多么简单啦,呵呵~~~

posted on 2007-02-06 09:22  游民一族  阅读(8747)  评论()    收藏  举报