标签/Tag为[MT4]的文章 [ 1/2 ]

Movable Type 5.13, 5.07, and 4.38 patch

第一个补丁,具体消息如下:

Dear all,

We found an issue in Movable Type 5.13, 5.07, and 4.38 and created a patch to resolve it.
If you see "Template load error" after upgrading to 5.13, 5.07, or 4.38, please consider to apply this patch.


There is also a tutorial for plugin developers.


I hope that this will help !

Best Regards,

Jun Kaneko

Movable Type 5.13, 5.07, and 4.38 Security Updates ,

http://www.movabletype.com/blog/2012/02/movable-type-513-507-and-438-security-updates.html

半年来, MT 第一次升级。 依然延续三个主支版本: 4.3x , 5.0x , 5.1x 。
建议所有的 MT 用户升级,因为这次升级因为一些安全方面的漏洞。

具体摘录:

5.13, 5.07, and 4.38 address the multiple vulnerabilities including:

  • OS Command Injection exists in the file management system, the most serious of which may lead to arbitrary OS command execution by a user who has a permission to sign-in to the admin script and also has a permission to upload files.
  • Session Hijack and CSRF exist in the commenting and the community script. A remote attacker could hijack the user session or could execute arbitrary script code on victim's browser under the certain circumstances.
  • XSS exists in templates where the variables are not escaped properly. A remote attacker could inject client-side script into web pages viewed by other users.
  • XSS exists in mt-wizard.cgi. This vulnerability was reported by Trustwave (Trustwave's SpiderLabs Security Advisory TWSL2012-002)
另外:值得注意到是这次更新更新了 js 模板,所以升级的朋友请注意更新模板。主要受牵连的模板有 js 模板。 header 模板 和 评论表格 模板。。 还有一点小小的修改:

  • 1. 密码存储方式加强。 不再只用前8位加密,而是所有位数加密。 升级是自动档无干预的,但是引起的结果就是不能降级,虽然想安装后低版本,抱歉,请想办法重设密码。
  • 2. mt:Include file="XXX" 这样的结果被默认禁止了(很遗憾,这么模式我一直在用)。要想继续使用。请在 mt-config.mt 增加
    AllowFileInclude 1
下载地址:

--EOF--

[MT 模板]MT 4.x/5.x 之Search Results 官方默认版本的两处小错误。 ,

This is a SiteLog for Easun.org.
大家都知道, MT 4.x/5.x 的搜索所有返回多页的时候,翻页(仅仅是 PreviousNext 链接)其实是支持 ajax 的,但是实际使用中,翻页结果往往是直接跳出页面,而非ajax获取。

今天抽空看了看 系统模板中的 【Search Results】 模板代码,发现貌似有两处错误,这个应该是导致 ajax 方式经常意外跳出的原因。特意发出来,以供同好者分享。

第一处是 <div id="search-results">...</div> 的反复嵌套,看 js 来看, 是通过给<div id="search-results"></div> 块中插入新内容来更新页面的,但是 ajax 返回的数据居然还有一个 <div id="search-results">? 显然是模板错误,JS返回的模板不应该再用 <div id="search-results"> 块定义。具体抓图如下:
20120220_2.png
知道原因了,解决办法很简单: 删除图中 <mt:SetVarTemplate id="search_results" name="search_results">...</mt:SetVarTemplate>中嵌套的 <div id="search-results"> (图中69行)和 最后一个 </div> (88 行),然后找到 <$mt:Var name="search_results"$>,改成

<div id="search-results"><$mt:Var name="search_results"$></div>


第2处,是 加载完本页后,自动1000 毫秒后获取下一页数据的 js 程序有错,代码为下:
var timer = window.setTimeout("getResults(" + <$mt:CurrentPage$> + ")", 1*1000);

抓图:

20120220_1.png

呃, + <$mt:CurrentPage$> + ,官方真以为 <$mt:CurrentPage$> 是js变量啊。还 + 呢。修改成:

var timer = window.setTimeout("getResults(<$mt:CurrentPage$> )", 1*1000);

修改完后,直接搜索一个返回好多页的文件,略微等待(等待后台获取下一页数据成功),点击 Next, OK ,成功了。
因为每页默认有20个条目返回,所以如果真正的搜素者,当看完这20个的时候,点 Next 的时候,次页数据早以后台传输完成,则直接 通过 js 显示,一般不会出现因为没有数据而跳出成普通模式的问题。

PS: MT 搜索模板的 ajax 机制是载于当前页后, 设定一个定时器,后台获取下一页数据存储于js 数组,当 Next 或者 Previous 的时候,直接从 js 数据中提取,如果提取失败,则会直接跳出,以普通模式向后台获取数据。 所以,只有 PreviousNext 链接 是 ajax 的 。

--EOF--

[SiteLog]Blog升级到了 Movable Type Pro 4.25 ,

Thisi is a SiteLog of Easun's WebBlog.

今天终于升级到了 Movable Type Pro 4.25 ,貌似一切顺利,也没有发现什么特别大的改动?只是 Community Pack 变成了 1.62, Professional Pack 升级成了1.3 。

其他的一切顺利,模版也没有修改,我甚至连重建前台HTML的事情都没有做。。。

就这样吧,继续用这个风格,等有时间了再慢慢研究吧。

如果非要说有什么修改的话,就是评论的登陆方式又丰富了很多,包括 "Google" 帐号。这个大家应该都有,那么在选择留言/评论的时候您可以选择这个登陆从而免掉了我后台认证的麻烦:)
抓图如下:


--EOF--

[MT Hack]MT Forum 注册绕过Email 确认

This is a SiteLog for Easun.org.

MT Forum 的注册机制是用户注册后帐户进入 Pending 状态,然后给用户刚才填写的Email发一份邮件,点 邮件 里面的连接才可以激活。

这个是个很好的功能,但是有时候偏偏想去掉这个功能。

懒得的写 插件 ,就直接 Hack吧。

简单分析: MT Forum 注册调用的函数是 addons/Community.pack/lib/MT/App/Community.pm 里面的 do_register {} 这个函数写入数据库是 create_user_pending {} 。

要简单修改 create_user_pending 函数里面的默认数值就好。

create_user_pending 函数 在 lib/MT/App.pm 中。 定位:
    $user->type( MT::Author::AUTHOR() );
    $user->status( MT::Author::PENDING() );
    $user->auth_type( $app->config->AuthenticationModule );


把加粗的部分 修改成
$user->status( MT::Author::ACTIVE() );
或者干脆一点硬编码:
$user->status( 1 );
再次测试一切OK ,当然你也可以顺便去掉发 确认邮件 的代码, 具体位置是 addons/Community.pack/lib/MT/App/Community.pm 中的 sub _send_signup_confirmation {},用空函数代替即可。


PS: 久不更新网站和研究 MT ,貌似 4.25 也出来了。也许该更新下系统了。呵呵

--EOF--

[MT Tips]如何让某个日志在Blog首页固顶?

貌似最简单的办法就是修改日期到一个很遥远的日期,比如 AnySQL 那样:) 但是带来的问题的很多,比如导致Feed阅读器犯糊涂或者影响搜索引擎的收录等等,更糟糕的是对于 日志来说,最主要的就是发布日期。

也许大家都已经发现了,我的主页模仿 MT Forum 搞了一个固顶日志(也是为了风格统一)出来,这个固顶日志是后台通过自己设置实现的。是怎么设置的。答案是利用 <mt:Entries> 的tags 功能。
具体概念代码如下:
<mt:Entries tag="@top" sort_by="authored_on"
sort_order="descend" limit="1" blog_ids="1,5">
dosthing.....
</mt:Entries>
这样我们只要要在固定的主题 加上 tag ,tag 名字为 @top 就可以了。
PS: @开头的tag属于隐藏 tag,不会在发布页面显示出来。

好玩的 MT Forum 的按作者归档 ,

Perl ForumMT4MT Forum 的功能搭建起来了好几天了,一直没有发现什么意外,今天突然发现 按作者按月归档 貌似找完了整个发布完的 Perl Forum 也没有找到 link ,查看作者个人信息貌似也没有 link ? 真是好玩的 归档方式。
从后台看,给每个用户(作者)都建立了按月的归档页面,估计是为了便于各用户归档自己的文章吧? 后台抓图如下:

a_m_a.png
(图中红色框选的是归档地址,当然什么的地址都让我修改过了)

从发布机制上来看,这个归档页面仅会在用户发布新帖子的时候才回重建,貌似不算什么资源大户,但是如果你的 Forum 有 500+ 用户(只是假设),那么如果你要全坛重建整个 Forum ,貌似比较恐怖,如果你没有把这个"隐藏"的归档展示出来的愿望的话,那么删除这个归档类型吧 :)

PS:  MT Forum 貌似还有很多奇怪的特点,也许和老外注重安全的观点有关。。比如,注册的ID 需要通过 Email 自行激活 才能正常使用,而我找遍了整个后台也没有办法关闭这个功能(有知道不修改程序完成这个的,请告诉我一下,谢谢 :D)。

--EOF--

Perl Forum User -> MT User, 密码问题原来很简单 ,

This is a SiteLog of Easun's WebBlog。

装了自带 Community Pack 1.6 的 Movable Type 4.21 Pro,也用 Community Pack 功能建立了测试的 MT Forum,初衷是想用这个MT Forum 取代 基于 LB5000 ES Lite 建立的本站半废弃状态的 Perl Forum
简单的作了测试,帖子的转移很简单,用Perl写个小玩意,导出成 MT 系统能认识的文本就足够了。而User的转移貌似出现的密码问题上了。
当初匆匆检测功能,没有细思量,总之, Perl Forum 采用的 MD5 加密密码,而 MT User 的密码则是采用随机数和原始密码用 Unix crypt function 来加密的。貌似转化起来很是有点问题。
好久没有看原代码了,今天晚上有点时间,看了看 MT 关于 Auth 的代码。发现其实很简单,在用户输入的时候多一重判断就是

[MT Plugin]LightBox for MTOS

这也许是喜欢使用 LightBox 的朋友福音,尤其喜欢发布图片类文章的 MT 4.x 用户们:)

插件地址在这里: http://mixelandia.com/2008/09/lightbox-para-mtos-mi-primer-plugin.php

简单的插件,作用很简单:
1。自动生成 LightBox JS 模版 和 css 模版。
2。在上传文件的时候,自动加入 rel="lightbox" 标签。

注意:
1. 本插件的 js 和 css 是生成两个 Index Templates ,目标在你的Blog发布目录下,你可以手动修改地址:)
2. 从代码来看,这个插件(Plugin) 应该只支持 MT 4.0 + 。
3. 部分JS是远程引用 Google 网站,也许会拖慢速度,你可以手动修改代码把JS脚本下载到本地。

==
BTW: 本插件貌似不需要什么演示,因为本Blog已经启用了,效果可以看本站有图片存在的文章的效果 :D

--EOF--

Movable Type Pro & Community Pack 1.6

真有点搞不明白 6A 了,不知道搞什么鬼,若干个版本。Movable Type, Movable Type Pro,Movable Type Open Source,这几个版本貌似都免费提供,当然还有传说中的 Movable Type Commercial 。

升级到4.21时,我选择的是 6A 提供给 ProNet Members 专用的版本。这个版本不是所谓的 Movable Type Pro ,而只是比 Movable Type 多带了一个 Professional Pack 1.2, 从而支持Professional Website template 而已。

而从 MT.com主页提供匿名下载的版本 Movable Type Pro ,不但带了 Professional Pack 1.2,还带了 Community Pack 1.6

Community Pack 1.6 啊,眼谗很久的论坛模式啊。。。。
废话不说了,言归正传,下载了 Movable Type Pro 4.21,覆盖了现在的版本,升级。终于有了论坛模式。先测试一段时间,考虑把我那个半废的 Perl Forum 在适当的情况下转到MT的数据库中。。。。

先测试,测试地址: http://easun.org/test_forum/ ,开放了注册,有兴趣的可以去看看:)

--EOF--

[MT4 Template]Category Archives List ,

有朋友来Email问我的 Category Archives (按Category归档) 页面(比如这个页面)左边出现的 本分类的所有文章 |All Category Articles 是怎么样出来的。
因为这个问题貌似有好几个朋友问,所以在此共享下:)

MT4 开始,貌似 按Category归档 页面就只显示最近的若干文章而不是象MT3.x系列一样全部显示,其实是个节省资源的好办法,so 我把该Category的所有文章按照文章标题全部显示出来。
代码如下(注意只能在 Archive Templates 中 的 Blog Entry Listing 中用,不然希奇古怪的结果哦):

升级到Movable Type version 4.21 ,,

终于决定升级了。
简单覆盖了文件,模版没有做任何的修改(虽然4.21修改了不少模版细节,但是因为懒惰,没有刷新模版)。
启用的 PHP Includes 方式的 template module cache,希望速度能快一点(虽然没有感觉到):)

我用的是 英文版本,如果习惯中文的的可以去 平生一笑 那里下载 中文包,则可以实现完美中文化,感谢一笑!

废话几句: 貌似 MT.com 被 Ban 了? MT.org没有问题。
另外。近来貌似没有怎么关注自己的site,居然遭遇了一次域名过期事件。。同时受到影响的还有 easun.org 后缀的邮箱,也许 部分朋友 没有收到我的回信,应该就是这个问题。
实在抱歉 :D


另外: 装了 Yahoo! OpenID 登陆插件,拥有Yahoo! ID 的朋友可以登陆本Blog发表回复 :)

--EOF--

[随笔]小骆驼,地铁,牛皮癣广告和其它

貌似又是好久没有写Blog :) 今天随便写写最近的一些琐事,也算随笔吧?

第一就是周末去了一趟 西单图书大厦,惊奇的发现了有 小骆驼第四版(中文) 出售.貌似这本书一直是 缺货缺货再缺货 , 呵呵,难得见到,激动之余抓拍了一张照片,见下:
perl.png

小骆驼 是 Perl 入门的经典图书,我这里有它的第3版,关于它的介绍,似乎不用我多费口舌:) 只是要说的是:书不多,有需要的要抓紧哦

第2说的就是另人郁闷的事情了,久不坐地铁,居然在地铁上也发现了牛皮癣--办证广告,苦笑ing,也顺手抓拍了两张(电话号码作了模糊处理):
sw1.png
sw2.png

最近单位事情颇多,不多的上网时间也给了 起点中文网 ,Blog的事情也就放在一边了。自Blog系统换用 MT4.1 后主页的界面也再没有统一,DreamHost 上登陆MT4.1后台也慢的厉害,恩。。。只好等有空再满满整合了:)

--EOF--

[Tips]MT4系列模板中的一些小技巧

MT 4 模板功能强大,从代码分析来看,加了一系列小的功能,并没有从默认的模板(Template)中体现出来:)
这些功能,有些来自MT4程序本身,有些来自自带的插件(plugin),还是挺实用的,如果再结合 MTIF ,MTElse, MTUnless 等模板自身的选择流程,肯定让设计界面的朋友心动:)
我简单的说两个自己偶然发现的,抛砖引玉。

1. MTIfCommenterIsEntryAuthor
这个标签目的是判断回复评论的人是否就是这个主题的发布者:) 我偶然发现这个标签,然后Blog中我回复别人评论的回复就可以自己定义不同的样式了:)简单用法如下:

<MTIfCommenterIsEntryAuthor>Show sth.</MTIfCommenterIsEntryAuthor>
,当然,需要注意的这个标签应该在 MTComments 嵌套之中使用:)实例可以参考本站的评论处我自己的评论样式.

2. 在 MTOtherBlog 中使用 加 include_blogs 参数的 MTInclude
这个功能是由插件 MultiBlog 2.0带来的,不可否认,MultiBlog是个很优秀的插件(plugin),但是,也不能不说MultiBlog使用文档实在写的太含糊。她的文档貌似仅仅为了 写而写。大家一般都用他来做多个Blog文章的输出,但是其实他的功能还很多,比如:在一个MT Blog 中调用另外一个同系统的Blog的模块,这个就是 MTInclude 的include_blogs 参数了,但是使用这个参数必须在 MTOtherBlog 或者 MTMultiBlog 的 嵌套中使用,不然系统会找不到模块,另外,这个模块如果有 IF,Else 或者 SetVar 的设置,将会调用本来属于的那个Blog的设置。
简单例子如下(本Blog的id为2,要调用id=1的Blog的模块 Nav_Main):

<MTOtherBlog include_blogs="1">
<$MTInclude include_blogs="1" module="Nav_Main"$>
</MTOtherBlog>

OK,我目前发现的就这两个,你呢?不妨共享之。

--EOF--

[SiteLog]系统全面升级到了 MT 4.01 ,

This is a SiteLog of Easun's WebBlog。
前段时间正式升级到了 MT4 ,最后又因为反复提示升级这个Bug 回归到了 MT 3.34。
当时可惜的是自己辛苦设计的 MT 4.0 模板。
十一期间,又重新把自己的 Blog 升级到了 MT4.01,究竟,无论是模板的强大和模块化,还是page功能,附件管理的吸引力都对我来说是个不可抗拒的诱惑:)
按照原来的思路重新设计了模板,而且恢复上次自己回归MT3.34由于失误丢失的部分评论:)
留言本功能也重新回来了。
值得一提的是,这次升级其实还是全新建立blog,然后导出旧数据再导入的办法来完成:)
评论发布认证开启后台所有的选项:MT(本Blog系统后台注册名),TypeKey,OpenID,LiveJournal,Vox,但是匿名评论功能也开放了,但是希望来访的朋友请尽量避免使用匿名方式,因为匿名发表,也许会需要后台认证才能显示,个中原因,不言自明,请谅解 :)
另外,看到 David Yin发表的这篇文章:

四个用MovableType的原因
推荐一读。

--EOF--

[SiteLog]MT4的Bug和回归到MT3.34 ,

This is a SiteLog of Easun's WebBlog。
曾经为 MT4 疯狂过,无论是模板的强大和模块化,还是page功能,附件管理都让人心动。然而,让我不得不选择回归到MT3.34的却是MT4另人恼火的一个Bug : 反复提示升级

我原来的系统是直接在 MT3.34 上升级到 MT 4.0 正式版本的,用的依然是 MT3.34 的 旧模板,进后台的时候老是提示数据库升级,倒也罢了,升级就升级了。似乎对功能和内容没有任何影响,除了“搜索模板”消失(无法编辑)外。

一直以为是升级数据库的原因,加上自己在测试的MT4系统(全新安装的MT4.0数据库)中并没有出现 “Time to Upgrade!” 问题,自己也准备启用新的 MT4 的模板,花了近一周的闲暇时间设计了新的模板和CSS,于周5晚上把旧数据库的文章导出,导入新的数据库,启用了这个新的数据库,想这样,应该彻底避免“Time to Upgrade!” 问题了吧:)

[随笔]MT 4.0 杂谈 - 模板篇

升级到 MT 4.0 好几天了,模板依然用的 3.3x系列的。不是不升级模板,而是在 MT 4.0 默认模板基础上测试和重新设计风格而已:)

MT 4.0 模板设计的很优秀,在测试中发现了一些不同和技巧,特和大家共享之。

一: 强大的 MTIf 和 MTSetVar。
因为有了SetVar 和 if ,模板也有了简单的判断和设定功能。所以MT4.0模板才变的更加简单和模块化。通过在主模板顶部设定不同变量的数值,可以方便而简单让模板生成的页面任意在 3栏,2栏变化,也可以方便让侧边栏显示或不显示某个模块。实在是节省了设计人员的工作量。仔细研究每个主模板顶部变量(SetVar)的设定,会让你受益非浅。
我的页面上面的导航条自动加重原来靠自己写的插件实现的,在现在MT 模板中完全可以利用 MTSetVar 和 MTif 实现,简单介绍如下:
修改头部模块(导航条),假设名字为 "Header" 为:

<div id="header">
<h1><a href="/" accesskey="1" title="Return to HomePage of easun.org" >Easun.org(路杨)</a></h1><h3><$MTBlogName encode_html="1"$></h3>
<h2><$MTBlogDescription$><a href="/links.html" title="Some Good Sites">链接</a></h2>
<ul>
<li id="top_ossu"><a href="/ossu/" title="Go to Easun OS Switch Utility HomePage">软件站</a></li>
<li id="top_perl"><a href="/perl/" title="Perl Site">Perl Site</a></li>
<li id="top_blog_bookmarks" <MTIf name="blog_bookmarks">class="notice"</MTIf>><a href="/Bookmarks/" title="Easun's Bookmarks,朋友的Blog RSS聚合">Bookmarks</a></li>
<li id="top_blog_tags" <MTIf name="blog_tags">class="notice"</MTIf>><a href="/blog/tag/" title="Tag cloud of Easun's WebBlog">Tags</a></li>
<li id="top_blog_archives" <MTIf name="archive_index">class="notice"</MTIf>><a href="<$MTLink template="archive_index"$>" title="Easun's All Articles Archives">Articles</a></li>
<li id="top_blog_index" <MTUnless name="is_not_blog">class="notice"</MTUnless>><a href="<$MTLink template="main_index"$>" title="Easun's Blog">WebBlog</a></li>
<li id="top_blog_home" <MTIf name="site_home">class="notice"</MTIf>><a href="/" title="Easun's HomePage">Home</a></li>
</ul>
</div>

在一般情况下,WebBlog 都是粗的,如果要加粗其他页面,比如Site Home 页面,只需要在此模板顶部写入:

<MTSetVar name="site_home" value="1">
<MTSetVar name="is_not_blog" value="1">
。。。
<$MTInclude module="Header"$>

就可以了:) 是不是被专门写插件处理方便多了? 呵呵。

二。 按分类归档有所变化。
这次MT4.0的重建速度要比以前版本快了很多,但是我怀疑和 "按分类归档" 有所变化。 以前"按分类归档" 是个大问题,严重拖慢速度,因为要重写的数据太多了。
这次, MT 默认模板对 "按分类归档" 只输出最近的几篇文章(就像Blog首页那样),所以节省了大量时间。但是作为补偿, MT4 推出了新的归档类型: Category Monthly Archives(分类的按月归档),这个主意的确不错,既方便了读者,也节约了重建速度。

三。大量的 SetVar 和 if 让生成的最终页面空行空格大量增多。
这个也许是模板化的代价,也许是 官方 的疏忽?虽然不影响什么。但是给人感觉很不舒服,我自己修改了下程序,让 MT 自动对页面进行了空格/空行压缩,但是发现速度明显变慢。。也算一郁闷事情吧:)


--EOF--

[MT4 Hack]针对MT4模板的HTML压缩修改 ,

升级到 MT 4,模板模块化了,但是大量的 SetVar 和 if 让生成的最终页面空行空格大量增多,让人看到实在不爽,小修改了代码,让 MT 程序在发布/重建页面的时候对最终代码进行空格/行的压缩。
办法如下,找到并打开 lib/MT/Template.pm文件,找到 sub build {...},在此函数下面添加以下 Perl 代码

sub easun_html_reduce
{
my ($tmpl ,$res)= @_;
$$res =~ s!\s*\n\s*!\n!isg;
$$res =~ s!(\r|\t|\f| )+! !isg;
return 1;
}

然后转到sub build {...}代码的最后一行
return $res;

在这个之前添加
$tmpl->easun_html_reduce(\$res);

到此完成Hack,保存后重建整个Blog吧:) 相信看见空格和空行明显减少了 :P

--EOF--

[随笔]发现MT3.33可以无改动平滑升级到MT 4.0 正式版 ,

MT 4.0 和 MT 3.3x系列模板相差太大,加上 beta 的时候测试过几次,发现都不能直接无修改升级(总有形形色色的错误出现)。
昨天,再次把现在运行的 MySQL 库导出来,导到一个临时的库里面,然后在这个临时数据库中测试MT4.0正式版本,居然发现没有任何错误提示,原来的模板在没有任何改动下完全没有任何错误。

更值得高兴的事情,是我现在用的几个插件:


AutoIPBan 版本 0.02
随机模块加载插件(RandInclude) 版本 0.01
SimpleComment简单评论防SPAM插件 版本 0.01
TCode 版本 3.3.01
RelatedEntries

都在MT4下正常运行而没有任何问题。

恩。这样以来,可以把 MT4的摸板和CSS修改先放一放,先升级吧:)
准备今天晚上把整个系统移植到 MT4.0下来:)

--EOF--

[随笔]MT4 模板的变化和3.x系列风格移植的注意事项

不知道 6A 出于什么考虑。从 MT3.3x到 MT4,MT 模板的一些定义变化了。导致旧的CSS没有办法直接移植到新的系统(如果你使用新系统带的模板的话)。

主要变化在 页面布局 的变化,基本上对应关系如下:

layout-two-column-right -> layout-wt
layout-two-column-left -> layout-tw
layout-three-column -> layout-wtt(宽-窄-窄) 或者 layout-twt (窄-宽-窄)

另外, 模块Class 名字原来 叫 module 现在改成了 widget , 原来所有以 module 的元素名字也改成了 以 widget 开头。

大概变化就这样,如果要使用旧风格,直接把 CSS 按照上面的进行替换,然后再修改细部就可以了。

--EOF--

1   2