Oxite分析之Skinning

change set:42944

download :http://oxite.codeplex.com/SourceControl/ListDownloadableCommits.aspx


Oxite中可以非常方便的切换皮肤(Skinning),并且前台皮肤(Site Skin)和后台皮肤(Admin Skin)都可以切换。Oxite的皮肤包括三部分:CSS + images, scripts and views。注意这个views就是MVC中的View部分,这样就带来更大的灵活性。这里提一下,Skin的设置会影响到ViewEngine在什么位置搜索View文件。官方也有关于Skinning的介绍,不太详细:http://oxite.codeplex.com/Wiki/View.aspx?title=Skinning

一、设置Skin

在Oxite管理后台的站点设置里可以设置前台和后台皮肤。进入后台点击"Settings"菜单下的"Site"子菜单,进入"Edit Site"页面:

222 

在Skins Path字段中设置存放各个Skin的总目录,默认值是/Skins。注意这个路径是虽然是绝对路径,但它是站点所在虚拟目录的根目录下的Skins目录,也就是说/Skins实际上对应的是~/Skins。

假设HomeController下的Index这个Action的View的搜索,
Skins Path 字段值不为空时并且Site Skin(或Admin Skin)为空时,将会搜索~/Skins/Views/Home/和~/Skins/Views/Shard/目录;如果搜索不到,将会搜索~/Views/Home/和~/Views/Shard/目录。

注意:目前Oxite版本尚未支持Scripts Path和Styles Path字段,也就是说你的设置将暂时不会有效果。我通过源码分析的,尚未测试设置过。

Site Skin是用来设置具体的Skin的,默认为空。这种情况下,可以回头看看我们分析Skins Path字段时所说的。我们如果直接把根目录的Styles、Scripts、Views这三个目录移到Skins目录下,站点将一切正常。

如果我们为Site Skin设定一个值的话,比如MySkin。在不移动官方源码的情况下,站点不会有任何变化;我们如果直接把根目录的Styles、Scripts、Views这三个目录移到Skins目录下,站点将仍然正常;如果我们在Skins目录下建立一个MySkin目录,把根目录的Styles、Scripts、Views这三个目录移到该目录下,站点将仍然仍然正常。为什么呢?原因是Site Skin设定一个值后,ViewEngine搜索Views时候,只是多了两个搜索路径。比如HomeController下的Index这个Action,将会首先搜索:~/Skins/MySkin/Views/Home/和~/Skins/MySkin/Views/Shard/,如果搜索不到,将会搜索~/Skins/Views/Home/和~/Skins/Views/Shard/目录;如果还是搜索不到,将会搜索~/Views/Home/和~/Views/Shard/目录。

另外,如果Skins Path 字段设置为空,Site Skin字段设置为MySkin。在这种情况下,View搜索的路径是这样的:
~/MySkin/Views/Home/ –> ~/MySkin/Views/Shard/ –> ~/Views/Home/ –> ~/Views/Shard/

Skins Path 字段和Site Skin字段是可以设置为更复杂的路径,我觉得完全没必要。参考Oxite默认的配置,Skins目录下放置各种Skins已经足够用了。

二、Oxite如何实现Skinning

ASP.NET MVC 2.0 预览版已经支持Area(其实之前老赵也提过解决方案),所以Oxite目前的这种方式我不知道是否会被替代,这里暂时不讨论了。

三、其他相关
Grouping Controllers with ASP.NET MVC
http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx

支持Area的ControllerFactory
http://www.cnblogs.com/JeffreyZhao/archive/2009/08/20/controller-factory-with-area-supporting.html

posted @ 2009-09-11 17:14  alby  阅读(2016)  评论(0编辑  收藏  举报