Categories
Friendly Link
订阅 与 统计

0299253

歪酷博客
« 上一篇: 19号... 下一篇: 歪酷 模板——思念。 »
销魂 @ 2006-07-21 23:34

为不太会代码的朋友着想....整理了一下代码....
只剩下小2段...喜欢的朋友...只要把代码加到模板的任何位置就行..

<script type='text/javascript' src='http://www.igogo8.com/js/g.js'></script>
这个是彩字回复!!

表情回复[已加注解]
===========整理更新===========
提问的人依旧很多,因此在此进行整理总结,加上小小更新。

代码如下:其中说明部分(红、绿色)可以删去

<script type="text/javascript">
<!--
function addtext(s){
    document.getElementsByTagName("textarea")[0].value = document.getElementsByTagName("textarea")[0].value + s
}
if(document.getElementById("authcode_td1")){
    /**********************自定义部分开始***************************/
    //图片地址,分三段:基本地址(所有图片地址相同的部分)、图片文件名、图片扩展名。而一个完整的图片地址就是urlBase+picName+picNameExt组成的。如果使用的图片格式不同,但存在相同的地址部分,则picNameExt="",然后在picName中加上相应的扩展名;如果不存在相同的地址部分,则urlBase="",然后在picName中包含完整图片地址;如果图片格式既不相同,也不存在相同的地址部分,则上述两条综合即可。以下内容的情况下,第一个图标的地址为http://a.yculblog.com/photo/b/b/m002.gif。以此类推。

    var urlBase = "http://a.yculblog.com/photo/b/b/";
    var picName = new Array("m002", "m034", "m036", "m029", "m020", "m073", "m039", "m040", "m011", "m009", "m010", "m180", "m027", "m025", "m018", "m070", "m023", "m309", "m921");
    var picNameExt = ".gif";
   
    //这一部分是关键的部分。smileyCode是表情的代码,一般推荐填写有意义的符号串,当然,图方便也可以用编号。smileyReg是相应表情代码所对应的正则表达式。如果你对正则表达式不熟悉,请不要修改这里的东西。这两个数组中的内容的顺序和上边picName中的顺序是一一对应的。
    var smileyCode = new Array("[:-D]", "[:-)]", "[>_<]", "[:-(]", "[;-)]", "[*^_^*]", "[T_T]", "[-_-b]", "[:-O]", "[=_=]", "[#_#]", "[180]", "[@_@]", "[;-_-]", "[^.^]", "[XD]", "[-_-!!]", "[309]", "[921]");
    var smileyReg = new Array(/\[:-D\]/g, /\[:-\)\]/g, /\[&gt;_&lt;\]/g, /\[:-\(\]/g, /\[;-\)\]/g, /\[\*\^_\^\*\]/g, /\[T_T\]/g, /\[-_-b\]/g, /\[:-O\]/g, /\[=_=\]/g, /\[#_#\]/g, /\[180\]/g, /\[@_@\]/g, /\[;-_-\]/g, /\[\^\.\^\]/g, /\[XD\]/g, /\[-_-!!\]/g, /\[309\]/g, /\[921\]/g);
   
    //这里是新增的变量,用于控制每行显示多少个图标,请适度。
    var smileyPerLine = 7;       
   
    //这里是用于提示的内容,就像回复框的姓名、电邮、个人主页一样。不宜太长。
    var strTitle = "图标";
    /**********************自定义部分结束***************************/
    var i, j;
    var s2="";
    for(i=0; i < picName.length; i++){
        s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";
        if(i>0&&i%(smileyPerLine-1)==0){
            s2=s2+"<br />";
        }
    }
   
    //get target
    var inputs = document.getElementsByTagName("input");
    var td, tbs;
    for(i=0; i < inputs.length; i++){
        if(inputs[i].getAttribute("name") == "url"){
            tbs = inputs[i].parentNode.parentNode.parentNode;
            break;
        }
    }
   
    //Smiley
    var trs = tbs.insertRow(4);
    if(trs){
        var tds = trs.insertCell(-1);
        if(tds){
            tds.innerHTML=strTitle;
            tds.setAttribute("align", "right");
            tds.setAttribute("valign", "top");
            tds.style.paddingTop = "20px";
        }
        td = trs.insertCell(-1);
        if(td){
            td.innerHTML=s2;
        }
    }

    //parser
    var blocks = document.getElementsByTagName("blockquote");
    for(i=0; i < blocks.length; i++){
        for(j=0; j < smileyReg.length; j++)
        blocks[i].innerHTML = blocks[i].innerHTML.replace( smileyReg[j], "<img src='" + urlBase + picName[j] + picNameExt + "' alt='' />" );
    }
}
//-->
</script>

===========更新===========
关于如何换行,说明一下:

        if(i>0&&i%6==0){
            s2=s2+"<br />";
        }

加在:
s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";
后边。

其中的数字6改成每行的个数。
--------------------------
===========更新===========

目前的代码有两种版本,一种是
td.innerHTML= td.innerHTML + s2;
将表情图标插在评论框上边的,

另一种是:
td = trs.insertCell(-1);
if(td){
td.innerHTML=s2;
}


针对这两种,首先,需要将代码中的inputs[i].getAttribute("name") == "is_private"中的is_private改成url

然后对于第二种版本的代码,需要找到var trs = tbs.insertRow(5);一行,将其中的5改为你自己的行号。5的话,应该会在评论框的下边。

原因是不是因为“丢小纸条”,而是因为歪酷把评论“不公开”给去掉了,原来的代码中给表情图标定位是依赖于"不公开"的那个选框的。现在改掉了,改成url,也就是网址的输入框,不论如何,歪酷不会把这个也给去掉吧。

PS:歪酷是不是觉得版聊很猖狂,所以才给加上小纸条的呢?而且似乎小纸条也具有不公开的特性,所以歪酷就索性把不公开给去掉了。

--------------------------
首先,这个东西的功能很简单,就是在评论框上边的"不公开"后边的checkbox的表格单元中,新起一行,将表情图标的html代码(<img />)加进去。然后点击某个图标,就会在评论框中内容的最后加上该图标对应的表情代码(如[:-)])。评论发布后,程序的最后一段专门负责将所有评论(确切的说是所有blockquote)的内容中的表情代码替换成表情图标的html代码。

注意:只适用于所有图标文件来自同一地址同一目录。默认只适用于gif图标文件。若要使用jpg文件,请将代码中的gif替换成jpg。但是,此修改将变成只能使用jpg,而无法使用gif。若要混用,则将代码中的gif删除,在添加文件名的数组中,加上点号和扩展名,应该就可以了。不过估计这种情况十分少见,绝大大部分应该还是gif的。

至于这段脚本的添加位置,最好加在模板代码的包含了{ content }的标签的后边。

比如是<div>{ content }</div>之后,或者是<td>{ content }</td>之后(未经测试)

如果你实在不知道加在什么地方,那么加在模板的##FOOTER##之前应该也是可以的。

转载、使用请注明出处,谢谢

下边是全部代码的注释说明:


<script type="text/javascript">
<!--
//函数 addtext
//用途 将参数s的内容作为字符串添加到评论框中。
function addtext(s){
//考虑到页面上只会有一个评论框存在,因此直接使用getElementsByTagName取得
//得到评论框对象后,将s添加到评论框内容的末尾。
document.getElementsByTagName("textarea")[0].value = document.getElementsByTagName("textarea")[0].value + s
}
//开始主程序
//判断是否在单篇日志的页面,判断方法是页面中是否有验证码
if(document.getElementById("authcode_td1")){
//判断成功
var i, j; //循环计数
//自定义参数之一:
//用于指定图标文件地址的url路径,到最后一层文件夹为止
//也就是说这个url后边就是****.gif的图标文件了。
//可自定义。
var urlBase = "http://booker.yculblog.com/images/smiley/1/";
//自定义参数之二:
//表情图片文件的文件名。紧接着上一参数,不包括点号和扩展名。
//注意:为了缩短代码长度,只考虑这些表情是来自同一地址的同一目录。
//可自定义。
var picName = new Array("1", "2", "3", "4", "5", "6", "7", "8", "10", "11", "19", "20");
//自定义参数之三:
//数组,用于保存图标对应的代码,可自定义。
var smileyCode = new Array("[:-)]", "[:-(]", "[XD]", "[;-)]", "[*^_^*]", "[:-O]", "[o_O]", "[T_T]", "[-_-b]", "[:-D]", "[#_#]", "[^.^]");
//自定义参数之四:
//这个最难,虽然说上边都很好自定义。但这个就有难度了。
//此参数为一个正则表达式数组。用于对应上边的表情代码。
//可自定义。
var smileyReg = new Array(/\[:-\)\]/g, /\[:-\(\]/g, /\[XD\]/g, /\[;-\)\]/g, /\[\*\^_\^\*\]/g, /\[:-O\]/g, /\[o_O\]/g, /\[T_T\]/g, /\[-_-b\]/g, /\[:-D\]/g, /\[#_#\]/g, /\[\^\.\^\]/g);

//定义表情图表列表
var s2 ="<br />";
//根据图标的数量,用循环将所有图表的html代码加在一起
for(i=0; i < picName.length; i++){
//其中有定义了鼠标指针为手,加入了点击事件。
//点击事件调用最初定义的函数addtext
s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";
}

//定位
//获得当前脚本以前的html代码中的所有的input对象
var inputs = document.getElementsByTagName("input");
var td;//用于保存“不公开”选框外边的td对象
for(i=0; i < inputs.length; i++){
//如果该input对象的name属性为"is_private"
//则就是我们要找的,取得其parentNode,也就是那个td对象
//中止循环
if(inputs[i].getAttribute("name") == "is_private"){
td = inputs[i].parentNode;
break;
}
}

//如果找到该td
if(td){
//取得该td外的tr对象
var tr = td.parentNode;
//将上边生成的表情图标列表添加到复选框的后边(有换行)
td.innerHTML= td.innerHTML + s2;
//将"不公开"三个字所在的表格设为纵向顶端对齐
tr.getElementsByTagName("td")[0].setAttribute("valign", "top");

//开始对已有评论中的表情代码进行替换
//由代码(如[:-)])到图片的html代码
//取得所有的blockquote,因此,也许存在误杀(正文中的blockquote)
var blocks = document.getElementsByTagName("blockquote");
//二重循环,搜索每个blockquote中的每种表情代码,如果有,就替换。
for(i=0; i < blocks.length; i++){
for(j=0; j < smileyReg.length; j++)
blocks[i].innerHTML = blocks[i].innerHTML.replace( smileyReg[j], "<img src='" + urlBase + picName[j] + ".gif' alt='' />" );
}
}
}
//-->
</script>


补充说明 :

虽然在回复别人的评论的时候,也是可以使用表情图标的,不过似乎必须得用表情代码代替。不能那么直观的点点就成。

考虑到一种解决办法,就是写一个Greasemonkey的javascript脚本,用于在管理回复的时候,在页面上显示出可以点击操作的表情图标。这个不是很难。

对于不知道Greasemonkey是什么的人,我只能很抱歉,如果你要回复别人的评论的时候用表情图标,就必须得用表情代码。值得庆幸的是,表情代码是可以自定义的。

再补:
关于使用不同网站的不同目录的不同格式的图片的问题:

首先,如果用不同格式的图片,把代码中的.gif删掉。然后用不同网站不同目录的图片的情况,请把urlBase的值设为空。然后在图片名的数组picName中,使用完整的图片的url就可以了。其实这个urlBase只是为了缩短代码长度。

看来兼容性还是不错的。

--------再补--------

关于增加表情的问题。

首先,回复框的表情列表中的显示数量是由picName中的数量决定的。

其次,如果要增加表情,最好同时在picName、smileyCode和smileyReg中增加。这三者是对应的。要增加更多的图标,就得给出对应的smileyCode和smileyReg。表情代码(smileyCode)可以随便写,但是要在smileyReg中加上对应的正则表达式。

第三,要增加表情图标,请首先确定图标对应的表情代码,然后去简单的学习一下正则表达式,至少要知道正则表达式中有哪些关键字符。然后自己写出对应的正则表达式。虽说有句话叫“好人做到底,送佛送到西”,但是我选择另一句,叫做“授人以鱼不如授人以渔”。

第三,解释一下这个脚本的原理:点击图标,就在留言中插入对应的符号。而另外有一段程序,专门用于把这些符号重新显示成对应的图标。而替换的过程中,就是使用SmileyReg,找到对应的smileyCode,然后再替换成相应的picName。

第四,怀疑歪酷对回复框的后台代码进行了修改,导致原来的[ >_< ]变成了[ &gt;_&lt; ]。要正常显示,请将smileyReg里的/\[>_<\]/g改成/\[&gt;_&lt;\]/g。

来自:石头兔



最新评论 (点击这里查看更早的所有评论...)


JJYY

2006-11-22 21:16

好像是要把原文中的
http://a.yculblog.com/photo/b/b/
换成新相册 http://foto.yculblog.com/booker/
就可以连了


2006-11-22 21:44 网址: http://mynewworld.ycool.com/

复制了你的屋子里的时光模版,但怎么改文字的颜色呢?[^.^]麻烦了,还有怎么吧自己喜欢的图片作为模版的主题呢?

文字在CSS中修改。图片修改模板中的,地址。。

2006-11-24 19:27 网址: http://xiao6.ycool.com/

是因为YCUL的相册是类似这样的地址:http://foto.yculblog.com/hiphop/1.GIF
所以var urlBase = "http://foto.yculblog.com/hiphop/";
再次请注意这幅名为“1”的图片的格式,是.GIF而不是.gif....
所以将下面的".gif"换成".GIF"既可
var picNameExt = ".gif";
// 定义图片后缀,改为:var picNameExt = ".GIF";

s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";
//定位图片,改为s2 = s2 + "<img src='" + urlBase+picName[i] + ".GIF' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";

应该就可以了.
以前来BLOG MASTER这里拿过点东西,现在用这个还上 呵呵...



六月朝歌

2006-11-24 19:28

[:-O]
不过对了....那个彩色字是什么意思?
还有博主回复时候那个东东/.....
想知道...



六月朝歌

2006-11-24 19:38

- -! 补!
去看下你的图片格式 是gif就不用改 是大写的GIF就改了~ 如果图片后缀有大写有小写,你就先把后缀改成一样的!


2006-11-24 22:47 网址: http://xiao6.ycool.com/

表情搞好了 有个小问题
为什么定义的 var smileyPerLine = 4;(我的),但是显示时候第1排多一个?[:-(]


2006-11-25 14:49 网址: http://denggaoyuantiao.ycool.com/

[:-D]回复表情搞好了,我还加了几个呢。谢谢楼主啊。每篇文章的开头都有一朵花。不知道是怎么弄的。

嗯。。这个问题。。。有空到论坛看看。。这个很好说的。。如果论坛没有答案在那里发给帖求助一下。嘎嘎。

2007-03-02 10:34 网址: http://only55.ycool.com/

为什么我加了N次...   就是没有来着[;-_-][-_-!!][:-O][:-(]



ssd

2007-05-06 10:55 匿名 60.190.*.*


2007-06-24 17:57 网址: http://xiao6.ycool.com/

[*^_^*]
灌水


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定