久しぶりのppBlogカテゴリでの投稿です。ていうかお待たせしてスミマセンでした。
ことの始まりはあゆさんからのリクエストでした。じゅげむでコメント欄に絵文字を使いたい!と。そのときに教えてもらったのがこちらのサイト。stroll:blogさん。色々な興味深いスクリプトを提供されています。で,参考に…というか利用させていただいたのがこちらのエントリ。コメントにカスタマイズ絵文字入力機能
私はじゅげむユーザではないので良く分からないのですが,HTMLが編集可能なblogであれば、すべてのblogで設置可能なはずです。
とのお言葉を頼みの綱にして設置にチャレンジ!…と思ったら先日のじゅげむメンテナンス一泊二日旅行。むー。気になる。早く挑戦したいともんもんとしながら待っておりましたよ。なんか前フリが長いですね。さっさと設置方法だけ書け!という声が聞こえてきそうなのでさっさと書きます。
もっと読む»追記:なんだかOperaではバージョンによってうまく表示されたりされなかったりしています。Google It!の機能を使うとそこで表示が止まってしまうことは確認しましたが,回避作は今のところ思いつきません。また,MacのSafariではコメントの画像が表示されないとの未確認情報もあります。私はMacを所有していないので確認のしようがありません。もしよろしければおかしな画面のスクリーンショットを送っていただきたく。お願いします。>>有志の方々。おかげさまで解決しました。ありがとうございました。では早速。まずは絵文字を使いたいわけですから画像がないと始まらない訳ですよ。で,naoKはau使いなのでstroll:blogさんのご紹介の中からau風の絵文字を配布されている☆SWEETS☆さんにお邪魔していただいてまいりました。ていうかこれ,まんまauの絵文字なんですが大丈夫なんでしょうかそして,お使いのtemplate.htmlを開き,basic以外のテンプレートを利用されている方はtemplate.htmlの%_body_%を囲んでいるdivタグにclass="body"と追加してください。テンプレートsimple,3paneともに

いよいよスクリプトの設置になるのですが,stroll:blogさんは,恐らく皆がソースを見て分かりやすいようにスクリプトをテンプレート内に記述されています。確かにサイトのソースを見てみると非常に見易い。ただ,詳しい反面それが煩わしいと感じることもあるわけで。私は出来ればシンプルスマートにできればそれに越したことはない主義なので,スクリプトを外部ファイルに書くことにしました。
ppBlogではjavascriptの定義ファイルがあります。script.jsという非常に分かりやすいファイルがそれです。今回もそれに追加してゆきます。
まず,画像設定スクリプト。最初の<script type="text/javascript"> <!--と,最後の
// --> </script>を除いた部分をscript.jsの最後の部分に追加します。
// コメントにカスタマイズ絵文字入力機能:画像設定
function getCommentEmojiList() {
var list = new Array();
// 画像名、画像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;
}
↑この部分です。それから画像名,画像URLをそれぞれ設定されてください。私は画像ファイルをauという名前のフォルダに入れ,それをImagesフォルダの中に放り込みましたので,例えばlist[list.length/] = new Array('ニコッ', 'Images/au/au_001.gif');
という感じにしてゆきます。必要なだけ画像の設定をしたら次に進みますよ。画像出力スクリプト。これも先ほどの要領でscript.jsに追加します。ただし今回は初めの2行と最後の3行を除きます。// コメントにカスタマイズ絵文字入力機能:画像リスト出力
function writeCustmizeEmojiTagList() {
// コメントを入力するテキストエリアを指定
var textarea = 'document.comform.c_com';
// ***************** 設定ここまで *****************
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;
}
}
↑ここまで。ここでの設定はコメントを入力するテキストエリアの指定です。formタグのnameとtextareaタグのnameを指定します。デフォルトではformタグが"comform",textareaタグが"description"となっています。ppBlogではmodulesフォルダ内のcomment.inc.phpがその働きをしています。なのでこのファイルを開いてみると,20行目付近にこんな一行があるかと。<form method="post" action="index.php">これにはnameの指定がありませんね。なので勝手につけてしまいます。何でもいいのですがデフォルトの指定にならって"comform"としてみます。
<form name="comform" method="post" action="index.php">こんな感じで。更にtextareaタグのnameですが,35行目付近に
<textarea name="c_com" id="c_com" cols="70" rows="5" style="width:97%;background:#f7f7f7;"></textarea><br />という記述があると思います。コレには最初から"c_com"というname指定があるのでscript.jsに追加した部分の設定をデフォルトのdescriptionではなくc_comと書き換えます。
// コメントを入力するテキストエリアを指定 var textarea = 'document.comform.c_com';このように。comment.inc.phpに戻って,今度は絵文字を表示させるスクリプトを一行書きます。
<script type="text/javascript">writeCustmizeEmojiTagList();</script>これを書いたところに絵文字が現れるのですが,コメントを記入する部分の上に表示させるのが自然だと思うので,35行目付近の
<div class="content">という部分の上の行に入れましょう。これでコメント欄に絵文字が表示されて,クリックすると
[ニコッ]
のような表示が入ると思います。…ここまで,大丈夫でしょうか?絵文字が表示されない,またはクリックしても反応がない場合はどこか間違っています。もう一度見直してみましょう。
さて,最後にこの[ニコッ]を絵文字に変える部分です。しつこくscript.jsに追加していきましょう。今回も最初2行,最後3行は除いてコピペです。// コメントにカスタマイズ絵文字入力機能:画像変換
function changeCustmizeEmojiTag() {
// (1)コメント全体のタグの id 属性
var commentAreaIdName = '';
// (2)コメント全体のタグ名
var commentAreaTag = '';
// (3)各コメントの class 属性
var commentBodyClassName = 'body';
// ***************** 設定ここまで *****************
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;
}
今回追加した部分の設定項目について,1,2番については'',3番は'body'としてください。%_body_%の下の行に次のスクリプトを追加してください。
<script type="text/javascript">changeCustmizeEmojiTag();</script>
<div id="column-center" class="body">↑こんな感じで。今度はutils.phpをいじります。10/16追記:絵文字変換スクリプトの位置を変えました。template.htmlに記述した方は該当スクリプトを削除してください。utils.phpを"return $DIVISION['header'/]"で検索して2番目に
return $DIVISION['body'/] = $body.$_com.NL.$header.NL.'<p class="center">'.$back.NL.' '.$main.'</p>'.NL;という箇所があると思います。これの<p class="center">の前にスクリプトを挿入します。
return $DIVISION['body'/] = $body.$_com.NL.$header.'<script type="text/javascript">changeCustmizeEmojiTag();</script>'.NL.'<p class="center">'.$back.NL.' '.$main.'</p>'.NL;↑こんな感じ。10/9 16:10早くも注記:早速訂正します。ダブルクォーテーションをシングルクォーテーションにウンタラカンタラと見た記憶がある方はこの部分が変更になっていますのでご注意ください。utils.phpを"LinkMe"で検索してヒットした行(2箇所あります)の最初のほうのみ修正します。,
$link = "|<a href=\"#\" title=\"$ttl\" onclick='return ToClipBoard(\"\",\"$url?UID=$id\")'>LinkMe</a>n ";↑これのonclick〜以下を次のように修正します。
$link = "|<a href=\"#\" title=\"$ttl\"$copy>LinkMe</a>n ";↑onclick〜以下を$copyに変更。
ふぅ。これでコメント欄での絵文字使用が可能になったはず,であります。がしかし,がしかし。naoK,これを記事にも表示できるようにしてみました。しかしながら,それには更にファイルをいじらなくてはならないので,記事を分けて書きますね。とりあえず今回はここまで。記事本文に絵文字を表示させたい方はこちらをご覧ください。






この記事に対するコメント・トラックバック [41件]
2. あこ — 2004/10/09@15:07:28
今日naoKさんのブログに飛んできたら
スクリプトエラーが出ました。
私側の問題かもだけど、
今までは大丈夫だったので
一応報告しときまーす。
やっぱりわかりにくいですかねぇ…いろんなファイルに手を入れますから。ていうか私の説明が悪すぎるのです,きっとorz
> あこさん
報告ありがとうございます。ホントダー。何だこのエラーは。調べなくちゃ…
4. ブログ?┃∀・)ニヤニヤ — 2004/10/09@15:39:51
続き »
5. りえっぺ — 2004/10/09@16:47:45
後の方法
Operaじゃエラーかかる・・・
前の方法
IEだとリンクできない・・・
やっぱり同じビルドを入れて検証してみないとダメみたいですね。
とりあえずはエラーの出ない前の方法でしのいでください。スミマセン。
7. りえっぺ — 2004/10/09@17:15:04
Build 7141
なら大ジョブでした。
8. りえっぺ — 2004/10/09@17:16:23
これだすね。
7.54とか7.53はエラーかかるぅー
しかしそれより前のバージョンだとエラーが出るってことは,Operaの問題なのかな…
しかしなぜうちのOperaはエラーが出ないのだ。英語版だからなのかな?
10. りえっぺ — 2004/10/09@17:28:16
バージョンによるかも
Operaはバージョンによって全然違うし。
12. りえっぺ — 2004/10/09@17:41:36
FireFoxでは大ジョブだし。
まぁOpera人口のがFireFoxより少ないから・・・
注意書きさえしておけばおkかも〜
13. りえっぺ — 2004/10/09@17:53:04
京セラのエッヂ(Opera7.0)では大ジョブみたいでつ。
でも,今までとは違うところでエラーが出ているような…"そういえばこうさぎが"のエントリで止まってませんか?
それなら何とかなるかも…
15. りえっぺ — 2004/10/09@17:56:42
ニアミス。
あたしOpera7.60にバージョンアップしちゃったからなー...
しかしH",恐るべし…
17. りえっぺ — 2004/10/09@18:03:24
18. りえっぺ — 2004/10/09@18:18:23
19. りえっぺ — 2004/10/09@18:22:01
しかし困ったな…
責任感じちゃうです
ちなみに、Sleipnirでは、キレイに見えてますよ!
いやぁ,ちと苦労しましたが,こんな感じで設置できます。
運動会終わったら挑戦してみてくださーい
23. りえっぺ — 2004/10/10@03:34:09
Opera
バージョン7.54
Build 3865
なら大ジョブですた。
でもあたしの所は大ジョブだけどnaoKちゃんの所エラーかかってる・・・
りえっぺさん,もしよければうちのエラーの画面,もう一度キャプチャしていただけませんか?
メールでも構いませんので。
よろしくお願いします。
25. りえっぺ — 2004/10/10@14:38:38
遅くなってゴメソ。
さっきもう一つのPCの
Opera(英語バージョンのはず)
バージョン7.54
Build 3865
XPs1でプリントスクリーンしてきまちた。
うちのpageはなぜかそのまま表示できるしコメントも出来る。
なぜだーー。不思議現象。
ええと,UAがIE6.0とか,そういうオチじゃないですよねぇ…そんなことないですよねぇ…あるわけないよなぁ…
27. りえっぺ — 2004/10/10@14:49:57
Operaで見てみようか?
28. りえっぺ — 2004/10/10@14:52:17
Operaで認識させたらおkでした。
目から鱗。
でもほとんどの人IE6.0にしてるよなー。。。たぶん。
実はコレ,UA判定をしてます。私でなくppBlogのデフォルトで。どうもパーマリンクをクリップボードに送るjavascriptのところで引っかかっていたので,UAがIEの場合だけこのjavascriptを有効にするようにしているのです。苦し紛れの逃げ技なのですが。
Operaって,デフォルトのUA指定はIEなんでしょうか?だと困るなぁ…何か考えないと。
30. りえっぺ — 2004/10/10@14:58:39
デフォルトがIE6.0なんだよ。
あと、IE6.0にしておかないと
企業のページキックされやすいからこれにしてる。
でも、あたしのページはUAがIE6.0でも大ジョブだたーよ。
なんでじゃろ〜
引き続き調査いたします!
32. りえっぺ — 2004/10/10@15:04:08
UAをOperaにするとおkですた。
UAがIE6.0ではダメだー
で,いまりえっぺさんとこのソースを確認したんですが,OperaのUAがIEでもきちんとIEじゃない判定をされているみたいです(謎
うわーなんなのだー。
34. りえっぺ — 2004/10/10@15:14:11
新パソコンXP pro SP2
Opera
バージョン7.54
Build3865
入れました。
やぱりUA operaだと大ジョブですが
IE6.0だとダメポ。
うちのページはどちらでもおk−でつ。
もう一度ソースを見直してみます。
Safariだとうちのページコメントを押すボタンがないそうでつ。。。ァゥゥ
これはぼーちゃんからも情報を頂いているのですが,Operaとはまったく別のところで表示がおかしくなっているので…
38. りえっぺ — 2004/10/10@15:39:43
むじかしいでつねー。。。涙
てことはうちだけの問題だ…汗
よーし,この際だからバージョンアップしてしまうか。そうすれば後の問題はSafariだけだ。
1.35入れてエラーかかったので
すぐに元のバージョンのファイルに戻したの。。。
あたしはコメントの所の絵文字スクリプト外してしまった。。。
SafariでSENDボタンが出なくなるらしーので。。。
本文は絵文字入ってても大ジョブみたいよー@Safari