首页logo
  •  

jonllen

金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。

个人档案

jonllen
心情闪存 | 给他留言
妮称:jonllen
来自:中国. 湖南. 湘潭
简述:金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。
博客日历

博客个性化定制功能

分类:Asp.Net

最近在忙几个事,工作上做天河部落的升级改版,绕有兴致的做博客的个性化功能,以前我的博客也有几个样式模板,但是模块没有定制,昨天顺便就把我博客的个性化定制功能实现了,对于Asp.Net的博客个性化定制功能的方法总结如下:

1.简单的切换css样式文件

这是我之前的博客切换风格的方法,很简单,只需要改变页面的一个css样式文件即可,通过换css样式文件页面也完全可给人耳目一新,但其页面的html结构并没有发生改变,所以就不可能从根本上实现博客个性化定制,换换皮肤而已。我之前是使用javascript来改变css文件路径的,有时候加载样式很慢的情况下,在切换样式的那一瞬间页面可能会出现“裸奔”,也就是没有任何样式,这一点IE处理得很好,因为IE内可以预载css样式,在更换css样式文件的时候它会先预载新的css样式文件,完成之后才会被附加到页面来,所有不会出现上面的“裸奔”情况。然而在表扬IE的时候又想起之前碰到IE7里面的一个潜规则:在使用javascript更换css样式文件的时候不会加载样式文件内联的@import url(..)样式。适应它潜规则的方法是:先指定一个空路径再设置为样式文件路径即可,如下:

document.getElementById('currSkin').href = '';
document.getElementById(
'currSkin').href = skinsrc;

2.切换博客的MasterPage.master母版页

假如你的博客是用Asp.Net母版页的话,并且博客前台页面都使用同一个母版页,那么你可以在所有Page基类的OnPreInit方法里更换MasterPage母版页以实现博客个性化功能。

protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);

//更换母版页
if (!string.IsNullOrEmpty(this.CurrentUser.Template.MasterPageSrc))
{
this.MasterPageFile = this.CurrentUser.Template.MasterPageSrc;
}
}

此种方法虽然可以最大限度的改变博客模板,甚至是每个模板内的html可截然不同,但它同样有很大制约。因为MasterPage母版页并不能当成是模板,MasterPage母版页里面可能还有一些需要处理的逻辑,所以每个MasterPage母版可能需要对应一个cs类,如果里面所有的控件都是一样的话可以使用同一个CodeFile文件。但单更换MasterPage母版页还并不能定制博客模块,比如设置博客某些模块的位置或是否显示等,则还需要使用下面的动态加载ascx控件模块。

3.动态加载ascx控件模块

基于Asp.Net的强大控件功能,可使用服务器控件动态加载用户控件,而每一个用户控件都对应一个模块,比如个人档案、日历等等,用户可以在后台定制这些模块是否显示,显示位置等。我的博客个性化功能是使用MasterPage母版页结合动态加载ascx控件模块,我所定制的模块都是在MasterPage母版页里动态加载的,因为相册和留言等内页同样也是应用了同一个MasterPage母版页,所以定制的模块同样应用于所有内页。我们可以把相册或留言也作为一个模块,只不过在相册页面里相册模块是固定会要加载的。另外我这里还有一个版面设置,它其实是每一个模块都有的几种页面布局,假如版面是左-中的话那其实是只加载用户设置在左栏和中栏的模块,同时隐藏掉右栏;同理版面左-中-右则加载左栏、中栏、右栏的模块,中-右则加载中栏、右栏的模块,同时隐藏掉左栏。每一个版面都应该配合css动态输出一个样式文件,以便适用该种版面的布局。

4.使用微软的WebParts个性化部件

早在学校的时候有研究过微软自带WebParts个性化部件,那时候觉得很牛B,可以拖来拖去自定义位置,还可以自定义设置一些样式属性。不过WebParts个性化部件还是有很大的局限性,就是必须使用他那套成员资格、配置文件、角色管理、个性化设置提供程序,sqlserver版的数据库可以直接使用aspnet_regsql.exe生成,但其他类型的数据库恐怕只有自己来实现他的Provide接口了,发这些功夫去研究实现还不如自己做一个。总之,此种实现方法的约束太大,不太适用与需求多变复杂的项目中。

目前我的博客个性化还缺一个功能,那就是自定义添加一个模块,就好比说我在那里看到了一个很漂亮的播放器,这时候我就可以自定义添加一个我的音乐盒模块,里面贴播放器的html代码内容,并同样可以设置显示位置等。其实在以前一个项目里实现过该功能,之所以没有在我博客加这个功能,那是因为如果我真在那里看到了一个漂亮的播放器,我会做成一个系统的模块,可以选择是否显示该模块,可能我的博客以后会添加更多的模块,暂不需要自定义模块。

标签:Asp.Net
  • posted@ 2010-03-16 23:24
  • update@
  • 阅读(12791)
  • 评论(4)

相关文章

评论
1楼 文夕 2010-03-17 14:16:39
啊,现在这个很好看啊~ 我也想定制下,可是自己做不来……
回复:呵呵,还好拉~主要是要有好的创意设计,程序其实很简单。(2010-03-17 19:34:49)
2楼 ximesss 2010-04-07 14:26:58
你好 ! 看了你的东西觉得你做的很好
我想请教你个问题;
你那个版式 是怎么实现的;
怎样变成3列 有变成两列
可以给我个思路吗;我现在正在做这个
回复:你好!我是用的Asp.Net服务器控件,每一列就是一个服务器控件的容器,所以后台很容易控制是否显示该列,以及动态加载列容器里所有的用户控件模块。(2010-04-07 20:16:17)
3楼 ximesss 2010-04-08 09:00:11
谢谢你的回复;
我下了你的js看了;
看到你的发布的文档;你可以把现在保存状态的js发给我吗? 谢谢你;
回复:保存状态的js在我的博客个性化定制(2)-实现类似iGoogle首页功能一文.(2010-04-08 13:03:39)
4楼 xx 2011-09-06 21:57:42
我也在做这个 就不知道要怎么把它保存下来 能发个DEMO给我吗
378588579@qq.com
回复:参考我的博客首页看下~(2011-09-06 23:24:05)
发表评论
*必填
回复通知我
*必填

博文推荐