存档:2008年四月

老了?

四月 26, 2008 | mysql | RSS 2.0

听歌不在喜欢听流行歌曲,都是选择 一些老的,去网吧发现都是,89,88 的,哎,真的老了啊,发现

没有评论 »

fck 的配置

四月 25, 2008 | c/c++ | RSS 2.0


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”>&nbsp;<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已经支持上传视频和音频文件,不过注意的是,如果视频文件太大,还是可能出现不能播放的情况

没有评论 »

sns的几篇文章

四月 1, 2008 | mysql | RSS 2.0

××思考:为什么BBS没有商业价值?

××对人的描述是SNS数据价值的基础

××是时候开发 APP,满足海内用户的特殊应用了?是的!

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就需要对“个人描述”的建立,做一些规划

没有评论 »