[SiteLog]遭遇疯狂的SPAM 心情故事,站务记录
嗯。 2021年7月17日。
从大约6点半到8点半,大约收到 75 个 SPAM 评论。 由于评论关联了QQ信箱,所以手机嘟嘟没有停过。
虽然,这些评论因为不符合我定义的正常评论逻辑,都是人工审核阶段,但是的确写入数据库。。。
抓图如下:
PS: 进后台及时关掉评论脚本。终于消停。
»继续阅读 "[SiteLog]遭遇疯狂的SPAM" 。
嗯。 2021年7月17日。
从大约6点半到8点半,大约收到 75 个 SPAM 评论。 由于评论关联了QQ信箱,所以手机嘟嘟没有停过。
虽然,这些评论因为不符合我定义的正常评论逻辑,都是人工审核阶段,但是的确写入数据库。。。
抓图如下:
PS: 进后台及时关掉评论脚本。终于消停。
»继续阅读 "[SiteLog]遭遇疯狂的SPAM" 。
This is a sitelog of Easun.org.
貌似已经落伍了。。 看见大家的网站已经统统迁移到了 https
,也是,更安全貌似也更流行?
研究了一番,最后也图省事。 干脆在 腾讯云 上申请免费的 DV证书 并下载到自己的服务器完事,其过程乏味无趣,也就一笔略过。
配置完后上 https://www.ssllabs.com/ssltest/ 测试一下。达到 A+ 为宜。
»继续阅读 "[SiteLog]全站 https 的尝试和MT相应修改" 。
This is a sitelog of Easun.org.
因为 PSGI 运行 MT ,貌似服务器执行效率不再是瓶颈, so 渐渐取消了了一些为了节省资源的"优化",简单记录如下:
json
格式的评论全集。 比如这个: http://easun.org/blog/archives/json/311.json。 当每次有新的评论发表时候,我的原设计是并不刷新本页,只是重载 json
罢了。 通过自写的 JS
把 json
中的所有评论更新一遍。 而且每个页面的评论也都加入了"刷新
" 和"重载
"两个按钮。 其中"刷新
"的含义是重载 json
文件, "重载
"则从数据库重载。 抓图如下: json
格式的博文页, 减少一次服务器写文件的次数? 同理,改写了 JS,移除了在加载文件同时加载 json 文件。 当然,保留了从数据库直接重载评论的设计。 顺便改了一下 "重载
" 的 UI
,让它更 醒目 一点 (也许是更*丑陋*了一点。哈哈),抓图如下: »继续阅读 "评论模式的小小改变和JS重写" 。
随笔写下一些东西,作为 SiteLog 和备忘。
都是一些评论、显示界面的调整,一个意图:用户体验。 说的不好听的就是"路杨的强迫症又犯了",反正是折腾无极限。。
这两个月, 整个 Blog 的 js 估计被我修改过不下10次,有些是纯粹为了闭包,有些是为了美观和清晰流程。。。
简单记下曾经的修改吧。
先说前端:
多说评论界面优化。 绑定了原来系统的显示/隐藏评论、 显示/隐藏评论框的函数,让原来界面的操作同时操作两个系统的界面。 在 SOTHINK 的提示下,虽然依然设置多说评论框为默认,但是登录本地系统(包括QQ等本地系统支持的社交帐号)的朋友则显示"本地评论系统评论框"。 代码片段为:
codevar check_mt_user = function(u) {
if(typeof duoshuoQuery.is_ds_hide =='undefined') {
if (!u) u = w.mtGetUser();
if (u && u.is_authenticated) { duoshuoQuery.is_ds_hide=true;}
else duoshuoQuery.is_ds_hide=false;
}
};
本地json评论界面优化。 彻底完成本地评论js的闭包。进一步和多说评论界面糅合, 增加了刷新
和 重载
两个操作界面,前者从本地文本静态json cache中重新获取本地评论,后者读取 MySQL
库实时获取本地评论。
JS
闭包。 美化了延迟加载图片时候占位的动画,因为目前本站仅在评论者头像上使用延迟加载图片技术,也许大家并不能彻底体验到界面的加载过程(因为加载的太快了)。。。上面的所有修改,均可以查看本站现有 JS 来获得代码。 本站的 JS 并无加密 :P
再说后台:
彻底解决了QQ头像、Gravatar 头像显示问题。 并缓存Gravatar 头像到本地。 不同原来的做法。这次写 插件,直接 hook 了 MT::Author::userpic_url
。 比较极端的做法。 代码如下:
codeour($old);
{
no warnings 'redefine';
no strict 'refs';
require MT::Author;
If ($old = MT::Author->can('userpic_url')) {
*MT::Author::userpic_url = sub{
my ($author) = @_;
if ( ($author->auth_type =~ m/^QQ/ ) && $author->hint && ($author->hint=~ m!^https?://!) ) { return $author->hint. '#QQ' ;}
my ($oldurl) = $old->(@_);
return $oldurl if ($oldurl);
my $email = $author->email;
return &_hdlr_gravatar_url_mail($email);
};
}
}
更换了后台插入图片后的显示,适应 HTML5
。 这个没有写插件,直接Hacklib/MT/Asset/Image.pm
中的 can_html
。 更加的简单粗暴。 代码片段如下:
code$text = sprintf(
'<figure class="post-image"><img title="%s" src="%s" %s %s /></figure>',
MT::Util::encode_html( $asset->label ),
MT::Util::encode_html( $asset->url ),
undef,undef,
);
要查看详细的修改文件,可以移步到我的 GitHub。
其他:
话说,多说 服务器维护了。 貌似以为会好一点,结果似乎结果一样? 另外,多说评论加载不出来时候,下面的加载动画一直显示的时候, 这个时候刷新就OK了,觉很奇怪, 查看了一下 log。 结果,100% 的在出现这个状态的时候,浏览器报错:
17:24:55.691 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://easun.duoshuo.com/api/threads/listPosts.json?thread_key=301&author_key=1&url=http%3A%2F%2Feasun.org%2Fblog%2Farchives%2Fgodaddy_cpanel_perl_dbdmysql.html&title=Godaddy%20cPanel%20%E4%B8%BB%E6%9C%BA%E5%92%8C%20Perl%E6%A8%A1%E5%9D%97%20DBD%3Amysql&require=site%2Cvisitor%2Cnonce%2Clang%2Cunread%2Clog%2CextraCss&site_ims=1442293934&lang_ims=1442293934&referer=http%3A%2F%2Feasun.org%2Fblog%2F&v=15.4.27. (Reason: CORS header 'Access-Control-Allow-Origin' missing).1
干啥子嘛~~
明显的服务器响应问题。。。
判断跨域的服务端脚本的得到没有执行。。
其实listPosts.json
返回数据了,可惜被浏览器拒绝了。 难怪不显示。。。。。。
话说,抛开 服务器 判断跨域的服务端脚本的问题。 listPosts.json
难道一定要用 JSON
模式? 又不是 POST
, GET
而已,换成 JSONP
模式不就万事大吉了,而且也能节省服务器的判断跨域,输出 Access-Control-Allow-Origin
header。。。。。。
另外,服务器维护了, 貌似脚本的版本还是 2015-04-27
。。。。
--EOF--
This is a sitelog of Easun.org.
因为 本地评论 JS 化,又重写了一遍 MT 的 ajax 提交过程。梳理了一下流程。
主要是删除了 MT 提交过程的 2次服务器认证,把第一次服务器认证(登录信息预提交验证) mtCommentSessionVerify
有限度地交给 JS
+ cookie
。
简单的说,就是设置全局变量 user
为 null
,然后重新在 cookie
中读取 user
来判断登录信息是否正常? 然后其他的认证在 提交表格 时完成就好。 简单 JS
片段如下:
code var refresh_user = function(u) {
if (u) mtSetUser(u);
if (!u) { user = null; mtFireEvent('usersignin'); u = mtGetUser(); }
if ( u && u.is_authenticated ) { /* do nothing*/ }
else { $f.find(':input[name="sid"]').attr("value","") ; ShowCommentsOpenData(); }
};
然后发现 JQ $.ajax
的小问题:
我的 $.ajax
如下:
code$.ajax({
type: 'POST',
cache:false,
url: url,
context: el,
xhrFields: { withCredentials: true },
data: $f.serialize(),
success: successfuc,
beforeSend:beforefun,
error: errorfun,
complete:completefuc
});
本来是吧 refresh_user
写到 beforeSend
中的,但是执行的时候发现 refresh_user
中对 $f
的改变,并没有在 data: $f.serialize()
中 体现出来。 所以只好显式在 $.ajax
前调用此函数了。
笔记下来,为自己提醒。
另外,本来对 JS 全面进行 JQ 改写来着,但是实际对 form
元素操作中发现,同样对
code<form name="comments_form" id="comments-form">
<input type="hidden" name="preview" value="" />
...
</form>
中 的 name="preview"
的 value
操作。
原来的代码是
codevar f = document['comments_form'];
if (f.preview.value == '') f.preview.value = '1';
而 JQ 呢? 貌似。。。。。
codevar $f = $("#comments-form");
var $preview= $f.find(':input[name="preview"]');
if ($preview.attr("value") == '') $preview.attr("value","1");
f
和 $f
是为了方便操作预先定义好的。 貌似还是不用 JQ 操作的快一点。或者就现在这样混合用吧。。。。
另外,给 ajax 提交完成后刷新新评论搞了一段简单的 JQ 特效: 代码如下:
code var animate_item = function(id) {
var $el =$("#comments-content .comment#comment-"+id);
var _top = $el.offset().top - ( $(window).height() - $el.height() )/2;
$("html,body").animate({scrollTop:_top},1000);
$el.addClass("notice")
.animate({left:'30px',opacity:'0.2'},"slow")
.animate({left:'0px',right:'30px',opacity:'0.8'},"slow")
.animate({left:'0px',right:'0px',top:'30px',opacity:'0.2'},"slow")
.animate({left:'0px',right:'0px',top:'0px',bottom:'30px',opacity:'0.8'},"slow")
.animate({left:'0px',right:'0px',top:'0px',bottom:'0px',opacity:'1'},"slow");
var total= parseInt( $("#comments").attr("data-total"));
function c() { $el.removeClass("notice").addClass( (total%2) ? "odd":"even" ); }
$el.one('click',c).one('mouseover',c);
};
没有抓 gif ,简单完成效果如下:
--EOF--
8月快过去了。时间真的是。。。。
顺便记下这几天对网站的一些小小的折腾吧。
1. 多说评论显示逻辑调整:
还是要从多说说起: 路杨已经基本上实现了把所有的多说评论同步到了本地。 默认同步到多说评论处于未发布状态,防止和多说JS载入的评论形成重复评论。 定时把本地数据库的多说评论转成发布状态,以防止多说服务器抽风导致评论不显示。
但是问题来了: 怎么让同步并本地发布的同一条评论只显示一次呢? 原来的实现办法是在 多说JS 中识别这条评论是否已经本地发布,如果发布则 hook 多说JS 的 templates.post
函数,让它不生成这条评论。
核心代码如下:
codevar DSinMTids = [];
function check_ds_in_mts() {
DSinMTids = [];
$("#comments-content div.ds-post-self").each(function()
{
if ( ( $(this).attr("data-source") == 'duoshuo' ))
{
DSinMTids.push($(this).attr("data-post-id"));
}
});
}
check_ds_in_mts();
var _D_post=DUOSHUO.templates.post;
DUOSHUO.templates.post=function (e,t){
var rs=_D_post(e,t);
if ( $.inArray(e.post.post_id, DSinMTids) != -1 return '';
/* sth others*/
return rs;
}
»继续阅读 "[SiteLog]近日网站折腾小记" 。
先说ajax无刷新技术吧
因为 Godaddy 空间中资源和国内访问速度的原因,能节省一点资源就节省一点资源吧。虽然对于传统的 ajax 来说,更新版的 pjax 可以同时写入浏览器历史( pushState
)和动态更换 url 显示,但是对于我来说,貌似还有一下不足:
- 浏览器缓存(内存)不会释放,会让老爷机的朋友感觉到机器卡。
- 不利于SEO(当然比 ajax 已经很好了)。 pjax 再先进也只更新某个容器,对于 head 内的一些 meta 是不会处理的,强迫症的伤不起啊。
- url 虽然写进了浏览器历史(
pushState
),但是在 FireFox 下用 Backspace 返回时候。很多时间只是浏览器的url变了,但是内容还需要再次刷新。
好处也就不说了。减小重复资源的http请求。
言归正传,简单说说本站是怎么启用这个吧:
直接用了 defunkt/jquery-pjax 这位大神的成熟方案。对本站的链接(a
)做了处理。 代码如下:
code$.getScript("http://Path/to//js/jquery.pjax.js", function() { $(function() { easun_pjax(); }); });
其中 easun_pjax();
为核心函数。 简单如下:
codefunction easun_pjax()
{
$(document).pjax('a[target!=_blank]', '#content', {fragment:'#content', timeout:6000});
$(document).on('pjax:send', function() {
$('#content').fadeTo(700,0.0);
});
$(document).on('pjax:complete', function() { $('#content').fadeTo(700,1); });
}
这样基本完成, 如果一些需要在替换#content
(<div id="content">...<div>
)的内容需要 js 实现的。请在pjax:complete
中(上面有示例)中重新运行一次。
成功后实例可以参见本站的各博文之间的切换。
再说多说的一些小技巧吧
用多说一段时间了。乱七八糟的改了一起。多说的自定义其实还很强的,只是官方似乎不是很重视这些小技巧? (官方现在都长草了)
duoshuoQuery.theme= 'none'
即可。duoshuoQuery
: var duoshuoQuery = { short_name: "YOURKEY", theme:'none'};
这样,多说就不会加载任何 CSS ,变成了一张白纸,自己享受重头定义本地 CSS 的乐趣吧。
让评论加载不在颤抖。
大家也许都注意到,有时间加载多说的评论会先从没有任何 CSS 样式再切换到有CSS样式。
原来以为是 CSS 没有及时加载进来。 后来一看官方的 CSS 才知道。 CSS 根本没有定义 .ds-thread
(class="ds-thread"
)而只定义了#ds-thread
(id="ds-thread"
)。
而多说的机制是找到.ds-thread
并以其做为容器加载评论文章,最后再给这个容器加上id(#ds-thread
)。
奇怪的逻辑~~ 为什么不直接以 ID 操作呢? 多说自己的不自信?
知道原因了,让评论加载不颤抖也就很简单,把加载评论的 <div class="ds-thread" ...>
提前改成 <div class="ds-thread" id="ds-thread" ...>
就可以了。 或者,你也可以按照彻底定义CSS的办法重新对 .ds-thread
做 CSS定义。
pjax 动态加载 评论。
其实也就是上面的问题的延伸。 在pjax:complete
中加载即可。 代码为
if ($('.ds-thread').length > 0) { if (typeof DUOSHUO !== 'undefined') DUOSHUO.EmbedThread('.ds-thread'); else $.getScript("//static.duoshuo.com/embed.js"); }
完整代码如下:
code$(document).on('pjax:complete', function() { $('#content').fadeTo(700,1);
if ( $('.ds-thread').length > 0 ) {
if (typeof DUOSHUO !== 'undefined') DUOSHUO.EmbedThread('.ds-thread');
else $.getScript("//static.duoshuo.com/embed.js");
}
});
}
--EOF--
每年的5月、6月总是很忙~ 回顾一下 Blog 情况,主要体现在以下:
网站对于 IE8/7/6 的兼容。
从后台来看,来访的朋友中 IE8 还是占很大比例(也是,XP系统最大支持到IE8), IE6 居然也占相当比例。。 (汗,IE6 也许是最长寿的浏览器版本? )
我迁移到Win7平台很久了。没有注意现在的网站在IE8及以下居然有网页错位和 JS 错误? 特意检测了下,调整了CSS和JS,现在基本上在 IE6/7 下面没有大的错位和JS错误,IE8下所有功能正常。
Perl學習手札 - Easun.org 镜像 的移动优化。
重构了这本书的所有页面,在保证PC界面和原来基本相同的情况下,移动端实现了自适应,方便同好者移动端阅读。
彻底修复和解决了 QQ 登录的一系列问题。
XX的腾讯, API写的回调地址和浆糊一样而且处处矛盾。只能猜测+测试,而每次改动还需要审核~
其实解决的办法就是回调地址*并不是API文档宣称的不加 http(s):// 的纯域名,而是必须加上 http(s)://的具体到脚本的全url* 才可以。
对 Ajax 评论做了跨域处理。
见 [SiteLog]JQ AJAX 跨子域Post再总结。 同时对 JS 脚本重写和闭包处理,以方便移植。同时,对于多说的附件JS 也做了重写和闭包处理。
7月也许会继续优化网站, 自娱自乐莫过于此。 写下来做个记录。
--EOF--
为了配合 CDN 前台。 后台的域名改成了 mt.easun.org/cgi-bin。 之所以启用子域而不是独立域名,是因为同域不同子域间可以天然共享 cookie ,而MT的POST必须带有 cookie ,不然登录信息验证不过。
测试一下正常的POST,没有任何问题。cookie 由于 CookieDomain 为 .easun.org
,所以cookie信息正常传递给了 mt.easun.org
后台。
但是接下来用 JQ $.post
进行 AJAX POST 的时候,就出现跨域问题了。 如果是Get
,很简单,可以参考我上篇( [JQ+Perl]JQ AJAX跨域请求HTML/JS页面内容总结 )解决之。 POST
就必须设置跨域请求了。
不想回归 iframe
。幸好服务器部分配置可以自己控制。在后台脚本目录建立 .htaccess
,内容如下:
code<IfModule mod_headers.c>
Header set Access-Control-Allow-Credentials: true
Header set Access-Control-Allow-Origin "http://easun.org"
</IfModule>
这下应该可以 $.post
了吧?
但是结果依然很悲哀,这次 POST 成功, 但是 JQ 并不传递 Cookie。导致身份认证出错。
Google之。发现跨域(包括子域), 如果要传递Cookie, JQ AJAX 还需要手动发送认证凭证,设置 withCredentials
,这样才会传递 Cookie.
根据这些信息。 重写 $.post
为 $.ajax
模式,代码如下:
code$.ajax({
type: 'POST',
cache:false,
url: url,
data: $("#comments-form").serialize(),
success: function(data){
if (f.preview.value =='1' ) { EasunisPreReturn(data);}
else {EasunisPostReturn(JSON.parse(data));}
},
xhrFields: { withCredentials: true },
});
return false;
调试之,一切OK。
参考资料:
1.【前端笔记】使用ajax跨域withCredentials的作用
后记:
对于IE8,9 来说。JQ AJAX 跨子域Post 即使设置了上述也会失败。原因很奇葩,跨域提交需要使用 XDomainRequest
对象。
幸好有 JQ 插件 jQuery-ajaxTransport-XDomainRequest 可以解决。 在 $.ajax 前引入:
code<!--[if lte IE 9]>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
<![endif]-->
同时,为了兼容出错信息,当$.ajax 失败的时候,设定正常方式POST。虽然这样界面乱了,但是保证功能正常。
codeerror: function(){ f.submit(); }
--EOF--
个性化 多说显示,让多说显示评论者的 UA,貌似教程很多。
比如: 我的那些事 - 多说回复后显示浏览器及操作系统信息(Useragent) 这里。
但是方案都是 本地化 embed.js 然后修改 embed.js 完成。
不想本地化 embed.js ,搜索了一下网络, 发现有不本地化 用 JS Hook 方式修改的办法,见
https://github.com/huhuime/make_duoshuo_show_ua
但是,根据这个修改后无效, 检测了多说的 embed.js 代码,发现是因为版本更新导致变量失效,修改 e.agent 为e.post.agent 即可。
简单整理如下。
在 多说 自己的 JS 导入后面的任意位置添加以下代码:
<script src="您的网站地址/ua-parser.min.js"></script>
<script type="text/javascript">
if (typeof DUOSHUO !== 'undefined')hookDUOSHUO_tp();
else $('[src="http://static.duoshuo.com/embed.js"]')[0].onload=hookDUOSHUO_tp;
function hookDUOSHUO_tp(){
var _D_post=DUOSHUO.templates.post
DUOSHUO.templates.post=function (e,t){
var rs=_D_post(e,t);
var agent=e.post.agent;
if(agent&&/^Mozilla/.test(agent))rs=rs.replace(/<\/div><p>/,show_ua(agent)+'</div><p>');
return rs;
}
}
function show_ua(string){
console.log(string)
$.ua.set(string);
var sua=$.ua;
if(sua.os.version=='x86_64')sua.os.version='x64';
return '<span class="this_ua platform '+sua.os.name+'">'+sua.os.name+' '+sua.os.version+'</span><span class="this_ua browser '+sua.browser.name+'">'+sua.browser.name+'|'+sua.browser.version+'</span>';
}
</script>
»继续阅读 "[多说]不本地化embed.js使多说评论显示UA" 。
This is a SiteLog for Easun.org。
多说 是一款追求极致体验的社会化评论框,可以用微博、QQ、人人、豆瓣等帐号登录并评论。
恩,就是这样。
写下这个的原因是路杨正式启用 多说 作为本站博客的评论系统, MT 本身的 评论系统也保留。
原因很简单: MT 的留言系统资源问题。
其实在 多说 和 Disqus 之间选择的时候, 第一选择的是 Disqus,但是分析后发现, Disqus载入方式是 iframe ?
对于 iframe 我貌似有点轻度洁癖。 于是选择 多说。
分析了多说的代码, 利用 JS 把多说的评论框排版折腾的和 原来 MT 布局差不错多了。
觉得 多说 的系统的自定义和配置方面还小有瑕疵,等有空写写。
--EOF--
安吉丽娜(angelina),您意欲何为?
自昨天晚上8点,网站就奇慢无比,进后台频发 504 。因为没有啥可以值得关注的,就关掉电脑休息了。
今天一上班。就收到了一大堆邮件。
首先是 Godaddy 的 资源限制提醒邮件,(这个一点也不意外,昨晚卡的厉害)。
然后是网站后台自动 locked out 了16个 IP 地址的邮件提醒。
这个就有点意外了。 MT 一般只对试图频繁后台登陆的IP做 Lock~~
小站,自娱自乐难道也有人要Crack之?
登陆后台, 查看日志,我的天。
一位叫"angelina"(也许,大概吧)的朋友利用杭州电信的 N个地址对小站进行了全面的检视,当然后台登陆也不放过。
简单抓图如下:
--EOF--
转眼。五一假期都已经过了。
一些琐事,随便写写。
五一短短假期, 在家宅着,啥地方也难没有去。笑看各地堵车、堵人、刻字,也算是种另类休假?
关于网站。 4月改动较多,后台模板体细微地方调整了很多遍。
不过主要的还是主页的分页显示。 修改了3版,最后稳定成现在的 ajax 方式的 在本页追加模式载入以前的文档。
CloudFlare云加速 现在其实处于取消状态, 只是 NS 服务器托管给了 CloudFlare 而已。
重新开放了TrackBack。但是 SPAM 问题没有解决。 阿郎的插件在新的MT上无法工作。
Google Analytics 在取消2个月后重新加回。
这次吧所有的 JS 统统放在了页面的尾部,应该对网页的载入速度不会有大的影响。
简单的就这些。 5月也许对博客有大的修改,自娱自乐罢了。
--EOF--
YSlow 是雅虎基于网站优化规则推出的一款扩展,有FireFox、Chrome 、甚至浏览器书签版, 它帮助你分析并优化网站性能。
网上介绍它的资料一堆一堆的。
这里就不东施效颦,多做说明了。
我的 Firefox 装不上 YSlow,只能用其 浏览器书签版本。
对最近优化过的网站做了一次测试,还不错, 87 分。
抓图如下:
»继续阅读 "本站YSlow网站性能分析结果" 。
简单记下, 方便和我一样有疑问的朋友解疑。
一直以来,都在为这个问题苦恼。
今天突然发现,原来解决办法很简单。 就在 website 的 插件 MultiBlog 设置中。
简单增加 Rebuild Triggers 即可。
抓图:
--EOF--
貌似国内访问速度不怎么样。
所有。。。 申请了 CloudFlare 的免费 CDN 服务。
速度能快一点吧。
遗憾的好像因为这个 QQ登录出了一点问题?
抓图纪念之。
另外, 顺便 Cname 了一个 b.easun.org ,用 CloudFlare 加速后结果比较好玩。。
--EOF--
This is a SiteLog for Easun.org。
对于静态发布的MT来说,主页/分类页 的分页很不好实现。一直以来,要在主页展示更多页面的朋友们都是利用一个 插件PageArchives 来实现。对我来说,实现这个功能实在太繁琐了点,也就懒得折腾。
今天,在测试MT5的新主题( Rainier 1.04)的时候,居然发现可以分页了。
立即查看模板,发现可以原生分页,分页由 mt-seach.cgi 完成。呃,又是这个 cgi ,看来资源大户的名气又要响亮一点了。
我的模板是在一直 在 "Professional Blog" 上修改的。 不想再次重写模板了。 直接移植吧。
其实很简单,要实现分页,必须给 <mt:Entries> 加上 search_results 选项。
»继续阅读 "[SiteLog]终于迎来了原生的MT主页/分类页的分页" 。
This is a SiteLog for Easun.org。
这也是3年以来第一次改版。 目标很单纯, 抛弃 XHTML ,改投 HTML5。
耗时一周,代码基本上都是自己在改。 网站结构全部重构,但是尽量通过 CSS 让大家感觉不出来界面有大的调整 :)
主要改动如下:
- 结构重写,CSS也全部推翻重写。 用 HTML5 的 header section nav article aside footer 等新标签替换掉了原模板中大量的 div 标签。让他显的有意思,并大量删除了自带模板中多重嵌套的div。这样一来大大的减少了网页的容积 :P 评论框仿照 扶凯 大侠的网站,进行了仿写。 不过貌似在手机上lable标签有点变形~~
- 移动优化,也就是改写了CSS,利用CSS3的特性,让页面布局可以根据不同的浏览器分辨率进行自动切换,用我的 Mate7 看了一下,结果还是差强人意:)
- JS改写, 因为LightBox升级,jQuery 库彻底引入,自己的 ajax 提交评论以及一些自定义的JS都统统用 jQuery 库重写了。让代码更简洁。
- QQ登录的引入, 给整个网站加入了最热门的 QQ互联 功能,也就是用QQ帐号登录评论功能。 代码以 plugin 方式运行, 也算自己的原创 MT 插件,等稍后整理出来,于同好共享之。另外,评论登录界面也做了修改,融合了 MT 4 的列表显示来代替MT 5 的select选择。更好看意见,大家可以点击 http://easun.org/cgi-bin/mt/cp?__mode=login&blog_id=2 来看看结果。
基本上的改动就是这样了。 一些东西,比如 ajax 提交评论、后台的的防止 SPAM 的SimpleComment 0.12 等自己折腾的东西,等有时间会写成博文,方便大家也方便自己:)
--EOF--
本站的图片显示一直使用 LightBox,
最近升级,才发现 LightBox悄悄迁移到了 jQuery 平台。
笑ing, jQuery 貌似越来越份额多了。
想到既然是要导入 jQuery ,干脆把自己的一些 js 也用 jQuery 重写一下,尤其是 ajax 方式提交评论的代码。
于是,打开 mt.js ,看见了大量的
var f = document['comments_form'];
$.post("http://easun.org/path/to/mt-cms.cgi",
$.param($("#comments_form").serializeArray())
).success(function(data) {
if (f.preview.value =='1' ) { EasunisPreReturn(data);}
else {EasunisPostReturn(JSON.parse(data));}
}) ;
<form ... name="comments_form" id="comments-form" ... >
$("#comments-form")
笔记之,给自己再次修改提个醒。
--EOF--
This is a SiteLog for Easun.org。
终于, $12 付款给了 GoDaddy , 网站又回来了。 近年事情良多,加上 微信 等APP越来搞得信息碎片化, Blog 已经快想不起来写了。 但是多年的积累,貌似也不应该丢掉? 笑ing
网站基于 MT 建立,但是 6A已经不在对MT进行免费, 虽然从 MT 日本官方 依然可以下载到最新的版本,但是我还是停留在最后的免费授权版本吧。 折腾可一劝,升级到 version 5.2.12 足够了。 以后不再跟随官方升级,维护 bug 等交给自己吧。也方便自己把一些 MT Hack 直接融入。
MT 的资源占用,主要出现在 mt-search.cgi ,分析了本站以前的tags文本cache生成,貌似就快读不懂代码了。看来需要有空整理下,写出来,方便自己也方便别人。
方便网友评论和同时 Anti-Spam ,给整个网站加入了最热门的 QQ互联 功能,也就是用QQ帐号登录评论功能。 代码以 plugin 方式运行, 等运行成熟后,发布共享之。
--EOF--