2005年05月12日 12:40

在FC2回應欄加上繪文字

在FC2回應欄加上繪文字終於試成功!!感謝日本的stroll::blog,發明這麼好用的東東,這隻程式是stroll::blog寫的,小倩在這裡用中文的方式介紹給大家,另外也感謝在vera在emmily家提供這個資訊

◎本教學來源(日本的stroll::blog):http://melrose.jugem.cc/?eid=199

  • 難易度: 難,建議具備HTML和CSS基礎者嘗試,建議在試本篇之前先試成功在FC2的文章發表時加上繪文字這篇
  • 可使用的BLOG: 可編輯完整的樣版HTML檔,且回應欄禁止使用HTML語法的BLOG(回應欄可用語法的BLOG可直接用貼圖語法插入繪文字圖片)
  • 注意事項: 回應數量太多時,繪文字的轉換時間也會變長,同樣的道理,繪文字如果登錄太多時也會影響到顯示速度,所以建議不要放太多繪文字上去(不要超過20個).
  • 準備繪文字: 準備繪文字圖片,並上傳到FC2的檔案庫內, 此部份請見之前的相關教學,請不要再在本篇問這類的問題
  • 請留意共有三段SCRIPT程式需要加入到樣版的HTML檔內,在修改前建議您先備份原本的樣版HTML檔
  • 樣版的HTML如何進入和修改請見:中文化教學這篇

*設置方法-指定繪文字的圖片路徑及名稱
程式一:(以下程式需修改畫像名和畫像URL):

<script type="text/javascript">
<!--
// コメントにカスタマイズ絵文字入力機能:画像設定
function getCommentEmojiList() {
var list = new Array();
// 修改以下設定:繪文字的名稱(画像名)和繪文字的URL(画像URL)設定
list[list.length] = new Array('画像名', '画像URL');
list[list.length] = new Array('画像名', '画像URL');
list[list.length] = new Array('画像名', '画像URL');
return list;
}

function getCustmizeEmojiAttribute() {
// 画像タグに含める属性値(alt属性以外)
var att = 'border="0" style="vertical-align:middle"';

// ***************** 設定ここまで *****************
att = (att != '') ? (' ' + att) : '';
return att;
}
// -->
</script>


修改範例:
// 繪文字的名稱和繪文字的URL設定範例(為了避免非漢字的中文轉換失敗,建議畫像名不要用中文字)
list[list.length] = new Array('f10', 'http://blog6.fc2.com/p/petlife/file/f10.gif');
list[list.length] = new Array('f09', 'http://blog6.fc2.com/p/petlife/file/f09.gif');
上述的語法修改好請放到樣版HTML檔的</head>的上一行


*回應欄繪文字的轉換-設置方法

程式二:(以下程式需修改(2)(3)):

<script type="text/javascript">
<!--
// コメントにカスタマイズ絵文字入力機能:画像変換
function changeCustmizeEmojiTag() {
// (1)回應欄全體的ID
var commentAreaIdName = '';
// (2)回應欄的HTML Tags
var commentAreaTag = 'div';
// (3)各回應欄的CLASS名
var commentBodyClassName = 'abc';

// ***************** 設定ここまで *****************
var list = getCommentEmojiList();
var att = getCustmizeEmojiAttribute();
var objComArea;
var classComArea;
var objComBody = new Array();
if (commentAreaIdName != '') {
objComArea = document.getElementById(commentAreaIdName);
if (!objComArea || !objComArea.innerHTML) return;
classComArea = objComArea.getElementsByTagName(commentAreaTag);
} else {
classComArea = document.getElementsByTagName('*');
}
for (var i = 0; i < classComArea.length; i++) {
if (classComArea[i].className == commentBodyClassName) objComBody[objComBody.length] = classComArea[i];
}
for (var i = 0; i < objComBody.length; i++) {
objComBody[i].innerHTML = getStringCustmizeEmojiTag(list, objComBody[i].innerHTML, att);
}
}

function getStringCustmizeEmojiTag(list, s, att) {
for (var i = 0; i < list.length; i++) {
s = s.split('[' + list[i][0] + ']').join('<img src="' + list[i][1] + '"' + att + ' alt="' + list[i][0] + '" />');
}
return s;
}
changeCustmizeEmojiTag();
// -->
</script>


需修改的部份:(2)回應欄的HTML Tags(3)各回應欄的CLASS名
搜尋樣版HTML裡的這個字<%comment_body>,並留意這句前後的語法

範例一(小熊系列樣版):<div class="entry_text"><%comment_body></div>
(2)回應欄的HTML Tags
var commentAreaTag = 'div';
(3)各回應欄的CLASS名
var commentBodyClassName = 'entry_text';

範例二(spring_flower):<p><%comment_body></p>,如果你的<%comment_body>前面的標籤並沒有設定class名,請自訂一個名字,如:abc
自訂一個class名,改成:
<p class=abc><%comment_body></p>
(2)回應欄的HTML Tags
var commentAreaTag = 'p';
(3)各回應欄的CLASS名
var commentBodyClassName = 'abc';

範例三(cafe):<div class="td"><%comment_body></div>
(2)回應欄的HTML Tags
var commentAreaTag = 'div';
(3)各回應欄的CLASS名
var commentBodyClassName = 'td';

本段程式的放置位置:加在<!--/comment-->的前一行...


*回應表單繪文字圖片的顯示-設置方法
程式三:(以下程式需修改回應欄位的指定):

<script type="text/javascript">
<!--
// コメントにカスタマイズ絵文字入力機能:画像リスト出力
function writeCustmizeEmojiTagList() {
// 本段程式需修改此:回應欄位的指定
var textarea = 'document.comform.leavecomment';

// ***************** 設定ここまで *****************
var list = getCommentEmojiList();
var att = getCustmizeEmojiAttribute();
for (var i = 0; i < list.length; i++) {
window.document.write('<a href="javascript:;" onClick="addCustmizeEmoji(' + textarea + ', \'' + list[i][0] + '\');"><img src="' + list[i][1] + '"' + att + ' alt="' + list[i][0] + '" /></a>');
}
}

// reference from jugem.jp (c)
function addCustmizeEmoji(obj, tag) {
var item = '[' + tag + ']';
if (document.selection) {
obj.focus();
sel = document.selection.createRange();
sel.text = item;
} else if (obj.selectionStart || obj.selectionStart == '0') {
var startPos = obj.selectionStart;
var endPos = obj.selectionEnd;
obj.value = obj.value.substring(0, startPos)
+ item + obj.value.substring(endPos, obj.value.length);
} else {
obj.value += item;
}
}
writeCustmizeEmojiTagList();
// -->
</script>

修改方式:
先搜尋樣版HTML檔的<form method="post" action="./">
將form加上name的屬性,修改後成為:<form name=comform method="post" action="./">

搜尋comment[body]這個字,查看裡面的id的值:
範例一:<textarea id="comment" cols="35" rows="8" name="comment[body]"></textarea><br>
id則為:comment
將上面的這一行改成
var textarea = 'document.comform.comment';

範例二:
<textarea id="leavecomment" cols="50" rows="8" name="comment[body]" tabindex="4"></textarea>
id則為:leavecomment
將上面程式的的這一行改成
var textarea = 'document.comform.leavecomment';

修改完成後將這段SCRIPT 放到剛才的回應框語法<textarea id="comment"...> 這段的前面,這樣顯示出來的繪文字會才會在回應內容輸入框的正上方.

◎如何知道是哪一段程式設錯:
  • 回應欄上面的表情符號圖片變成叉燒包-請檢查程式一的圖片路徑
  • 回應欄上面已經會出現表情符號的小圖了,但點了不會帶到回應框裡-程式三的var textarea = 'document.comform.leavecomment';設定錯誤.
  • 回應內容不會轉成表情符號-程式二的(1).(2).(3)設定錯誤,或SCRIPT放錯位置
  • 改樣版時,請重新將本語法COPY進新樣版,並重新確認,程式二和三需要修改的值

  • petlife 發表於樂多回應(18)引用(0)FC2應用編輯本文
    │昨日人次:0 │累計人次:27
    Ads by Roodo! 

    引用URL

    http://cgi.blog.roodo.com/trackback/178552
    回應文章

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    測試一下...[f07][f10]
    | 檢舉 | Posted by 小倩 at 2005年05月12日 03:43

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    是回應欄上面的表情符號圖片出不來嗎?
    可以貼一下這裡設的語法出來嗎?
    list[list.length] = new Array('画像名', '画像URL');

    | 檢舉 | Posted by 小倩 at 2005年05月12日 07:04

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    恭喜Emily試成功了[f09]
    Dear jovy
    你程式二好像放錯地方了要放到<!--/comment-->的上一行(有個反斜線喔!)
    | 檢舉 | Posted by 小倩 at 2005年05月12日 10:42

    TITLE:
    SECRET: 0
    PASS: ec6a6536ca304edf844d1d248a4f08dc
    好的,無論有艱難我一定要弄成功,哼哼!!!![f01]
    | 檢舉 | Posted by 桌子 at 2005年05月12日 12:28

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    之前看日文說明在試時真的很辛苦,一下子按了圖不會出現在回應欄裡,一下子回應內容上的繪文字不會轉成圖...
    不過後來研究出它的邏輯之後就簡單多了,所以現在應該不會太複雜,但可能不適合常改樣版的人吧![f09]
    | 檢舉 | Posted by 小倩 at 2005年05月12日 15:20

    TITLE:
    SECRET: 0
    PASS: ec6a6536ca304edf844d1d248a4f08dc
    耶 [f10]v 成功了!!!!!

    thank you 小倩
    | 檢舉 | Posted by 桌子 at 2005年05月12日 15:32

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    Dear jovy :
    是你的CSS設定問題,
    把兩個CSS裡的border:1px改成border:0px
    .entry_text img
    .pay img
    Dear Lady Ruffle :
    我也是正好發現,放上去試試看,我還沒在中文的BLOG測,如果中文的BLOG也能支援的話,可能會大力的推薦給大家,但目前測加入FC2的BLOG就會輪撥大家的標題.
    | 檢舉 | Posted by 小倩 at 2005年05月13日 07:47

    TITLE:
    SECRET: 0
    PASS: ec6a6536ca304edf844d1d248a4f08dc
    小倩,那個paipo reader我也跟著你的腳步註冊了一個,的確很好用,也嘗試抓天空部落的 RSS也成功了,不過怎麼我試來試去只能設三個 RSS 網址,加第四個時不管怎樣也加不進去,到底是什麼理由[f01]
    | 檢舉 | Posted by 桌子 at 2005年05月13日 15:18

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    Dear scarlet
    等你有空時再來研究吧!以你的功力一定可以馬上成功的。
    Dear 桌子
    不會呀!我加入七個網址了,有可能是你第四個網址的RSS有問題。
    如果輸入BLOG的網址時,它抓不到正確的RSS的話,你可以直接輸入RSS的位置,像目光的我輸入0.92版的才成功.
    | 檢舉 | Posted by 小倩 at 2005年05月13日 16:37

    TITLE:
    SECRET: 0
    PASS: d9b1d7db4cd6e70935368a1efb10e377
    不過,這個真是太勞師動重了!

    我看以後可能不太敢換版面![f10]
    | 檢舉 | Posted by scarlet at 2005年05月14日 03:05

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    原網站寫的比較複雜,而且不是針對FC2來寫的,所以之前在研究哪一段加在哪時花了一些時間,還參考了另一間有加回應繪文字的FC2的日本BLOG的原始碼才試成功,但了解規則後還滿簡單的,只是每換一次版面就要加一次...而且還要對對看CSS的參數有沒有改,這也是滿累的...

    | 檢舉 | Posted by 小倩 at 2005年05月14日 05:09

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    (1)回應欄全體的ID
    這個可以不用輸入,寫了反而容易錯,他是用CSS繼承的概念.
    我幫你看了一下這句錯了,id="comment"就可以了
    <textarea id="var textarea = 'document.comform.comment'" cols="40" rows="8" name="comment[body]"></textarea>
    另外你<%comment_body>前後的語法是什麼?目前設的怪怪的...
    | 檢舉 | Posted by 小倩 at 2005年05月14日 10:08

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    <br>
    <%comment_body>
    <div class="comment_state">
    改成下面這樣試試看
    <br>
    <span class=abc><%comment_body></span>
    <div class="comment_state">

    然後(1).(2).(3)改成這樣
    // (1)回應欄全體的ID
    var commentAreaIdName = '';
    // (2)回應欄的HTML Tags
    var commentAreaTag = 'span';
    // (3)各回應欄的CLASS名
    var commentBodyClassName = 'abc';
    | 檢舉 | Posted by 小倩 at 2005年05月14日 11:32

    TITLE:
    SECRET: 0
    PASS: d9b1d7db4cd6e70935368a1efb10e377
    好唄!
    自已來招供到底是怎麼一回事。[f09]

    本來一次就設好了,結果東改西改的,
    有問題。後來找記事本的檔案來貼時,
    卻一堆錯誤,
    除了程式二的地方之外,
    自已把程式三要改的東西貼錯了。[f01]
    果然不適合愛改版的人用。(指)

    感謝小倩的幫忙。[f10]
    | 檢舉 | Posted by scarlet at 2005年05月14日 12:08

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    還好啦~但真的不建議常換樣版的人用
    | 檢舉 | Posted by 小倩 at 2005年05月17日 08:11

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    不客氣!!不過程式二那裡的語法真的不好找...所以你後來用abc的那個方法算是最省事的.
    | 檢舉 | Posted by 小倩 at 2005年05月29日 11:15

    TITLE:
    SECRET: 0
    PASS: fb469d7ef430b0baf0cab6c436e70375
    恭喜喔!!不過自從加了這些有的沒的東西後,我就很懶得再換樣版了...

    PING:
    TITLE: Summary ?
    BLOG NAME: Log of Distractions
    最近修改版面的心得整裡 ?1) Free Photographs : ( 高解析度的照片來源整裡 )Where To Find Great Free Photographs ...我使用的 : morgueFile & Image * After裡面介紹的網站大部処ヘ都還沒障o過:P2) コメントにカスタマイズ絵文字入力機能 from stroll::blog-> 小倩的教學



    | 檢舉 | Posted by 小倩 at 2005年06月9日 01:34
    | 檢舉 | Posted by fioricet prescription at 2006年11月27日 04:03