kingcms onepage 更新无效问题处理 更新时间单位修改

来源:互联网 发布:ubuntu 卸载opera 编辑:程序博客网 时间:2024/05/17 02:01

       今天头一次用kingcms asp 5.1版,确实短小精悍,不过问题也很多,就比如这个单页面定时更新问题。我在按照网上说的把{king:onepage#update time="1"/}放到外部模板</html>后也没作用,再到官网一查发现好多用asp版的都有这问题,现将处理方法总结一下,方便他人.按照本方法处理后不仅解决你更新不能问题,还能自定义更新时间单位(默认是小时).废话不多说了,信不信由你,反正我信了.

(本文中的路径设置均以未变动的原始路径为基础,修改过的请对号入座)

首先说明一下造成此问题的原因.据我初步观察是/page/onepage/update.js中ajax调用/page/system/now.asp无返回值所造成的.这个now.asp就是负责计算时间差的,所以你时间差得不到是没办法更新的.

 

var datediff=getdom('/page/system/now.asp?datetime=2008%2D5%2D7+14%3A27%3A34');if(datediff>1){getdom('/page/onepage/create.asp?listid=9%2C8%2C1&time=1');};


update.js文件,问题就在这个datediff总是undefined,所以下面的if永不成立自然无法更新.

求人不如求己,人家都开源了咱也没啥好说的,自己动手改吧.改之前先讲下思路,高手看到这里想必自己已经有办法了吧.为了把对cms的影响降到最低,咱们最好是修改update.js.而此文件是由同文件夹下的fun.asp生成的,所以咱们主要修改fun.asp,目的是把判断时间的函数放到update.js,跳过now.asp,从而避免ajax无返回值问题(本人对ajax表示不懂所以没想着怎么解决无返回值问题).

1.首先打开/page/onepage/fun.asp,搜索updatejs函数,将其整体替换为

public function updatejs(l1,l2)dim I1I1="var newdate = new Date(new Date().getTime());var olddate = new Date('" & now() & "');var datediff=olddate.dateDiff('n',newdate);"if validate(l2,2) thenI1=I1&"if(datediff>"&l2&"){getdom('"&king.page&"onepage/create.asp?listid="&server.urlencode(l1)&"&time="&l2&"');};"elseI1=I1&"if(datediff>"&r_uptime&"){getdom('"&king.page&"onepage/create.asp?listid="&server.urlencode(l1)&"');};"end ifupdatejs=I1end function

2.同文件夹下新建datemodify.js文件内容如下

Date.prototype.dateAdd = function(interval,number) {     var d = this;     var k={'y':'FullYear', 'q':'Month', 'm':'Month', 'w':'Date', 'd':'Date', 'h':'Hours', 'n':'Minutes', 's':'Seconds', 'ms':'MilliSeconds'};     var n={'q':3, 'w':7};     eval('d.set'+k[interval]+'(d.get'+k[interval]+'()+'+((n[interval]||1)*number)+')');     return d; } /* 计算两日期相差的日期年月日等 */ Date.prototype.dateDiff = function(interval,objDate2) {     var d=this, i={}, t=d.getTime(), t2=objDate2.getTime();     i['y']=objDate2.getFullYear()-d.getFullYear();     i['q']=i['y']*4+Math.floor(objDate2.getMonth()/4)-Math.floor(d.getMonth()/4);     i['m']=i['y']*12+objDate2.getMonth()-d.getMonth();     i['ms']=objDate2.getTime()-d.getTime();     i['w']=Math.floor((t2+345600000)/(604800000))-Math.floor((t+345600000)/(604800000));     i['d']=Math.floor(t2/86400000)-Math.floor(t/86400000);     i['h']=Math.floor(t2/3600000)-Math.floor(t/3600000);     i['n']=Math.floor(t2/60000)-Math.floor(t/60000);     i['s']=Math.floor(t2/1000)-Math.floor(t/1000);     return i[interval]; } 


此文件主要是方便计算时间差,有能力的也可以自己写,其中有对时间单位的定义,以后要修改就按这个改

{'y':'FullYear', 'q':'Month', 'm':'Month', 'w':'Date', 'd':'Date', 'h':'Hours', 'n':'Minutes', 's':'Seconds', 'ms':'MilliSeconds'};

再看fun.asp中updatejs的

I1="var newdate = new Date(new Date().getTime());var olddate = new Date('" & now() & "');var datediff=olddate.dateDiff('n',newdate);"

看见'n'了吗,这里代表分钟,以后要改时间单位就参照上面的定义输入代表字符就行。

 

3.最后要修改标签替换函数,因为咱们额外要调用一个datemodify.js,还是打开fun.asp,拉至底部找到function king_tag_onepage_update(tag)函数

整体替换为

function king_tag_onepage_update(tag)dim t_class,listid,jstimelistid=king.getlabel(tag,"listid")jstime=king.getlabel(tag,"time")king_tag_onepage_update="<script src="""&king.page&"onepage/datemodify.js""></script> " & "<script src="""&king.page&"onepage/update.js""></script> " set t_class=new onepageking.savetofile king.page&"onepage/update.js",t_class.updatejs(listid,jstime)'创建日期文件set t_class=nothingend function


至此修改就已经完成了,对于调用标签没有什么变化,只要注意time属性是以你自己定义的时间单位来计算的还有就是要刷新两次才能看到效果。

 

原创粉丝点击