プラグインの「最新コメント」の表示について
プラグインに「最新コメント」を、表示させました。しかしどう考えても、変な表示なんです。
Aの記事に3人の方からコメントを頂いたら、私は新しいコメント欄から、それぞれの方にコメントをします。
そして、Aの記事に対してのCさんのコメント「最新コメント」を開くと、他の方のコメントと、私のコメント合計6個のコメントを、全て見ることが出来るのです。
これでは、他の5個それぞれのコメント表示は、正直いりません。
ただ、コメントを下さった方のお名前が出るので、必要だとは思います。
でも正直な所、場所だけとって、見た目にも機能的にも、満足できません。
もっとシンプルに、表示をさせる方法はないのでしょうか?
分かりにくい文章で、申し訳ございません。
どうぞよろしくお願いいたします。
回答(6)
2.

<div id="recentcomments"></div>
<script type="text/javascript"><!--
/* コメントRSSオブジェクト */
var comments_rss_request = {
maxNum: 10,
commentLength: 30,
openButton: '\u25bc',
closeButton: '\u25b2',
notButton: '\u25bd',
prefix: '',
suffix: 'さん',
myNameIs: '',
targetID: 'recentcomments',
data: '',
method: 'GET',
async: true,
fileName: function() {
return document.URL.match(/http:\/\/blog\.livedoor\.jp\/.+?\/|http:\/\/.+?\//) + 'recent_comments.xml'
},
toggleButton: [],
commentMore: [],
commentConti: [],
toggle: function(i) {
this.toggleButton[i].innerHTML = this.toggleButton[i].innerHTML == this.openButton ? this.closeButton : this.openButton;
this.commentMore[i].style.display = this.commentMore[i].style.display == 'none' ? 'inline' : 'none';
this.commentConti[i].style.display = this.commentConti[i].style.display == 'none' ? 'inline' : 'none';
},
とてもご丁寧にお返事を下さり、とても助かりました。
ありがとうございました。
1.
記事についているコメントを見る時、
それが、全部表示されてしまうのは、しょうがないと思います。
コメントプラグインでは、プラグインの設定から編集で、表示件数を設定できるので、最新1コの表示にはできます。
コメントプラグインの表示は確かに冗長なので、
例えば、
のようなカスタマイズをしている方もおられます。
(同じ記事のコメントを固めてあり、その分冗長性が減ります。また、プラグインで、コメント全文を閲覧できます)
このように、(もっとシンプルにがどのようなものなのかはわかりませんが)ある程度は、望むように変更することは可能です。
3.
onLoaded: function(oj) {
var comment = [];
var el_comment = document.getElementById(this.targetID);
var comment_rss_item = oj.responseXML.getElementsByTagName('item');
var fl = document.createDocumentFragment();
var m = Math.min(comment_rss_item.length, this.maxNum);
for (var i = 0; i < m; i++) {
var com = new comment_item(comment_rss_item[i]);
if (comment[com.title] == null || comment[com.title] == 'undefined')
comment[com.title] = [];
comment[com.title].push(com);
}
4.
for (var a in comment) {
var el_title = createElementTN('div', 'sidebody comment');
var el_link = createElementTN('a', 'comment_link', a, el_title, {'href': comment[a][0].link});
for (var c in comment[a]) {
var leaf_classname = c == comment[a].length - 1 ? 'leaf_last leaf_author' : 'leaf leaf_author';
var leaf_textnode = this.prefix + comment[a][c].author + (this.myNameIs == comment[a][c].author ? '' : this.suffix);
var el_author = createElementTN('div', leaf_classname, leaf_textnode, el_title);
var el_wrapper = createElementTN('div', 'comment_wrapper');
var str_content = comment[a][c].content;
var content_length = this.commentLength;
str_content = eval('str_content.match(/(<.+?>|[^<>]){1,' + content_length + '}/)[0]');
var rc = RegExp.rightContext;
var el_comore = createElementTN('span', 'comment_more', rc);
var el_comain = createElementTN('span', 'comment_main', str_content, el_wrapper);
var el_cocont = createElementTN('span', 'comment_continue', '...');
if (rc != '') {
var el_button = createElementTN('a', 'comment_button', this.openButton, null, {'href': 'javascript:comments_rss_request.toggle(' + this.commentMore.length + ')'});
el_cocont.style.display = 'inline';
el_wrapper.appendChild(el_cocont);
el_comore.style.display = 'none';
el_wrapper.appendChild(el_comore);
} else
var el_button = createElementTN('span', 'comment_button', this.notButton);
el_author.insertBefore(el_button, el_author.firstChild);
this.toggleButton.push(el_button);
this.commentMore.push(el_comore);
this.commentConti.push(el_cocont);
el_author.appendChild(el_wrapper);
}
fl.appendChild(el_title);
}
el_comment.appendChild(fl);
5.
function comment_item(node) {
var key, j;
for(var i = 0; i < node.childNodes.length; i++)
if(node.childNodes[i].nodeType == 1) {
key = node.childNodes[i].nodeName;
key = key.replace(/:encoded/, '');
j = node.childNodes[i].childNodes.length == 1 ? 0 : 1;
this[key] = node.childNodes[i].childNodes[j].nodeValue;
}
}
function createElementTN() {
var el = document.createElement(arguments[0]);
if(arguments[1]) el.className = arguments[1];
if(arguments[2]) el.innerHTML = arguments[2];
if(arguments[3]) arguments[3].appendChild(el);
if(arguments[4])
for(var i in arguments[4])
el.setAttribute(i, arguments[4][i]);
return el;
}
}
};
6.
/* Ajax Request */
(function (reqoj) {
var httpoj = (function() {
if(window.ActiveXObject) {
try { return new ActiveXObject('Msxml2.XMLHTTP'); }
catch(e) { return null; }
} else if(window.XMLHttpRequest) { return new XMLHttpRequest(); }
else { return null; }
})();
httpoj.open(reqoj.method, reqoj.fileName(), reqoj.async);
httpoj.onreadystatechange = function() {
if (httpoj.readyState == 4 && httpoj.status == 200)
reqoj.onLoaded(httpoj);
}
httpoj.send(reqoj.data);
})(comments_rss_request);
//-->
</script>
コメント(7)
早々のご回答ありがとうございます。
他の方のブログをみると、やはりコメントも、全部表示されていました。
これは、仕方のないことなんですね。
それで早速、教えていただいた所のソースコードを、サイドバーに張ってみたのですが、全く表示されません。
どうしてなのか、何がいけないのか私には分からないので、もしお分かりになりましたら、ご回答をよろしくお願いします。
シンプルにというのは、表現があいまいでした。
申し訳ございません。
ある記事について2つのコメントがあったら、タイトルが表示されて、その下にコメントが2つ表示される・・・イメージはこんな感じです。
#1>ご回答をよろしくお願いします。
実際に貴ブログを見てみないとわかりませんが、
よくありそうなこととして
・スクリプトが禁止されている(ライブドアを使っているならちょっと考えにくい)
・貼り付ける時に、「改行を変換する」設定にしている。
・元のソースが間違っている(リンク先で実際に動作しているのでこれもちょっと(ライブドアブログなら)考えにくい)
#1>タイトルが表示されて、その下にコメントが2つ表示される・・・イメージはこんな感じです。
リンク先のカスタマイズはそんな感じですね。
実際にリンク先のページのプラグインが表示されているので、試してみるといいです。
#1>全く表示されません。
失礼しました。(まさかと思っていました)
実際、ウチのブログでも試してみたら、
確かに表示されませんでした。
乗りかかった船ですので、
ちょっと調べてみます。
表示されなかった原因は、
IEを利用して、リンク先のソースをコピーすると、もとあった改行が削除されているため、動作がおかしくなるということだと思います。(Firefox では大丈夫です。ソースの色づけのためにスクリプトからいじっているのでそうなります)
回答の2~6まで、再掲しました(文字数制限のために分割していますが同じモノです)ので、こちらをご利用下さい。
こんなにもご丁寧にコメントを下さり、感激しております。
今から早速試してみますので、またご報告をさせて頂きます。
BLUEPIXYさん♪
今度はちゃんと表示されました。
そして以前よりもずっとコンパクトになり、見た感じも大満足です!
ブログは簡単に始められますが、慣れてくると気になるところが色々と出てきます。
そして分からない事があると、このナレッジの場で質問をさせていただくのですが、もう少し自分でも調べて、勉強をしないといけないな・・・と、痛感しました。
今回は、本当にありがとうございました。
うまくいって良かったデスね。
作者のimq さん、
勝手な転載を許して下さりありがとうございました。





