老了?
四月 26, 2008 | mysql | RSS 2.0
听歌不在喜欢听流行歌曲,都是选择 一些老的,去网吧发现都是,89,88 的,哎,真的老了啊,发现
一闪而过的思想,曾在这里短暂的停留
FCKConfig.FontNames =’宋体;楷体_GB2312;黑体;隶书;Times New Roman;Arial’ ;
FCKConfig.FontSizes = ‘9/最小;10/较小;12/中等;14/较大;16/最大 ‘ ;
使用百度空间自己的编辑器的都知道它有个简单、全部功能切换功能
想不想自己的编辑器也有这样的功能呢?
跟我来吧~
说在前面:我修改的和百度的不太一样 百度是利用table分割(在toolbarset中表现为’/'),我的则用竖线(’-')分割,比较喜欢简洁,因此是在一个table中利用不同td 的style属性来切换,适合单行功能显示,如需其他请自行修改~
可以参考百度的js http://hi.baidu.com/fc/editor/js/fckeditorcode_gecko.js
另:本文所做修改基于 fck 2.5 Beta(笔者所用为 Build 16848)
修改开始~
默认您的fckeditor置于fc目录下
我们先加一个单行所需全功能的toolbar
打开 fc/fckconfig.js
在114行左右 FCKConfig.ToolbarSets["Basic"] =…
下面新加
FCKConfig.ToolbarSets["Diy"] = [
['Bold','Italic','Underline','-','JustifyLeft','JustifyCenter','JustifyRight','-','Link','Unlink','Image','-','Smiley','-','FontName','FontSize','-','TextColor','-','BGColor','-','Source','Preview','About']
] ;
FCKConfig.AdvanceTrNum = 0;//默认无需修改
FCKConfig.AdvanceTr = [4,5,6,7,12,13,15,19,20,23];
//这里的数字就是toolbarsets["Diy"]数组中需要默认隐藏的按钮顺序,从1开始哦,比如[4,5,6]就是把‘-’,'JustifyLeft’,'JustifyCenter’ 这三个隐藏了
下面修改两个js文件
fc/editor/js/fckeditorcode_gecko.js
这个都是压缩过的,找个好使点的编辑器打开吧~
搜索 var i=0;i<this.Items.length;i++
原来的函数是
for (var i=0;i<this.Items.length;i++){this.Items[i].Create(C.insertCell(-1));};
修改成
for (var i=0;i<this.Items.length;i++){D=C.insertCell(-1);FCKConfig.AdvanceTrNum++;for(var x=0;x<FCKConfig.AdvanceTr.length;x++){if(FCKConfig.AdvanceTr[x]==FCKConfig.AdvanceTrNum){D.setAttribute(’advance’,true);D.style.display=’none’;break;}}this.Items[i].Create(D);};
fckeditorcode_ie.js 的修改相同
打开fc/editor/fckeditor.html
在 <script>标签中加入一个js函数
function chg(){
var d = document.getElementById(”xToolbar”).getElementsByTagName(”td”);
for(i=0 ; i<d.length; i++){
if(d[i].getAttribute(”advance”)){
d[i].style.display=(d[i].style.display==”none”)?”":”none”;
}
}
var div1 = document.getElementById(”chgbtn1″);
var div2 = document.getElementById(”chgbtn2″);
if(div1.style.display == “none”){
div1.style.display = “”;
div2.style.display = “none”;
}else{
div1.style.display = “none”;
div2.style.display = “”;
}
}
然后找到 <td id=”xToolbar” class=”TB_ToolbarSet”></td>
下面加入
<td align=”right” class=”TB_ToolbarSet” width=”60px” valign=”bottom”> <a href=”javascript:void(0);” onclick=”chg();” style=”font-size:12px;”><span id=”chgbtn1″ style=”display:none;”>简单功能</span><span id=”chgbtn2″ >全部功能</span></a>
</td>
fck的修改就到此完成啦
注意,如果简单/全部功能有乱码情况出现,可以尝试用记事本或其他编辑器把 fckeditor.html 另存为utf-8格式,乱码一般就会解决
下面给个初始化的例子,我用的php,就是:
require_once(’/fc/fckeditor.php’);
$BasePath = “/fc/”;
$oFCKeditor = new FCKeditor(’content’);
$oFCKeditor->BasePath = $BasePath;
…
$oFCKeditor->ToolbarSet = ‘Diy’;
….
指定toolbar用刚才添加的Diy就可以了
这样就达到和百度一样的切换功能啦,默认是简洁模式,点击全部功能就会出现所有按钮。
再次赞一下fckeditor,新版2.5已经支持opera9.5以上版本了,相当不错
说一下百度发文/编辑页面关闭或者刷新时的提示
这个就是使用了简单的 onbeforeunload 事件
可以在发文/编辑的页面里面加入以下js函数
window.onbeforeunload = function(event){
confirm_msg = “您的文章内容还没有进行保存!”;
event = event || window.event;
event.returnValue = confirm_msg;
}
返回的消息可以自定义
但是问题又出来了,有些时候并不想要这个提示,比如刷新的时候
那么我们再加入个事件
window.onkeydown = function (event){
event = event || window.event;
var currentKey = event.charCode||event.keyCode;
//var eventSource = event.srcElement||event.target;
//alert(’currentKey: ‘+currentKey+’eventSource: ‘+eventSource.toString());
if(currentKey==’116′){//F5
window.onbeforeunload = null;
}
}
当有按键按下时触发此函数
如果按下的为F5,那么就清除window.onbeforeunload 事件,使得刷新页面时不提示
其他的按键可以自己diy哦
我在ie7测试以上代码的时候,离开页面时出现提示,点击确定则继续执行,点击取消的话虽然操作被中止了,但是ie7抛出一个js错误,firefox无此问题,百思不得其解,所以暂时想了个办法,屏蔽掉它~
window.onerror=function(){return true;};
这样这个离开提示在firefox和ie下都很完美的工作啦,不过opera尚未支持哦
这样就基本达到了百度这样的功能切换和离开页面的提示效果~
很简单吧~~
后记:发现一点,发文提交时也会提示,这岂不是很影响用户体验~
那么接着修改一下:
将表单的submit提交改为button触发js提交
例如以前的提交按钮为 <input type=”submit” name=”submit” value=”提 交” />
<input type=”button” name=”submit” value=”提 交” onclick=”sub(this.form)” />
然后加入一个javascript函数用于提交
function sub(f){
window.onbeforeunload = null;
f.submit();
}
这样提交时就不会有提示信息了
有的朋友可能会有问题了:如果我需要做表单检查怎么办?在form标签中用的是 onsubmit=”return check(this)” 来做表单的js验证
比如check函数为
function check(f){
if(f.title.value==” || f.content.value==”){
alert(’请填写完整!’);
return false;
}
return true;
}
那么修改一下,在from标签中去掉 onsubmit=”return check(this)” 这个
然后把刚才的提交函数修改一下,就OK了
function sub(f){
if(check(f)){
window.onbeforeunload = null;
f.submit();
}
return false;
[原创]如何在FCKeditor 2.6中添加插入视频和音频功能
FCKeditor 是现在用的最多的可视编辑器,乐乎也是使用了该编辑器,应大家的要求,添加了插入视频和音频的功能,因为2.6版的修改可能和其他版本不一样,所以我把修改的地方列举出来,格式我是看到网上有位同志的格式很好,照抄的,内容已经修改
修改前注意备份文件,以免造成不必要的麻烦。
一、分别打开:editor/js/fckeditorcode_ie.js和/editor/js/fckeditorcode_gecko.js
找到程序代码
| 以下是代码片段: ||/.swf($|#|?)/i.test(A.src) |
这段代码的主要用来判断后缀名,如果后缀名不是swf则返回,把它替换为:
以下是代码片段: ||/.swf($|#|?)/i.test(A.src)||/.mpg($|#|?)/i.test(A.src)||/.asf($|#|?)/i.test(A.src)||/.wma($|#|?)/i.test(A.src) ||/.wmv($|#|?)/i.test(A.src)||/.avi($|#|?)/i.test(A.src)||/.mov($|#|?)/i.test(A.src)||/.mp3($|#|?)/i.test(A.src) ||/.rmvb($|#|?)/i.test(A.src)||/.mid($|#|?)/i.test(A.src) |
文件格式可以根据情况来修改,但是注意要和其他的几个地方吻合
二、打开/editor/dialog/fck_flash/fck_flash.js
1、增加程序代码,这段代码用来判断后缀名
| 以下是代码片段: function WinPlayer(url){ var r, re; re = /.(avi|wmv|asf|wma|mid|mp3|mpg)$/i; r = url.match(re); return r; } function RealPlayer(url){ var r, re; re = /.(.rm|.ra|.rmvb|ram)$/i; r = url.match(re); return r; } function QuickTime(url){ var r, re; re = /.(mov|qt)$/i; r = url.match(re); return r; } function FlashPlayer(url){ var r, re; re = /.swf$/i; r = url.match(re); return r; } |
2、替换程序代码,这段代码是在UpdatePreview中用来添加type属性
| 以下是代码片段: SetAttribute( e, ‘type’, ‘application/x-shockwave-flash’ ) ; |
为
| 以下是代码片段: if(WinPlayer(GetE(’txtUrl’).value)!=null){ SetAttribute( e, ‘type’, ‘application/x-mplayer2′ ) ; } if(RealPlayer(GetE(’txtUrl’).value)!=null){ SetAttribute( e, ‘type’, ‘audio/x-pn-realaudio-plugin’ ) ; } if(QuickTime(GetE(’txtUrl’).value)!=null){ SetAttribute( e, ‘type’, ‘application/video/quicktime’ ) ; } if(FlashPlayer(GetE(’txtUrl’).value)!=null){ SetAttribute( e, ‘type’, ‘application/x-shockwave-flash’ ) ; SetAttribute( e, ‘pluginspage’, ‘http://www.macromedia.com/go/getflashplayer’ ) ; } |
3、替换程序代码,这段代码是在UpdateEmbed中用来添加type属性
| 以下是代码片段: SetAttribute( e, ‘type’ , ‘application/x-shockwave-flash’ ) ; SetAttribute( e, ‘pluginspage’ , ‘http://www.macromedia.com/go/getflashplayer’ ) ; |
为
| 以下是代码片段: if(WinPlayer(GetE(’txtUrl’).value)!=null){ SetAttribute( e, ‘type’ , ‘application/x-mplayer2′ ) ; SetAttribute( e, ‘autostart’, GetE(’chkAutoPlay’).checked ? ‘true’ : ‘false’ ) ; } if(RealPlayer(GetE(’txtUrl’).value)!=null){ SetAttribute( e, ‘type’ , ‘audio/x-pn-realaudio-plugin’ ) ; SetAttribute( e, ‘autostart’, GetE(’chkAutoPlay’).checked ? ‘true’ : ‘false’ ) ; } if(QuickTime(GetE(’txtUrl’).value)!=null){ SetAttribute( e, ‘type’ , ‘video/quicktime’ ) ; SetAttribute( e, ‘autostart’, GetE(’chkAutoPlay’).checked ? ‘true’ : ‘false’ ) ; } if(FlashPlayer(GetE(’txtUrl’).value)!=null){ SetAttribute( e, ‘type’ , ‘application/x-shockwave-flash’ ) ; SetAttribute( e, ‘pluginspage’ , ‘http://www.macromedia.com/go/getflashplayer’ ) ; } |
三、打开/fckconfig.js,该文件为配置文件
替换程序代码,这个是在上传文件的时候检查后缀名
| 以下是代码片段: FCKConfig.FlashUploadAllowedExtensions = “.(swf)$” ; // empty for all |
为
| 以下是代码片段: FCKConfig.FlashUploadAllowedExtensions = “.(swf|fla|mpg|asf|wma|wmv|avi|mov|mp3|rmvb|mid)$” ; // empty for all |
三、打开/editor/lang/zh-cn.js 文件,该部分为语言文件,Flash替换掉就可以了
然后整体修改完成,现在lehu已经支持上传视频和音频文件,不过注意的是,如果视频文件太大,还是可能出现不能播放的情况
http://www.cyzone.cn/forum/27489_1_1.aspx
昨天海内好友聚会,欢迎罗娜同学,围绕海内讨论的很热烈,也见到了王兴,中间问了他有没有考虑过针对用户加TAG。
但是没说太清楚,现在想过之后,补充一下。
SNS把场子开了,让用户玩起来,但每个用户在玩的过程中,其实都在无意中不断的为SNS积累数据,这些数据可能现在就有用,也可能需要到了门槛之后才能用起来。这些数据和承载数据的用户一起,其实是SNS最重要的资产。
更多的吸引用户,让用户活跃起来,留下更多痕迹,然后积累更多数据,应该是SNS的主要任务吧。
如何有效地积累、管理和利用这些数据,是SNS能有多大成功的关键。
要哪些数据呢?
1、对用户个人特性描述的数据,如类型、个性、爱好、背景等;
2、用户行为和行为的对象数据;
3、用户的关系数据,如关系的广度、层次、频度差异、相互关系(单向还是双向)、传播路径等。
也许还有其他的……
这些数据是互相关联的,如同类型和紧密型好友的推荐更有价值等,如从哪里开始传播更有效等等。
对用户TAG其实要收集的是第一类数据,原本大多是从行为和关系间接推出对用户个人的描述的,但如果能直接得到这种数据,会对SNS和用户有很大的帮助。当然如何做,如何不引起用户的不适,使需要探讨的问题。
这些数据用在哪里呢?
1、推荐和寻找人;
2、推荐和筛选内容;
3、推荐商品和服务;
4、广告定投。
也许还有其他的……
推荐/过滤,以及未来SNS的盈利前景都依赖于积累的数据量和数据挖掘的质量。
—————————————-Update————————————————-
如果进一步说明确点的话,个人认为“个人的全面描述”其实就是SNS最重要的产品。
(希望不要进一步引起隐私权的讨论:))
在SNS的数据库中,最重要的一张表之一就应该是“个人的全面描述表”。
这个表中涵盖了用户个人信息的不同维度,如个人基本信息、个人所归类的原型、活动频度、在关系图中的位置/重要性/作用、感兴趣的事物(内容、物品和服务等行为的指向物)等等。
SNS需要定期(比如说1个月)在积累的原始数据基础上,挖据出与个人描述相关的信息,更新到“个人的全面描述表”中去,而不是在需要匹配的时候再历遍数据库。
SNS需要定期的审视表格中的薄弱环节,用引入新的APP,加强对不活跃用户(尤其是不活跃的节点)的推送,让用户动起来,从用户的活动痕迹中去挖据数据。
从这个意义上讲,提供平台、引入APP、机器推荐等都是生产“个人描述”的中间环节。
SNS的商业价值基本都来自于这张表格的质量。如果哪一天海内也和51一样有1亿用户,而且海内能让大家都活跃起来,我们可以想象一下海内的商业价值比51大多少倍?!
也许在建站初期,SNS就需要对“个人描述”的建立,做一些规划