Posted on 2007-06-25 08:23
喳喳鸟 阅读(3672)
评论(41) 编辑 收藏 网摘 所属分类:
论坛开发
现在很多程序为了追求界面的可定制,都提供了模板功能。用户可以选择自己喜欢的界面。模板的实现方法很多,如何找到一个克定制性强且高效率,基本不影响性能的方法呢?
我先例举几种都被使用过的方法
1、css控制
准确的说这种方法不算模板了,就是html是固定的,但提供了多个css文件,完全依赖css来控制背景图片、图片或者表格和层的样式。这个方法的实现我就不说了,非常简单,只要给不同的用户链接不同的css文件就可以了
优点:对性能完全没有影响
缺点:有局限性,不能改动页面布局
2、读取模板文件,把标识符替换为内容并输出
可以使用多个文件夹,每个文件夹都是一套模板,每个文件夹里都有文件名一样的html文件。但他们的内容是不一样的。当需要显示页面时,服务器端的程序根据用户的选择,去读取相应的模板文件夹里的文件内容,然后替换模板里的一些标识符(例如 $subject 被替换为文章标题,$content 被替换为文章内容),最后输出。当然我主要只是阐述原理,实际上的实现比这要复杂一些,包括缓存的处理,否则每次去读取.html模板文件性能很差。
优点:模板灵活程度很高,可以随便改动页面布局
缺点:即使对读取模板使用缓存,也仍然影响性能。因为替换标识符的性能显然也好不到哪里去。同时,模板里只能使用标识符,不能直接调用.cs代码文件中的任何变量和方法。
3、动态载入.ascx用户控件
这是cs一直采用的做法,受cs影响,也是国内很多人采用的做法。此做法也可以使用多个文件夹,也是每个文件夹一套模板。只是模板文件名不是.html而是.ascx。当需要显示页面时,服务器端的程序根据用户的选择,直接使用 LoadControl() 方法来载入.ascx文件。
优点:模板灵活程度很高,可以随便改动页面布局,可以直接调用.cs代码文件中的变量和方法
缺点:影响性能,且模板可读性不高,因为模板里不是使用类似$subject这样的标识符,而直接使用了代码快(比如<%=subject%>)
4、读取模板文件,不替换标识符,直接生成一个aspx文件供系统使用
对用户来说,这个方法实现出来的效果和第二种方法完全一样。也是多个文件夹多套模板,同样是html文件做模板。唯一不同的是,html模板文件只有在系统启动的时候才会被读取一次,然后自动转换为aspx文件并保存在硬盘上。举个例子: 模板中的 $subject 用正则表达式找出并替换成 <%=subject%>。当然,新生成的aspx文件应该和原来的html模板保持同样的文件夹结构。
关键是用户怎么切换界面。其实说白了就一个字:Url重写。多套不同的模板,现在通过处理,其实就是多套不同的aspx文件了,在不同的文件夹下,显然,可以在url重写之前就获得用户的设置,根据用户的选择rewrite到相应的目录中去。
当然,实际实现起来比我讲的要复杂很多。
优点:模板灵活程度很高,可以随便改动页面布局,可以直接调用.cs代码文件中的变量和方法,几乎不影响性能,模板可读性和方法2一样。
缺点:增加启动时间。
欢迎大家补充其它方法。
---------------------------------------------------------------------------
bbsMax 2.0 即将发布
http://www.bbsmax.com
Feedback
楼上说的也是一种,不过这个方法其实类似第一种,只能改变css,对页面布局是没有办法改变的
不错,挺详细的,不过更加企盼作者能够出一个更加详细的实现方案,有demo最好不过了.
bbsmax 用的是第五种,还没公布出来,哈哈,发布产品要留点悬念。bbsmax 用的方法理论上效果和第四种一样,只是硬盘上看不到aspx文件,也不会增加系统启动时间。但会增加单页面的首次启动时间
web程序模板最好把一些通用的业务做成Dreamweaver的插件,这样的话就可以直接给美工用了。程序员不用操心。
不同意
1、css控制
缺点:有局限性,不能改动页面布局
这个有待商榷!
调用不同css完全可以改变页面的布局,特别是想pjblog的blog切换一个css,页面的布局可以完全不一样了(视觉上)
但不可否认局限性是相当大的。最多做成绝对定位好了,每块地方都可以定不同位置。但你不可以在不同模板中使用不同html
bbsmax 估计 是把html模板直接存入缓存中, 根据URL(urlrewriter)读取相关数据正则替换模版关键字,最后直接显示替换后的模版~~我现在有个项目就是这么做
楼上的你说的其实是第二种方法。这对于cms等可以这么做,因为内容固定。对于 bbs 不行,因为bbs每个人看到的页面都不同,而且内容随时变化
回楼上 我说的东西有点简单~单根你说的还是有很大区别的~说个简单的例子:
比如我在模版中载入某个文件文本 只需要在模版中<#loadfiletext(filename)#>
载入个数据只需要 <#loadDate(filename,date)#>,要定义的东西还很多~有些东西光凭几句话说不清楚。
研究了下楼主的论坛,无意中发现HTML里没有ViewState和PostBack?
楼主所说的第五种还未公布的方法,是否也可以直接调用.cs代码文件中的变量和方法?
第五种方法.. url重写到不同的文件夹(模板文件) cs可以共同继承于同一个cs.
优点:爱什么改就什么改.
缺点:url重写的规则复杂一点. 另可以把不同的版块处理成不同的二级域名.
第一种的说法不太准确,好的css设计可以实现内容与显示分离,可以切换页面布局。
我补一种xml+xslt方式,xslt是标准的模板语言,其功能就不说了。只是性能也不是想像的那样好。
利用传统的asp.net的运行方式我个人觉得控制器分离,aspx只做页面显示,url重写是比较不错的方案。
第五种不就是 Discuz NT 的做法么?
前一段时间不是很多人骂 Discuz NT 么?
干嘛模仿???
楼上的,拜托discuzNT 是第四种,但不全是……而且他不是生成标准aspx,而是生成一个 Response.Write 出来的页面,连控件都不能用了。第五种我并没有公布,因为不会生成aspx
我建议你们研究一把JavaEye的功能设计,我觉得很好。他们把Blog/BBS什么的糅合在一起,本来就都是文章,只是角度不同而已。
@sigmazel
xml+xslt 功能强大 ,但是对于普通站长学习成本太高了。
其再客户端解释 ,效率么,不好说
@喳喳叫
您所说的第五种方式 不方在硬盘上 就放在内存中缓存起来吧。。
不过 我不明白aspx既然是模板生成 , 还用控件做什么, 为什么那么多人执着于用控件捏?
期待您给大家带来新的思路 :)
鸟人,很久没看到你了,路过顶一下
楼上说的有些道理,既然是模板了控件好像没什么用途。
WordPress的模板就是让你自己写PHP代码,只是系统定义了一些获取数据的函数,WordPress把这些数据源函数叫做“标签”,这种机制要求做模板的人要会编写一些程序。
我觉得做模板的人他既然会HTML,CSS,和Javascript,那会一些编程其实也很正常的。并且模板的代码大部分是Copy来Copy去的,可能程序逻辑没有变,只是变些HTML或者CSS的内容。这样对做模板的人的编程能力要求又降低很多。
WordPress的模板做出来不一定就只有一个样子了,模板可以定义一些可变选项,并在系统里面添加一个模板设置页面,让使用模板的用户可以不改模板代码做一些自己的设置。
所以我觉得你可以不用太过考虑用户是不是会看不懂模板,试一试这种机制。
鸟人交换链接啊~~我的Blog搬到www.unbe.cn了
@戏水
一般不会放在客户端,客户端做UI组件用XSLT,因为一些安全信息不能给用户看。所以一般在服务端解释xml+xslt。
还有一种方式是自定义编译方式。我没有用过。它说的四种和我说的xml+xslt我都用过。
自定义编译方式估计还不错。
有的见解,呵呵,只是看不懂写的是什么了,Web程序模板,我还以为是说怎么做这些模板,以后可以更快的制作出成品网站来的。
1.css也可以改变布局
2。用拖动来改变布局
所以拖动+css来实现
上述几种基本都用过
基于ASP.NET的BuildProvider插件形式,你完全可以发明一种新的语言去描述你的界面,而完全抛弃WebForm。
只要你有足够的能力去做词法分析、语法分析,通过BuildProvider能够扩招到类似自己写一个ASP.NET编译器的水平,你喜欢怎样模板都可以,反正都是你自己设计的新语言。
1、css控制
缺点:有局限性,不能改动页面布局
你太小看css了。
1、css控制
准确的说这种方法不算模板了,就是html是固定的,但提供了多个css文件,完全依赖css来控制背景图片、图片或者表格和层的样式。这个方法的实现我就不说了,非常简单,只要给不同的用户链接不同的css文件就可以了
优点:对性能完全没有影响
缺点:有局限性,不能改动页面布局
看到这儿觉得有待商榷。
倒是比较了一下,但没有提具体可行性方案.呵呵,我满心欢喜的进来看看,以为能学习一些东西.失望了
后面几种看似不错,但想过没有,如果模板很多,不是要写N多CS文件?
可以问下 DUDU 的 博客园 的 模板系统如何实现的?