Beberapa waktu lalu, saya blogwalking ke beberapa blog kepunyaan blogger lain. Lagi jalan-jalan gitu di blognya mas Beben Koben, ngeliat postingan tutorial blogging yang oke juga, yaitu adalah tutorial Threaded Comment di Blogger :D
Threaded Comment ini akan berpengaruh pada bagian komentar dari blog kita. Well, apa sih kelebihan dari Threaded Comment ini dibandingin sama sistem komentar yang biasa?
Dengan sistem Threaded Comment, bagian komentar akan dapat dibuat lebih terstruktur. Setiap Komentator bisa mengomentari komentar dari orang lain langsung di bawah komentar orang yang dikomentari. Jadi, tentunya akan memudahkan kalau terjadi tanya-jawab di bagian komentar tsb.
Oke, istirahat sebentar..kebanyakan kata komentar bikin pusing..hehehe
Yaa..gampangnya lihat aja pada gambar berikut ini..
Gambar diambil dari blognya mas Beben Koben :D
Tertarik untuk memasangnya??
Ok.. caranya agak panjang, jadi bersiap-siaplah..hehehe
<script type='text/javascript'/>
// ------// threaded comment/-----
//
//<![CDATA[
/*
--- Threaded Comments ---
v 0.9.3 15th March 2009
By Shams Mahmood
http://shamsmi.blogspot.com
Published by
http://www.masdoyok.co.cc/
*/
function Author(C,A,B){this.id=C;this.name=A;this.url=B;this.toString=function(F){var E="t";if(F){for(var D=0;D<F;D++){E+="t"}}return"Author[n"+E+"id="+this.id+", n"+E+"name="+this.name+", n"+E+"url="+this.url+"n"+E+"]"}}function Comment(E,H,G,C,B,D,F,A){this.id=E;this.sequenceNumber=H;this.postedTime=G;this.body=F;this.deleted=A;this.deleteUrl=B;this.deleteText=D;this.parentId="";this.children=new Array();this.level=0;this.author=C;this.getChildCount=function(){return this.children.length};this.addChild=function(I){this.children[this.getChildCount()]=I.id;I.parentId=this.id;I.level=this.level+1};this.toString=function(K){var J="t";if(K){for(var I=0;I<K;I++){J+="t"}}return"Comment[n"+J+"id="+this.id+", n"+J+"sequence="+this.sequenceNumber+", n"+J+"deleted="+this.deleted+", n"+J+"parentId="+this.parentId+", n"+J+"children=["+this.children+"], n"+J+"level="+this.level+", n"+J+"author="+this.author.toString(1)+", n"+J+"posted time="+this.postedTime+", n"+J+"body="+this.body+"n"+J+"]"}}function trimBrsFromString(C){var F=trimString(C);var B=["<br>","<br >","<br/>","<br />","<BR>","<BR >","<BR/>","<BR />"];if(F){var E=true;while(E){E=false;for(var D in B){var A=B[D];if(F.indexOf(A)==0){F=F.substring(A.length);F=trimString(F);E=true}var H=F.length;var G=F.lastIndexOf(A);if(G>=0&&G==H-A.length){F=F.substring(0,G);F=trimString(F);E=true}}}}return F}function trimString(A){var E="";if(A){var D=false;for(var B=0;B<A.length;B++){var F=A.charAt(B);if(!D&&F!=" "&&F!="n"&&F!="t"){D=true}if(D){E+=F}}D=false;var C=-1;for(var B=E.length-1;!D&&B>0;B--){var F=E.charAt(B);if(!D&&F!=" "&&F!="n"&&F!="t"){D=true;C=B}}if(C>0){E=E.substring(0,C+1)}}return E}function addItem(A,B){A[B.id]=B}function getAllItems(C){var D=new Array();var B=0;for(var A in C){D[B]=C[A];B++}return D}function getItemsCount(C){var B=0;for(var A in C){B++}return B}var ALL_AUTHORS=new Object();var ALL_COMMENTS=new Object();function getNewAuthorId(){var C=1;for(var A in ALL_AUTHORS){if(ALL_AUTHORS[A]&&ALL_AUTHORS[A].id){var B=ALL_AUTHORS[A].id;if(B>=C){C=B+1}}}return C}function createAuthor(C,A,B){return new Author(C,A,B)}function addAuthor(A){addItem(ALL_AUTHORS,A)}function getAllAuthors(){return getAllItems(ALL_AUTHORS)}function getAuthorsCount(){return getItemsCount(ALL_AUTHORS)}function findAuthor(C,B){for(var A in ALL_AUTHORS){if(ALL_AUTHORS[A]){if(ALL_AUTHORS[A].name==C&&ALL_AUTHORS[A].url==B){return ALL_AUTHORS[A]}}}return null}function getNewCommentSequence(){var C=1;for(var A in ALL_COMMENTS){if(ALL_COMMENTS[A]&&ALL_COMMENTS[A].sequenceNumber){var B=ALL_COMMENTS[A].sequenceNumber;if(B>=C){C=B+1}}}return C}function createComment(E,H,G,C,B,D,F,A){return new Comment(E,H,G,C,B,D,F,A)}function addComment(A){addItem(ALL_COMMENTS,A)}function getAllComments(){return getAllItems(ALL_COMMENTS)}function getRootComments(){var D=new Array();var C=0;for(var A in ALL_COMMENTS){var B=ALL_COMMENTS[A];if(B&&B.level==0){D[C]=B;C++}}return D}function getCommentsCount(){return getItemsCount(ALL_COMMENTS)}function findComment(B){for(var A in ALL_COMMENTS){if(ALL_COMMENTS[A]){if(ALL_COMMENTS[A].id==B){return ALL_COMMENTS[A]}}}return null}function findLastCommentByAuthorName(C){var B=null;for(var A in ALL_COMMENTS){if(ALL_COMMENTS[A]){if(ALL_COMMENTS[A].author.name==C){B=ALL_COMMENTS[A]}}}return B}function findLastCommentByPartialAuthorName(C){var B=null;for(var A in ALL_COMMENTS){if(ALL_COMMENTS[A]){if(ALL_COMMENTS[A].author.name.toLowerCase().indexOf(C.toLowerCase())==0){B=ALL_COMMENTS[A]}}}return B}function addCommentHierarchy(D,C){if(D){C[C.length]=D;var A=D.children;for(var B in A){addCommentHierarchy(findComment(A[B]),C)}}}function getCommmentsInSortedOrder(){var D=new Array();var A=getRootComments();for(var B in A){var C=A[B];addCommentHierarchy(C,D)}return D}function ParsedResult(A,B){this.parentComment=A;this.body=B;this.toString=function(){return"[parentComment="+this.parentComment+", body="+this.body+", ]"}}function findParentCommentFromDescriptor(A){var B=findComment(A);if(B==null){B=findLastCommentByAuthorName(A)}if(B==null){B=findLastCommentByPartialAuthorName(A)}return B}function parseCommentBody(B,F){B=trimString(B);var A=B.indexOf("@");if(A==0){var H=B.indexOf("n",0);var G=B.indexOf("<",0);var D=H;if(G>0&&(G<D||D<0)){D=G}if(D>2){var O=B.substring(1,D);O=trimString(O);var K=findParentCommentFromDescriptor(O);if(K==null){var J=O.indexOf(" ");if(J>0){var N=trimString(O.substring(0,J));K=findParentCommentFromDescriptor(N);if(K!=null){D=J+1}}}if(K!=null){var P=null;var Q=D;var C=B.indexOf("@",Q+1);if(C>Q){var M=trimString(B.substring(C));P=parseCommentBody(M,C)}if(P&&P.length>0&&P[0].parentComment!=null){var L=trimString(B.substring(D,C));var I=new ParsedResult(K,L);var E=[I].concat(P);return E}else{var L=trimString(B.substring(D));var I=new ParsedResult(K,L);return[I]}return E}}}var I=new ParsedResult(null,B);return[I]}function buildComment(C,K,H,L,G,I,M,A){var F=findAuthor(C,K);if(!F){F=createAuthor(getNewAuthorId(),C,K);addAuthor(F)}var D=parseCommentBody(A,0);for(var J in D){var E="";E=D[J].body;E=trimBrsFromString(E);var B=createComment(H+"."+J,getNewCommentSequence(),L,F,I,M,E,G);addComment(B);if(D[J].parentComment!=null){D[J].parentComment.addChild(B)}}}function substituteConstant(A,D,C){var B=A;while(B.indexOf(D)>=0){B=B.replace(D,C)}return B}function substituteConstantIfValueExists(D,A,I,C,H){var J=D;var F=J.indexOf(A);var E=J.indexOf(I);while(F>0&&E>F){var B=J.substring(F,E+I.length);var G=null;if(H&&H.length>0){G=substituteConstant(B,C,H);G=G.substring(A.length,G.length-I.length)}else{G=""}J=J.replace(B,G);F=J.indexOf(A);E=J.indexOf(I)}return J}function isBlogAuthor(B){var A=false;if(window.BLOG_AUTHORS){for(var C in BLOG_AUTHORS){if(BLOG_AUTHORS[C]==B){A=true;break}}}else{if(window.BLOG_AUTHOR){A=(BLOG_AUTHOR==B)}}return A}function applyCommentTemplateToComment(F,E){var A=F;A=substituteConstant(A,"${COMMENT.ID}",E.id);A=substituteConstant(A,"${COMMENT.TIMESTAMP}",E.postedTime);A=substituteConstant(A,"${COMMENT.AUTHOR.NAME}",E.author.name);var C=(E.level>3)?"gt3":E.level;A=substituteConstant(A,"${COMMENT.LEVEL}",C);A=substituteConstantIfValueExists(A,"${COMMENT.AUTHOR.URL.EXISTS.START}","${COMMENT.AUTHOR.URL.EXISTS.END}","${COMMENT.AUTHOR.URL}",E.author.url);A=substituteConstant(A,"${COMMENT.AUTHOR.URL}",E.author.url);A=substituteConstant(A,"${COMMENT.DELETE.URL}",E.deleteUrl);A=substituteConstant(A,"${COMMENT.DELETE.TEXT}",E.deleteText);A=substituteConstant(A,"${COMMENT.BODY}",E.body);var D=isBlogAuthor(E.author.url)?"blog-author-comment":"blog-nonauthor-comment";A=substituteConstant(A,"${BLOG.AUTHOR}",D);A=substituteConstant(A,"${BLOG.POST.COMMENT.LINK}",BLOG_POST_COMMENT_LINK);var B=(E.deleted)?"deleted-comment":"";A=substituteConstant(A,"${COMMENT.DELETED.STYLE}",B);document.writeln(A)}function applyCommentTemplate(C){var D=getCommmentsInSortedOrder();for(var A in D){var B=D[A];applyCommentTemplateToComment(C,B)}}function setElementDisplay(B,C){var A=document.getElementById(B);if(A){A.style.display=C}}function setElementsDisplay(B,C){for(var A in B){setElementDisplay(B[A],C)}}function showElements(A){setElementsDisplay(A,"block")}function hideElements(A){setElementsDisplay(A,"none")}function showElement(A){setElementDisplay(A,"block")}function hideElement(A){setElementDisplay(A,"none")}function toggleElementDisplays(C,B,D){if(C.innerHTML=="[hide]"){for(var A in B){if(D[A]=="both"||D[A]=="hide"){hideElement(B[A])}}C.innerHTML="[show]"}else{for(var A in B){if(D[A]=="both"||D[A]=="show"){showElement(B[A])}}C.innerHTML="[hide]"}};
</script>#comments {
font-size:110%;
margin: -25px 13px 0;
border: 1px dotted #ccc;
border-width: 0 1px 1px;
padding: 20px 0 15px 0;
background:#e0ecff
}
#comments h4 {
margin: 0 0 10px;
padding: 0 14px 2px 29px;
border-bottom: 1px dotted #ccc;
font-size: 110%;
line-height: 1.4em;
color: #1788FF;
}
#comments-block {
margin: 0 15px 0 9px;
}
.comment-author {
background: url("http://www.blogblog.com/rounders3/icon_comment.gif") no-repeat 2px .3em;
margin: .5em 0;
padding: 0 0 0 20px;
font-weight: bold;
}
.comment-body {
margin: 0 0 1.25em;
padding: 10px 0 0 20px;
}
.comment-body p {
margin: 0 0 .5em;
}
.comment-footer {
margin: 0 0 .5em;
padding: 0 0 .75em 20px;
}
.comment-footer a:link {
color: #1788FF;
}
.comment-footer a:hover {
color: #FFFFFF;
}
.comment-segment {
margin-top: 10px;
margin-right: 10px;
}
.comment-level-0 {
margin-left: 10px;
}
.comment-level-1 {
margin-left: 25px;
}
.comment-level-2 {
margin-left: 40px;
}
.comment-level-3 {
margin-left: 55px;
}
.comment-level-gt3 {
margin-left: 70px;
}
.blog-author-comment {
background-color: #F0F0BE;
border: 1px solid #FFFF99;
}
.blog-nonauthor-comment {
background-color: #fff;
border: 1px solid #ccc;
}
.deleted-comment {
color: gray; font-STYLE: italic
}
.delete-comment-icon {
background: url("http://www.blogblog.com/rounders3/icon_delete13.gif") no-repeat;
}
.comment-time {
font-size: 80%;
margin: inherit;
padding-left: 10px;
padding-bottom: 10px;
}
.reply-guide {
background-color: #ffc;
border: #076a93 1px dotted;
display: none;padding:5px 10px 0.75em 10px;margin:0 10px 10px;
font-size:90%
}
.reply-guide-header {
color: #076a93;
padding-top: 10px;
}
.reply-guide-list {
list-style: none;
padding-left: 2px;
margin-left: 2px;
}
.reply-guide-example {
font-size: 85%;
margin-right: 5px;
margin-bottom: 10px;
float: right;
border: 1px dotted #076a93;
padding: 5 5 5 5;
}<b:includable id='comments' var='post'>
<div class='comments' id='comments'>
...
</div>
</b:includable>
<b:includable id='comments' var='post'>
<div class='comments' id='comments'>
<a name='comments'/>
<b:if cond='data:post.allowComments'>
<h4>
<b:if cond='data:post.numComments == 1'> 1 <data:commentLabel/>:
<b:else/><data:post.numComments/> <data:commentLabelPlural/>:
</b:if>
</h4>
<b:if cond='data:post.numComments > 0'>
<!-- Include a post comment link before rendering the comments -->
</b:if>
<!-- Loop through the comments adding the comment bodies in a hidden div -->
<b:loop values='data:post.comments' var='comment'>
<div expr:id='"comment-body-" + data:comment.id' style='display: none;'>
<data:comment.body/>
</div>
</b:loop>
<!-- Now create the comment using our javascript -->
<script type='text/javascript'>
// Use this if you have just one author like this blog :)
var BLOG_AUTHOR = 'http://www.blogger.com/profile/NO ID SOBAT';
var BLOG_POST_COMMENT_LINK = '<data:post.addCommentUrl/>';
var eCommentDelete = false;
var eAuthorUrl = '';
<b:loop values='data:post.comments' var='comment'>
eCommentDelete = false;
eAuthorUrl = '';
<b:if cond='data:comment.authorUrl'>
eAuthorUrl = "<data:comment.authorUrl/>";
</b:if>
<b:if cond='data:comment.isDeleted'>
eCommentDelete = true;
</b:if>
buildComment("<data:comment.author/>", eAuthorUrl,
"<data:comment.id/>", "<data:comment.timestamp/>", eCommentDelete,
"<data:comment.deleteUrl/>", "<data:top.deleteCommentMsg/>",
document.getElementById('comment-body-<data:comment.id/>').innerHTML);
</b:loop>
// <![CDATA[
var eCommentTemplate = '' +
'<div class="comment-segment comment-level-${COMMENT.LEVEL} ${BLOG.AUTHOR} ${COMMENT.DELETED.STYLE}" >' + 'n' +
' <a name="comment-${COMMENT.ID}"></a>' + 'n' +
' <span style="float: right; margin-right: 5px; " >' + 'n' +
' <a href="#" ' + 'n' +
' onclick="toggleElementDisplays(this, ' +
'['comment-${COMMENT.ID}-body', 'comment-${COMMENT.ID}-footer', 'reply-guide-${COMMENT.ID}'], ' +
'['both', 'both', 'hide']); return false;" >[hide]</a>' + 'n' +
' </span>' + 'n' +
' <span class="comment-author" >' +
'${COMMENT.AUTHOR.URL.EXISTS.START}' +
'<a href="${COMMENT.AUTHOR.URL}" rel="nofollow">' +
'${COMMENT.AUTHOR.URL.EXISTS.END}' +
'${COMMENT.AUTHOR.NAME}' +
'${COMMENT.AUTHOR.URL.EXISTS.START}' +
'</a>' +
'${COMMENT.AUTHOR.URL.EXISTS.END}</span>' + 'n' +
' mengatakan... ' + 'n' +
' <span class="comment-time">on ${COMMENT.TIMESTAMP}</span>' + 'n' +
' <div id="comment-${COMMENT.ID}-body" class="comment-body" ><p>${COMMENT.BODY}</p></div>' + 'n' +
' <div id="reply-guide-${COMMENT.ID}" class="reply-guide comment-level-0 " >' + 'n' +
' <span style="float: right;" ><a href="#" onclick="hideElement('reply-guide-${COMMENT.ID}'); return false;" >[hide]</a></span>' + 'n' +
' <h4 class="reply-guide-header">Cara balas komentar ini</h4>' + 'n' +
' <span>' + 'n' +
' Copy dan gunakan baris di bawah ini' + 'n' +
' <ul class="reply-guide-list">' + 'n' + '@${COMMENT.ID}' + 'n' +
' </ul>' + 'n' +
' jadi <b>baris pertama</b> di komentarmu. <b>Enter</b>. Baru masukkan komentarmu. ' + 'n' +
' <br />' + 'n' +
' <a href="#comment-form"' + 'n' +
' >Beri Komentar</a>' + 'n' +
' </span>' + 'n' +
' </div>' + 'n' +
' <div id="comment-${COMMENT.ID}-footer" class="comment-footer">' + 'n' +
' <span><a ' +
'href="#" onclick="showElement('reply-guide-${COMMENT.ID}'); return false;" >Reply</a></span> ' + 'n' +
' <span><a href="#comment-${COMMENT.ID}">Permalink</a></span> ' + 'n' +
' <span><a href="${COMMENT.DELETE.URL}" title="${COMMENT.DELETE.TEXT}" style="text-decoration: none;" >Hapus</span></a></span>' + 'n' +
' </div>' + 'n' +
'</div>' + 'n';
applyCommentTemplate(eCommentTemplate);
// ]]>
</script>
<p class='comment-footer'>
<p class='comment-footer'>
<b:if cond='data:post.embedCommentForm'>
<b:include data='post' name='comment-form'/>
<b:else/>
<b:if cond='data:post.allowComments'>
<a expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><data:postCommentMsg/></a>
</b:if>
</b:if>
</p>
</p>
</b:if>
<div id='backlinks-container'>
<div expr:id='data:widget.instanceId + "_backlinks-container"'>
<b:if cond='data:post.showBacklinks'>
<b:include data='post' name='backlinks'/>
</b:if>
</div>
</div>
</div>
</b:includable>
Jangan lupa pada variabel BLOG_AUTHOR untuk mengganti NOMOR ID SOBAT dengan nomor ID kepunyaan kamu.
Contohnya, halaman profil Blogger saya
http://www.blogger.com/profile/09381985497203172201
Nah, nomor di bagian akhir itu adalah nomor ID kita.
Tutorial ini emang agak panjang. Tapi semoga mudah dimengerti. Toh, hasilny juga bermanfaat koq. Credit pada mas Beben Koben..
Happy blogging :D
Threaded Comment di Blogger
Blog Saya Kembali Lagi.. Akhirnya
Setelah saya tau kalau blog saya dihapus tepat sejak tanggal 8 Juni 2010, hampir tiap hari saya nyari cara buat ngebalikinnya. Semua cara yang saya tau buat balikin blog saya yang dihapus ini, saya lakuin. Nggak kunjung balik juga, akhirnya saya menyerah dan pasrah..wew
Dan ternyata eh ternyata, pada 3 Juli 2010 kemarin, lagi-lagi saya dapet e-mail dari Blogger. Hmm, kira-kira apa yee isinya ??
Asal tau aja. Hampir tiap hari juga saya cek Blogger, siapa tau blog saya udah balik. Saya restore-restore terus, tapi ga membuahkan hasil. Dari statistik blog saya yang dihapus itu, saya tau ada orang (dari Blogger sepertinya) yang sering masuk-keluar blog saya. Saya kira blog saya bakal cepat kembali, ternyata ngga.
Dan akhirnya, pada 3 Juli 2010 kemarin, saya dapet e-mail lagi dari Blogger. Kira-kira seperti inilah isinya:
Hello,
We have received your appeal regarding your blog http://████████████.com/. Upon further review we have determined that your blog was mistakenly marked as a TOS violator by our automated system and, as such, we have reinstated your blog. We apologize for any inconvenience this may have caused in the meantime and thank you for your patience as we completed our review process.
Thank you for for understanding.
Sincerely,
The Blogger Team
Di e-mail itu dijelasin, kalo blog saya telah mengalami kesalahan teknis dengan dianggap sebagai SPAM blog oleh Blogger. Dan setelah direview, blog saya akhirnya kembali lagi. Proses reviewnya ini agak lama juga ya berarti, sekitar 3 mingguan lah.
Whatever lah, yang penting blog saya kembali. Tragedi dihapus sementaranya blog saya ini cukup ngebuat banyak kerugian..wew
mesti usaha lagi deh..
that's all deh.. Kalo ada yang ngalamin hal yang sama kayak saya, lakuin aja apa yang udah saya tulis di post sebelumnya sesering mungkin dan abis itu wait beauty aja.. sambil harap-harap cemas, siapa tau Blogger ngirim e-mail susulan :D
well, keep blogging, people :D
Highlight - Juni 2010
Highlight buat bulan Juni 2010 adalah:
- Update Table of Content untuk Blogger Update script Table of Content.
- Blogger Template Designer Keluar dari Draft Satu lagi fitur baru dari Blogger. Blogger Template Designer ngebuat ngobrak-ngabrik template jadi lebih mudah.
Nikmatin juga artikel-artikel menarik lainnya di Daftar Isi. Read More »








