最近在忙几个事,工作上做天河部落的升级改版,绕有兴致的做博客的个性化功能,以前我的博客也有几个样式模板,但是模块没有定制,昨天顺便就把我博客的个性化定制功能实现了,对于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代码内容,并同样可以设置显示位置等。其实在以前一个项目里实现过该功能,之所以没有在我博客加这个功能,那是因为如果我真在那里看到了一个漂亮的播放器,我会做成一个系统的模块,可以选择是否显示该模块,可能我的博客以后会添加更多的模块,暂不需要自定义模块。
我想请教你个问题;
你那个版式 是怎么实现的;
怎样变成3列 有变成两列
可以给我个思路吗;我现在正在做这个
我下了你的js看了;
看到你的发布的文档;你可以把现在保存状态的js发给我吗? 谢谢你;
378588579@qq.com