Tampilkan postingan dengan label komentar. Tampilkan semua postingan
Tampilkan postingan dengan label komentar. Tampilkan semua postingan

Rabu, 18 Februari 2015

Parser JSON untuk Blogger: Komentar

Berikut adalah generalisasi fungsi untuk mengubah data JSON komentar Blogger menjadi markup HTML sesuai dengan keinginan. Saya sudah mendefinisikan ulang data-data yang penting ke dalam variabel, sehingga Anda bisa memodifikasi skrip ini dengan lebih mudah:

Bentuk Daftar

function generateCommentsData(json) {

// Poor configuration settings, develop them yourself!
var config = {
containerID: 'result-container', // Container ID to show the generated data
avatarSize: 50, // Default avatar size
text: {
anon: 'Anonymous'
}
};

var html = "",
item = "",
w = window,
d = document,
feed = json.feed,
container = d.getElementById(config.containerID),
postCommentTotal = +feed.openSearch$totalResults.$t, // The comment feeds' total (all)
postCommentStartIndex = +feed.openSearch$startIndex.$t, // The comment feeds' start index
postCommentPerPage = +feed.openSearch$itemsPerPage.$t, // The comment feeds' max results per page or per feed request
blogID = /\:blog-?(\d+)(\.|$)/.exec(feed.id.$t) ? /\:blog-?(\d+)(\.|$)/.exec(feed.id.$t)[1] : false, // The blog ID
postID = /\.post-?(\d+)(\.|$)/.exec(feed.id.$t) ? /\.post-?(\d+)(\.|$)/.exec(feed.id.$t)[1] : false, // The current post ID (if any)
postURL = false, // The current post URL (if any)
blogTitle = feed.title.$t, // The comment feeds' title
blogAuthorName = feed.author[0].name ? feed.author[0].name.$t : config.text.anon, // The blog/post author name
blogAuthorAvatar = feed.author[0].gd$image.src.replace(/\/s\d+(\-c)?\//, '/s' + config.avatarSize + '-c/'), // The blog/post author profile avatar URL
blogGeneratorName = feed.generator.$t, // The blog generator name (Blogger)
blogGeneratorURL = feed.generator.uri; // The blog generator URL (http://www.blogger.com)

// Remove the leading `http://` or `https://` in blog/post author profile avatar URL
// blogAuthorAvatar = blogAuthorAvatar.replace(/^https?\:/, "");

// No container found
if (!container) {
alert('Container not found.');
return;
}

// Getting the current post URL (if any)
if (postID) {
for (var h = 0, hen = feed.link.length; h < hen; ++h) {
item = feed.link[h];
if (item.rel == 'alternate') {
postURL = item.href;
break;
}
}
}

// No comments yet
if (!feed.entry || feed.entry.length === 0) {
container.innerHTML = '<p>No comments yet.</p>';
return;
}

// Building the markup ...
html += '<h1>' + blogTitle + '</h1>';
html += '<p><b>Blog ID:</b> ' + blogID + '</p>';
html += '<p><b>Post ID:</b> ' + postID + '</p>';
html += '<p><b>Post URL:</b> ' + postURL + '</p>';
html += '<p><b>Blog Author Name:</b> ' + blogAuthorName + '</p>';
html += '<p><b>Blog Author Avatar URL:</b> ' + blogAuthorAvatar + '</p>';
html += '<p><b>Total Comments:</b> ' + postCommentTotal + '</p>';
html += '<p><b>Comments Per Page:</b> ' + postCommentPerPage + '</p>';
html += '<p><b>Comments Start Index:</b> ' + postCommentStartIndex + '</p>';
html += '<hr>';
html += '<ol>';

var comments = feed.entry;

for (var i = 0, ien = comments.length; i < ien; ++i) {

var comment = comments[i], // A single comment feed object
commentID = comment.id.$t, // The comment ID
commentPublish = comment.published.$t, // The comment publishing time in ISO format
commentUpdate = comment.updated.$t, // The comment updating time in ISO format
commentDate = commentPublish, // The comment publishing time in timestamp format you defined in the dashboard
commentAuthorName = comment.author[0].name ? comment.author[0].name.$t : config.text.anon, // The comment author name
commentAuthorURL = comment.author[0].uri ? comment.author[0].uri.$t : false, // The comment author profile URL
commentAuthorAvatar = comment.author[0].gd$image.src.replace(/\/s\d+(\-c)?\//, '/s' + config.avatarSize + '-c/'), // The comment author profile avatar URL
commentContent = comment.content ? comment.content.$t : comment.summary.$t.replace(/<br *\/?>|[\s]+/gi, ' ').replace(/<.*?>|[<>]/g, ""), // The comment content
commentParent = false, // The comment parent ID (if any, for child comments)
commentPermalink = false, // The comment permalink
commentIsAdmin = commentAuthorName === blogAuthorName || commentAuthorAvatar === blogAuthorAvatar, // Is this comment was created by the blog/post author?
commentDeleteURL = false; // The comment delete URL

// Remove the leading `http://` or `https://` in comment author profile avatar URL
// commentAuthorAvatar = commentAuthorAvatar.replace(/^https?\:/, "");

for (var j = 0, jen = comment.link.length; j < jen; ++j) {
item = comment.link[j];
if (item.rel == 'self') {
// Getting the original comment ID
commentID = item.href.split('/').pop();
// Getting the comment delete URL
commentDeleteURL = item.href.replace(/\/feeds\/(\d+)\/(\d+)\/comments?\/(default|summary)\/(\d+)/, '/delete-comment.g?blogID=$1&postID=$4');
}
// Getting the comment permalink URL
if (item.rel == 'alternate') {
commentPermalink = item.href;
}
// Getting the comment parent ID (if any)
if (item.rel == 'related') {
var parentID = item.href.split('/').pop();
commentParent = commentID !== parentID ? parentID : false;
}
}

// Getting the comment publishing time in timestamp format you defined in the dashboard
for (var k = 0, ken = comment.gd$extendedProperty.length; k < ken; ++k) {
item = comment.gd$extendedProperty[k];
if (item.name == 'blogger.displayTime') {
commentDate = item.value;
break;
}
}

// Building the markup ...
html += '<li>';
html += '<p><b>ID:</b> ' + commentID + '</p>';
html += '<p><b>Publish:</b> ' + commentPublish + '</p>';
html += '<p><b>Update:</b> ' + commentUpdate + '</p>';
html += '<p><b>Date:</b> ' + commentDate + '</p>';
html += '<p><b>Author:</b> ' + commentAuthorName + '</p>';
html += commentAuthorURL !== false ? '<p><b>URL:</b> ' + commentAuthorURL + '</p>' : "";
html += '<p><b>Avatar URL:</b> ' + commentAuthorAvatar + '</p>';
html += commentParent !== false ? '<p><b>Parent ID:</b> ' + commentParent + '</p>' : "";
html += '<p><b>Permalink:</b> ' + commentPermalink + '</p>';
html += '<p><b>Status:</b> ' + (commentIsAdmin ? 'admin' : 'guest') + '</p>';
html += '<p><b>Delete URL:</b> ' + commentDeleteURL + '</p>';
html += '<p><b>Message:</b></p>';
html += '<div>' + commentContent + '</div>';
html += '</li>';

}

// Building the markup ...
html += '</ol>';

// Show the generated data to the container ...
container.innerHTML = html;

}

Penggunaan

Urutannya dimulai dari penulisan HTML untuk menampung data yang akan digenerasikan oleh fungsi di atas, dilanjutkan dengan memasukkan fungsi di atas ke dalam tag <script>, lalu memanggil data JSON dengan menggunakan nilai parameter URL callback berupa generateCommentsData, sesuai dengan nama fungsi di atas:

<div id="result-container">Loading&hellip;</div>
<script>
function generateCommentsData(json) { … }
</script>
<script src="http://nama_blog.blogspot.com/feeds/comments/default?alt=json-in-script&reverse=false&orderby=published&callback=generateCommentsData"></script>

Ekstra

Memanggil Data Komentar untuk Posting Tertentu

Gunakan format URL seperti ini untuk membatasi pemanggilan data komentar hanya untuk komentar-komentar yang terdapat pada posting dengan ID 6427706034645358331:

http://nama_blog.blogspot.com/feeds/6427706034645358331/comments/default?alt=json-in-script&reverse=false&orderby=published&callback=generateCommentsData

Sayangnya Saya tidak berhasil menemukan referensi resmi mengenai JSON Blogger versi 1.0 di Google Developer. Dulu memang pernah ada tapi sekarang sudah tidak ada lagi. Yang ada sekarang lebih banyak ditujukan untuk API Blogger versi 3.0+ yang membutuhkan autentikasi.

Kamis, 27 November 2014

Seperti Apa Komentar Blog Relevan Itu?

Seperti Apa Komentar Blog Relevan Itu?
Komentar relevan yang terdapat pada suatu blog adalah komentar yang berhubungan atau sesuai dengan isi dari artikel blog yang ditulis didalam blog tersebut sehingga dari setiap komentar yang sesuai tersebut akan menimbulkan hubungan timbal balik atau interaksi yang baik antara pemilik artikel dengan pengunjung atau pembaca artikel blog yang memberikan komentar tersebut

Masih Perlu Kah Komentar Blog Relevan?

Komentar blog yang relevan akan mempengaruhi kualitas artikel blog jika antara keduanya saling berhubungan seperti yang telah saya jelaskan diatas karena dengan adanya komentar yang relevan tersebut akan membantu rangking blog di search engine. Dan akan berbeda jika komentar artikel berisi komentar Spam maka Google juga akan menilai kalau artikel tersebut adalah artikel Spam. Untuk itu, marilah mulai membiasakan diri untuk berkomentar sebuah artikel blog dengan komentar yang baik yang sesuai dengan isi dari artikel tersebut agar bisa membantu blog yang dikomentari dan bukan tidak mungkin jika kita memberi komentar yang baik, maka pengunjung blog tersebut juga akan terbantu dengan komentar kita dan kemungkinan akan mencari tahu siapa yang memberi komentar blog ini, dan secara tidak langsung akan mengunjungi blog kita juga

Selain membantu artikel blog tersebut, satu hal yang sering banyak terjadi adalah, komentar blog yang relevan akan membantu dalam pemberian atau penambahan kata kunci yang bisa terindeks di search engine. Kata kunci disini adalah kata kunci yang menjadi topik dari artikel yang dibahas bukan karena dibubuhi dengan secara sengaja, apalagi penambahan link didalam komentar blog, akan sangat merugikan kedua belah pihak, baik yang berkomentar apalagi pemilik artikel blog tersebut. Jika Anda memasang link aktif didalam komentar blog maka Google akan mencari tahu lalu lintas blog yang terjadi dengan link tersebut, jika kebanyakan berasal dari dalam komentar, maka kemungkinan besar Google akan menilai kalau Link tersebut link Spam. Begitu juga dengan pemilik artikel blog yang membiarkan adanya link aktif yang nempel didalam komentar artikelnya yang mana link tersebut akan memperburuk penilaian Google terhadap blog tersebut karena banyaknya link keluar yang tidak relevan dengan link artikel pada blog tersebut

Memang banyak pemilik blog yang menginginkan blognya ramai dengan salah satu bukti adanya banyak komentar disetiap artikel blognya, namun untuk meninggalkan komentar juga harus relevan dengan artikel blog yang dibaca tersebut. Setelah sedikit penjelasan yang saya berikna dengan mengenai komentar, menurut Anda bagaimana masih perlu kah komentar blog relevan? dan selama ini seperti apa komentar blog Anda? Apakah sudah relevan dengan artikel blog yang Anda tulis?

Masih Perlu Kah Komentar Blog Relevan?

Masih Perlu Kah Komentar Blog Relevan? Salah satu yang saya suka dari sebuah blog adalah Komentar blog tersebut karena jika didalam blog tersebut memiliki komentar yang mengandung pertanyaan atau penjelasan dari artikel yang dikomentari, saya sering menemukan ide untuk membuat artikel-artikel baru blog ini dan juga membuat saya betah untuk membaca semua komentar yang ada di blog tersebut

Masih Perlu Kah Komentar Blog Relevan?

Selain menemukan ide-ide baru dari setiap komentar yang saya baca di blog-blog yang saya kunjungi, ternyata setelah saya lihat dan saya cermati blog tersebut selalu berada di halaman pertama Google, meskipun tidak selalu menjadi di urutan pertama namun hampir semua artikelnya selalu tampil di halaman pertama Google untuk kata kunci yang saya cari. Dan juga membuat artikel blog itu semakin unik karena tidak hanya di artikel blog yang memiliki kata kunci namun di komentar artikel blog tersebut juga terdapat kata kunci yang berasal dari setiap komentar pengunjung blog tersebut

Ternyata dari hasil pengamatan yang saya lakukan antara artikel dan komentar blog memiliki pengaruh yang sangat kuat jika diantara keduanya memiliki relevansi yang baik. Lalu seperti apa komentar relevan blog itu? dan masih perlu kah komentar blog relevan?

Senin, 25 Agustus 2014

Mengganti Kolom Komentar Alternatif Di Blogger

Mengganti Kolom Komentar Alternatif Di Blogger - Jika dibandingkan dengan WordPress, sebenarnya Blogger memiliki kelebihan yang tidak bisa dimiliki oleh WordPress yaitu terdapat pada kolom komentar masing-masing platform tersebut

Mengganti Kolom Komentar Alternatif Di Blogger

Semua tahu kalau WordPress memiliki tampilan kolom komentar yang hanya seperti itu, sejak dulu sejak pertama kali diluncurkan tahun 2003, tampilan kolom komentar WordPress tidak pernah berubah. Hanya seperti itu saja, ada kolom nama, email, website dan kolom komentar. Bagaimana dengan kolom komentar Blogger atau Blogspot? Lebih menarik dan lebih lengkap karena di Blogger lebih lengkap penggunaan identitas yang terdapat pada kolom komentar tersebut, ada nama, ada openID, ada website, ada email dan bisa menggunakan akun di WordPress, LiveJournal, TypePad, AIM dan bagaimana dengan WP? Tentunya tidak bisa menggunakan akun Blogger untuk berkomentar di WordPress

Meskipun kedua platform tersebut memiliki kelebihan dan kekurangan, namun masih ada yang lebih menginginkan fitur-fitur tambahan yang ada didalam kolom komentar tersebut dan sebagai alternatif dipilih beberapa penyedia layanan komentar yang secara gratis bisa didapat. Dan berikut beberapa layanan yang digunakan untuk mengganti kolom komentar alternatif di Blogger dan sebagian juga bisa dipasang di WordPress

Facebook
Sebagai media sosial yang banyak digunakan, facebook juga menyediakan berbagai fitur yang berguna yang bisa di pasang di blog dan salah satu fitur yang banyak digunakan adalah komentar facebook. Untuk memasang komentar facebook di Blogger, silahkan langsung menuju pengembangnya di facebook di https://developers.facebook.com/docs/plugins/comments/

Google+
Google plus tidak berdiri sendiri, sebagai salah satu layanan sosial media, sudah banyak yang bisa terintegrasi dengan salah satu produk Google yang mulai populer ini. Dengan mulai populernya Google+, semakin banyak yang menggunakan Google+ untuk di pasang di blog, baik tombol Google+ ataupun Komentar Google+.

Untuk memasang komentar Google plus di Blogger, silahkan lihat tata caranya di https://support.google.com/blogger/answer/2981015?hl=en&ref_topic=3007636 atau cari panduannya di search engine. Untuk pengguna WordPress, gunakan pluginnya di http://wordpress.org/plugins/google-plus-comments/

Disqus
Suah mengenal Disqus? Selain sebagai berita sosial khususnya komunitas, Disqus juga menyediakan fitur kolom komentar yang juga sering banyak digunakan. Bahkan beberapa pengguna blog seperti Blogger atau WP, mengganti kolom komentar blog mereka dengan kolom komentar Disqus

Kolom komentar Disqus memiliki fitur threaded, RSS, update melalui email dan login melalui Facebook, Google+ dan Twitter. Dan juga bisa berkomentar dengan menyertakan gambar dan video. Untuk memasang kolom komentar Disqus di Blogger, klik Disqus.com

LiveFyre
Sebagai media sosial, Livefyre juga menyediakan fitur kolom komentar yang bisa di pasang di blog. Dalam fitur ini, Livefyre merupakan saingan terdekat dari Disqus, dan beberapa situs besar seperti Enganget dan Mashable pernah menggunakan Livefyre untuk kolom komentar blog mereka.

Bagaimana cara memasang komentar Livefyre di blog? Klik http://web.livefyre.com/comments/ dan ikuti petunjuknya disana :)

Intense Debate
Jika Anda memiliki akun di WordPress.com, maka Anda sudah bisa menggunakan Intense Debate karena sosial media ini merupakan anak dari WordPress dan selain sebagai sosial media, Intense Debate juga menyediakan kolom komentar yang bisa dipasang di Blogger

Namun untuk memasang komentar Intense Debate ada sedikit kerumitan dan tidak serta merta harus dipasang begitu saja kedalam Blogger dan jika sudah terpasang maka komentar bawaan blog atau komentar pihak ketiga lainnya akan hilang dan tidak berfungsi. Jika Anda tertarik untuk memasang Intense Debate kedalam blog, silahkan klik http://intensedebate.com/ Dan untuk cara pasangnya, akan saya update diartikel berikutnya

Vicomi
Untuk yang satu ini mungkin kurang begitu familiar dengan Anda karena Vicomi merupakan layanan media yang tergolong masih baru. Meskipun baru, Vicomi sudah memiliki fitur yang begitu lengkap dan mudah dipasang kedalam blog, mau pasang Vicomi? Klik http://www.vicomi.com dan ikuti langkah-langkahnya disana :)

Catatan: Untuk menggunakan penyedia layanan komentar blog diatas, silahkan buatlah akun terlebih dahulu. Selain Intense Debate, semua penyedia layanan komentar diatas bisa dipasang bersamaan

Jika Anda tertarik untuk mengganti kolom komentar alternatif di Blogger, silahkan pilih salah satu atau beberapa layanan diatas sesuai dengan minat Anda. Untuk saran, saya lebih cenderung memilih Facebook, Disqus, dan Google+.

Selasa, 15 April 2014

Penyebab Komentar Blog Tidak Muncul (bag.2)

Penyebab Komentar Blog Tidak Muncul - Ini merupakan artikel kedua atau artikel sambungan dari artikel sebelumnya yaitu tentang Dipublikasikan komentar blog tidak muncul. Artikel ini saya buat karena ada seorang teman yang mengalami permasalahan yang sama dengan artikel yang telah saya jelaskan sebelumnya. Pada artikel ini, saya tidak akan menjelaskan ulang mengenai komentar blog yang tidak muncul tersebut, akan tetapi lebih sedikit dijelaskan mengenai penyebab komentar blog tidak muncul tersebut

Penyebab Komentar Blog Tidak Muncul

Seperti yang telah saya sebutkan pada artikel sebelumnya, jika ingin melakukan update atau mengedit kode template blog sebaiknya lakukan back up terhadap template blog Anda agar jika terjadi kesalahan atau error yang membuat Anda bingung. Dan jika terjadi erro maka Anda bisa melakukan pemasangan ulang terhadap template blog dengan memasang file back up dari template blog tersebut. Ingat, lakukan back up terhadap template blog jika ingin melakukan editing terhadap kode template

Lantas apa penyebab komentar blog tidak muncul ?
Mencari kode template blog memang agak terlalu rumit, apalagi jika kode tersebut terdiri dari banyak kata, kalimat, atau simbol. Jika Anda bingung dalam mencari kode template blog, silahkan baca penjelasannya disini

Mengenai penyebab komentar blog tidak muncul, dari 2 blog yang saya temui permasalahannya, adalah sama, yaitu komentar blog tidak muncul, bukan kolom komentarnya yang tidak muncul tapi komentar yang di publish yang tidak muncul. Untuk mengatasi komentar yang tidak muncul ini, salah satu cara terbaik adalah mengganti kode template blog yang sama dengan template yang telah digunakan pada blog tersebut. Selesai

Namun jika Anda mengalami permasalahan seperti itu dan masih ingin menggunakan template tanpa mengganti template yang sama maka caranya adalah mencari kode template yang menyebabkan komentar blog tersebut tidak muncul. Dan dari 2 blog yang mengalami permasalahan tersebut, ternyata kedua blog itu tidak memiliki kode berikut ini atau kode ini telah hilang dari kode template yang seharus ada

Blog pertama yang tidak memiliki kode berikut ini
<div class='comments-content'>
<b:if cond='data:post.embedCommentForm'>
<b:include data='post' name='threaded_comment_js'/>
</b:if>
<div id='comment-holder'>
<data:post.commentHtml/>
</div>
</div>

Blog kedua yang tidak memiliki kode berikut ini
<div class='comments-content'>
<b:if cond='data:post.embedCommentForm'>
<b:include data='post' name='threaded_comment_js'/>
</b:if>
<div id='comment-holder'>
<data:post.commentHtml/>
</div>
</div>

Dan berikut penjelasan jika kode <div class='comments-content'> tidak ada didalam template blog:
Tampilan komentar blognya teman yang komentarnya tidak muncul Lihat
Penyebab Komentar Blog Tidak Muncul

Tampilan komentar blognya saya yang komentarnya muncul Lihat
Penyebab Komentar Blog Tidak Muncul

Tampilan kode <div class='comments-content'> didalam template blog saya Lihat
Penyebab Komentar Blog Tidak Muncul

Kode <div class='comments-content'> saya hapus Lihat
Penyebab Komentar Blog Tidak Muncul

Setelah dihapus, maka komentar di blog saya tidak ada alias tidak muncul Lihat
Penyebab Komentar Blog Tidak Muncul


jadi, jika ada permasalahan yang sama yang terjadi pada blog Anda, maka kemungkinan besar adalah seperti yang telah saya jelaskan diatas. Semoga bermanfaat dan terimakasih telah membaca artikel ini, Penyebab Komentar Blog Tidak Muncul

Senin, 22 April 2013

Mengaktifkan Fitur Komentar Google+ (Untuk yang Gagal)

Baru-baru ini Blogger telah merilis fitur komentar baru yang memungkinkan kita untuk mengintegrasikan komentar Blogger ke Google+. Untuk mengaktifkannya mudah. Masuk saja ke tab Google+ kemudian centang pilihan “Gunakan Google+ Komentar di blog ini”:

Beralih ke sistem komentar Google+
Berpindah ke sistem komentar Google+

Jika template blog yang digunakan masih standar, seharusnya area komentar lama akan langsung digantikan dengan komentar baru dari Google+. Tapi jika template yang dipakai sudah tidak standar lagi, kita masih bisa menggunakan cara manual untuk menampilkan komentar Google+. Berikut ini adalah langkah-langkahnya:

Pertama-tama masuk ke halaman editor HTML template kemudian cari kode ini (loncat saja ke widget Blog1, kemudian jabarkan):

<b:includable id='comments' var='post'>

Jangan lupa untuk menyimpan salinan template ke komputer sebelum melakukan modifikasi.

Setelah ditemukan, salin kode di bawah ini kemudian letakkan di atasnya:

<b:includable id='g-comments' var='post'>

<div id='g-comments-outer'>
<div class='g-comments' expr:data-href='data:blog.canonicalUrl' data-width='600' data-first_party_property='BLOGGER' data-view_type='FILTERED_POSTMOD'>
<a href='#g-comments-outer' id='g-comments-loader'>Add Comments</a>
</div>
</div>

<!-- For slow connection -->
<script type='text/javascript'>
//<![CDATA[
(function() {
var btn = document.getElementById('g-comments-loader'),
showGC = function() {
var script = document.createElement('script'),
head = document.getElementsByTagName('head')[0], old;
script.type = "text/javascript";
script.id = "g-comments-script";
script.src = "//apis.google.com/js/plusone.js";
if (document.getElementById('g-comments-script')) {
old = document.getElementById('g-comments-script');
old.parentNode.removeChild(old);
}
head.appendChild(script);
};
btn.onclick = function() {
this.innerHTML = "Memuat...";
showGC();
return false;
};
})();
//]]>
</script>

</b:includable>

Kode 600 merupakan variabel untuk menentukan lebar area komentar. Sesuaikan dengan lebar area posting blog Anda. Jika perlu ganti juga label Add Comments dengan kata-kata yang lain.

Setelah itu cari kode ini kemudian jabarkan:

<b:includable id='main' var='top'>

Temukan kode yang kurang lebih tampak seperti ini:

<b:include data='post' name='post'/>
<b:if cond='data:blog.pageType == &quot;static_page&quot;'>
<b:include data='post' name='comment_picker'/>
</b:if>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<b:include data='post' name='comment_picker'/>
</b:if>

Ganti dengan kode ini:

<b:include data='post' name='post'/>
<b:if cond='data:blog.pageType == &quot;static_page&quot;'>
<!-- b:include data='post' name='comment_picker'/ -->
<b:include data='post' name='g-comments'/>
</b:if>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<!-- b:include data='post' name='comment_picker'/ -->
<b:include data='post' name='g-comments'/>
</b:if>

Atau jika tidak ada kode yang tampak seperti di atas, mungkin karena bentuknya masih seperti ini:

<b:include data='post' name='post'/>
<b:if cond='data:blog.pageType == &quot;static_page&quot;'>
<b:include data='post' name='comments'/>
</b:if>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<b:include data='post' name='comments'/>
</b:if>

Ganti dengan kode ini, jika yang ditemukan adalah kode dengan pola yang ke dua:

<b:include data='post' name='post'/>
<b:if cond='data:blog.pageType == &quot;static_page&quot;'>
<!-- b:include data='post' name='comments'/ -->
<b:include data='post' name='g-comments'/>
</b:if>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<!-- b:include data='post' name='comments'/ -->
<b:include data='post' name='g-comments'/>
</b:if>

Klik Simpan Template. Seharusnya sekarang komentar Google+ sudah tampil di bawah posting.

Langkah Terakhir

Langkah terakhir adalah menghilangkan tanda centang pada pilihan “Gunakan Google+ Komentar di blog ini” di tab Google+. Mengapa? Karena fitur komentar Google+ yang kita buat sekarang sudah ditampilkan dengan cara manual. Dengan cara menampilkan komentar Google+ secara manual, maka ini memungkinkan kita untuk melakukan modifikasi area komentar dengan lebih leluasa karena markup HTML yang dibuat telah disisipkan secara manual juga. Sehingga —sebenarnya— kita bisa menampilkan komentar Google+ ini di area manapun yang kita suka, yaitu berdasarkan letak elemen #g-comments-outer.

Suatu saat mungkin Anda ingin membuat tampilan komentar ini menjadi berbentuk seperti jendela munculan.

Tapi jujur saja, secara pribadi Saya tidak begitu tertarik untuk mengaktifkan fitur ini, sama halnya dengan ketidaktertarikan Saya untuk menyisipkan komentar Facebook di dalam blog Blogger. Jika Saya bisa menggunakan fitur bawaan yang ada, mengapa Saya harus menggunakan pihak ke tiga? Tapi ini cuma pendapat. Jika Anda berminat untuk berpindah ke sistem komentar Google+, ikuti saja langkah-langkah di atas. Lagipula komentar yang masuk akan terintegrasi secara langsung dengan komentar Blogger, sehingga jika suatu saat Anda ingin kembali untuk menggunakan fitur komentar bawaan dari blog, maka komentar-komentar yang sebelumnya telah terbit ke Google+ akan tampil kembali di komentar Blogger.

Seharusnya sih begitu.

Selasa, 29 Januari 2013

Bagaimana Cara Bertanya yang Baik di dalam Sebuah Blog/Forum/Grup/Komunitas?

Question

Terutama komunitas dunia maya. Pada dasarnya ini bisa dijadikan sebagai panduan untuk mendapatkan jawaban yang memuaskan dari seorang administrator blog atau anggota dari blog tersebut atau pengunjung blog tersebut, tapi Saya coba perluas lagi agar artikel ini juga bisa berguna untuk orang-orang yang ingin memulai bergabung dengan sebuah grup atau forum tertentu.

Jika selama ini kamu mengalami masa-masa seperti, menanyakan sesuatu dalam sebuah grup atau forum tetapi tidak pernah mendapatkan tanggapan dari para anggota, atau bahkan ditendang dari forum tersebut, mungkin masalahnya bukan berasal dari dirimu secara pribadi, tetapi berasal dari cara kamu bertanya yang salah. Berikut ini ada beberapa pola pertanyaan atau percobaan pemecahan kasus pribadi yang sebaiknya dihindari:

Hindari Pertanyaan yang Terlalu Miskin/Terlalu Luas

Contoh-contoh pertanyaan yang miskin/terlalu luas adalah seperti ini:

1. “Kenapa tidak berhasil?”
2. “Kok di blog Saya tidak jadi?”
3. “Saya sudah menginstal plugin X tetapi kenapa tidak bekerja?”

Pertanyaan di atas semuanya tidak mungkin bisa dijawab karena kamu tidak memberikan petunjuk-petunjuk yang jelas mengenai masalah yang sedang terjadi. Justru, pertanyaan-pertanyaan di atas hanya akan menimbulkan pertanyaan-pertanyaan baru seperti: “Tidak jadi bagaimana?”, “Tidak berhasil bagaimana?”, “Tidak bekerja bagaimana?”, “Apanya yang tidak berhasil?”, “Di mana masalah itu terjadi?” (atau yang paling buruk ⇒ “???”).

Berikan beberapa petunjuk yang jelas mengenai apa yang terjadi, bukan sekedar kesimpulan kegagalan. Selain itu, pertanyaan-pertanyaan seperti: “Kenapa tidak berhasil?” dan “Kenapa Saya gagal?”, semua itu sebenarnya adalah pertanyaan yang seharusnya ditanyakan kepada diri sendiri, bukan kepada orang lain.

Sesuaikan Tema Pembahasan

Jangan bertanya keluar dari topik pembahasan, meskipun pertanyaamu sangat berkualitas. Masalahnya adalah, sangat disayangkan jika pertanyaanmu bagus tetapi tidak sesuai dengan topik pembicaraan. Pertanyaanmu itu sebenarnya bisa dijawab dan akan sangat berguna untuk orang banyak jika dibagikan. Tetapi kalau pertanyaan tersebut dilontarkan di tempat yang tidak tepat, bagaimana orang lain yang membutuhkan jawaban itu bisa menemukannya?

Pikirkanlah mengenai mesin pencari. Orang-orang yang suka belajar secara mandiri (otodidak) di internet pasti akan menggunakan mesin pencari atau fasilitas pencarian sebuah situs/grup/komunitas untuk mencari jawaban dari masalah yang sedang dialaminya —atau setidaknya mencoba untuk menemukan pembahasan yang sesuai dengan masalah yang sedang dia alami. Kalau sejak awal proses diskusi dilakukan di tempat yang salah, maka diskusi tersebut tidak akan pernah bisa ditemukan. Akibatnya, orang-orang akan menanyakan persoalan yang sama berulang kali hanya dengan alasan bahwa mereka tidak berhasil menemukan jawabannya saat mereka mencarinya. Padahal sebenarnya persoalan tersebut sudah pernah terjawab/terpecahkan sebelumnya.

Jika sejak awal kita sudah melakukan diskusi di tempat yang benar dan dalam topik pembahasan yang tepat, maka orang lain akan dengan mudah menemukan jawaban yang mereka cari suatu saat (Kesimpulannya: Mereka tidak perlu bertanya). Dan jika sewaktu-waktu ada seseorang yang menanyakan kasus yang sama, maka kita cukup mengarahkan mereka saja menuju diskusi yang sudah pernah kita lakukan sebelumnya.

Tanyakan Sesuatu yang Bisa Dijawab, Bukan Diuraikan

Pertanyaan yang baik adalah pertanyaan yang bisa menghasilkan jawaban yang singkat tetapi berguna. Hindari pertanyaan-pertanyaan seperti ini saat kamu mencoba bertanya di dalam sebuah forum/grup:

“Bagaimana cara membuat blog?”

Cobalah lebih spesifik. Misalnya seperti, “Saya ingin membuat blog menggunakan Blogger, cara mendaftarkannya bagaimana?”

Meskipun sebenarnya pertanyaan itu masih bisa dibuat lebih spesifik lagi.

Jangan Membuat Pertanyaan yang Hanya Bisa Dijawab dengan Jawaban “ya” dan “tidak”

Pola-pola pertanyaan semacam ini tidak ideal untuk dituliskan di dalam forum. Pertanyaan semacam ini hanya boleh diterapkan jika situasinya sedang berada dalam keadaan komunikasi yang bersifat obrolan. Membuat pertanyaan yang hanya akan menimbulkan jawaban “ya” dan “tidak” hanya akan memaksa para pembaca lain untuk mengetahui suatu fakta yang terlalu sederhana dan belum tentu mereka butuhkan. Pertanyaan semacam ini juga bisa membuang-buang waktu. Beberapa contoh pola pertanyaan yang termasuk ke dalam kategori ini:

1. “Apakah widget ini akan membuat blog Saya menjadi lebih lambat?”
2. “Apakah ini bisa diterapkan pada blog Saya?”
3. “Apakah jika Saya memberikan warna seperti ini akan merusak penampilan?”
4. “Apakah jika Saya menggabungkan widget ini dengan plugin itu masih bisa tetap bekerja?”

Semua pertanyaan di atas pada dasarnya sama persis, dan bisa dengan mudah dijawab dengan ini:

“Masalah ya dan tidak Saya tidak tahu. Cobalah sendiri dan lihat hasilnya. Apakah sesuai dengan dugaanmu atau tidak? Jika sesuai, itu berarti ya jika sebaliknya berarti tidak. Titik”.

Gunakan Istilah-Istilah Sesuai dengan Kemampuan

Jangan mencoba-coba untuk menggunakan istilah yang sulit saat bertanya, bisa-bisa kamu malah akan ditertawakan atau diabaikan karena orang-orang berpikir kamu menanyakan sesuatu yang bahkan kamu sendiri belum menguasai tema pembahasan tersebut. Dikhawatirkan, dalam pikiran orang-orang akan muncul kata-kata seperti ini: “Kalopun gue jawab kamu juga ga bakalan ngerti!”

Gunakan Bahasa Mayoritas Komunitas

Jika kamu berada di dalam forum orang Indonesia atau forum dengan bahasa mayoritas bahasa Indonesia, jangan sekali-kali menggunakan bahasa Inggris saat bertanya. Mungkin kamu beralasan, “Saya ingin sekalian belajar bahasa Inggris sambil berdiskusi supaya bahasa Inggris Saya lancar”.

Mas, Mbak, Pak, Bu, di sini bukan tempatnya belajar bahasa Inggris. Belajar bahasa Inggris itu sudah ada tempatnya tersendiri. Gunakanlah bahasa sesuai dengan mayoritas bahasa yang digunakan di dalam komunitas tersebut. Jangan kebarat-baratan begitu kalau sedang berbicara dengan orang lokal. Lagipula, kalau memang kamu berniat untuk memperlancar bahasa Inggris kamu, kenapa tidak sekalian saja kamu bergabung dengan komunitas sejenis yang anggotanya terdiri dari orang-orang asing?

Ini berlaku juga untuk blog/forum/komunitas orang Indonesia yang menjadikan bahasa mayoritasnya dengan bahasa asing, misalnya bahasa Inggris. Jangan pernah sekali-kali bertanya atau berkomentar menggunakan bahasa lokal meskipun kamu tahu bahwa administrator blog/anggota komunitas tersebut adalah orang lokal yang berbicara dengan bahasa yang sama denganmu.

Mungkin dia punya tujuan lain, yang membuatnya memutuskan untuk mengubah forum/komunitas/blog mereka menjadi berbahasa asing.

Pengecualian jika komunikasi yang terjadi dilakukan oleh para anggota yang masing-masing tidak mengerti bahasa satu sama lainnya. Jika kasus yang terjadi adalah seperti itu, maka gunakanlah bahasa Inggris.

Jangan Membuat Pertanyaan Baru

Jangan membuat pertanyaan baru setelah pertanyaan sebelumnya sudah terjawab. Itu sama saja mencoba keluar dari topik pembahasan secara halus. Misalnya seperti ini:

“Terima kasih. Sudah berhasil.
Satu lagi pertanyaan: Bagaimana caranya membuat efek animasi seperti di blog ini, soalnya Saya suka banget sama efeknya”.

Kalau kamu ingin memulai pertanyaan baru, buatlah sebuah posting diskusi baru pada kategori diskusi yang tepat atau pisahkan pertanyaan baru tersebut dari posting/komentar/tanggapan yang sudah diterbitkan sebelumnya. Yang penting tetap sesuaikan dengan topik yang sedang dibahas.

Jangan Merendahkan Diri

Yang Saya maksud merendahkan diri di sini adalah mencoba menanyakan sesuatu yang kemudian diikuti dengan kata-kata seperti ini:

1. “Terima kasih master!”
2. “Maaf, Saya masih newbee
3. “Mohon pencerahannya...”
4. “Mohon bantuannya mastah...”

Jujur, Saya paling risih dengan bumbu-bumbu pertanyaan seperti itu. Jangan merendahkan diri seperti itu! Buktikan bahwa kamu layak untuk menanyakan itu dan buktikan bahwa pertanyaanmu itu bisa menunjukkan seberapa luas ide dan kecerdasan yang kamu punya! Atau kalau perlu, buat para anggota tertegun dan menyerah karena tidak berhasil menjawab pertanyaanmu.

Apa Pertanyaannya/Masalahnya?

Pertanyaan di bawah ini sangat singkat dan padat, bahkan bisa dibilang tidak ada pertanyaannya sama sekali! Orang-orang tidak akan pernah tahu mengenai apa yang sedang coba kamu tanyakan. Biasanya pertanyaan-pertanyaan yang masuk ke dalam kategori ini adalah pertanyaan yang dilengkapi dengan cuplikan gambar (screenshoot) atau URL blog:

Kok jadinya begini?

Begini apa?? Mati lampu??!

Kok jadinya begini:

http://nama_blog.blogspot.com/p/asdfghjk.html

??? Jadi apa?? Yang sebelah mana??!

Jangan Mengulang-Ulang Pertanyaan di Tempat yang Sama

Jangan mengulang-ulang pertanyaan di tempat yang sama. Kalau kamu tetap melakukan itu, orang-orang akan menganggapmu sebagai spammer yang tidak tahu diri/mengganggu. Akibatnya, kamu akan dikeluarkan dari grup atau diabaikan. Kalau memang ingin mengulang pertanyaan, lakukanlah itu pada forum/komunitas yang berbeda (dengan harapan bisa mendapatkan jawaban dengan cepat).

Jangan Berlebihan di dalam Mengucapkan Terima Kasih

Jangan berlebihan di dalam mengucapkan terima kasih, misalnya seperti ini:

“Makasih gan... Berhasil. Agan emang masternya JS dah!”

Menurut Saya pribadi, sebenarnya ucapan terima kasih itu tidak begitu diperlukan di dalam forum/grup. Karena bagi para anggota, berhasil membantu saja sudah merupakan kesenangan yang luar biasa. Jadi, memberikan kabar keberhasilanmu saja sudah cukup. Bisa juga diikuti dengan ucapan terima kasih di bagian akhir. Tapi secukupnya saja:

1. “Oke. Berhasil”.
2. “Sudah bisa. Terima kasih”.

Jadi, Bagaimana Pertanyaan yang Baik?

Sebuah pola pertanyaan yang baik setidaknya terdiri dari kalimat-kalimat yang singkat, namun cukup untuk memberikan informasi mengenai apa masalahnya, apa yang sudah diusahakan untuk memecahkan masalah tersebut dan di mana masalah tersebut terjadi:

“Saya sudah mengikuti langkah-langkah cara memasang plugin slider pada blog sesuai dengan tutorial [ di atas | yang Saya baca di sini {link} ], tetapi slider tersebut tidak bekerja, dan susunan gambarnya menjadi berantakan.

Saya sudah mencoba untuk mengganti versi JQuery dan mengubah letak script slider tersebut tetapi tetap tidak berhasil.

Saya memakai Blogger. Berikut ini adalah halamannya: http://nama_blog.blogspot.com/p/url-menuju-halaman-yang-tepat.html

Pola pertanyaan di atas seharusnya sudah cukup untuk menghasilkan jawaban yang langsung bisa menyelesaikan masalahmu karena pertanyaan di atas sudah bisa menghasilkan beberapa petunjuk minimal pemecahan masalah yang dibutuhkan:

Apa masalahnya?Masalahnya adalah slider tidak bekerja dan gambarnya tidak tertata (bukan sekedar “tidak bekerja”).
Apa saja yang sudah kamu coba untuk memecahkan masalah tersebut?Mengubah versi JQuery dan mengubah posisi script eksekusi slider. Sebagaimana syarat bertanya yang benar, kita seharusnya mencoba segala cara terlebih dahulu sebelum pada akhirnya kita menyerah dan merasa hampir mati karena masalah kita tersebut. Kita ini sudah bukan anak TK lagi, jadi jangan manja. Secara, kita akan mendapatkan bantuan secara gratis, jadi setidaknya berusahalah untuk memecahkan masalah diri sendiri terlebih dahulu sebelum pada akhirnya memutuskan untuk meminta bantuan kepada orang lain. Bertanya itu berbeda dengan menyuruh.
TKP/Tempat Kejadian Perkara?Para anggota grup/komunitas bukanlah manusia ajaib yang bisa membaca pikiranmu, jadi berikanlah sebuah tempat kejadian yang jelas mengenai masalah yang kamu alami supaya mereka juga bisa melihat dan merasakannya. URL/alamat menuju tempat kejadian juga harus jelas dan langsung menuju tempat terjadinya masalah, bukan cuma alamat utama saja. Agar tidak membingungkan anggota di dalam menemukan letak masalahnya.

Tidak Harus Memakai Bahasa Resmi/Baku

Yang penting jelas, singkat dan seminimal-minimalnya bisa menghasilkan informasi seperti di atas:

“Gan, ane udah pasang tuh slider di blog ane (di sini gan ⇒ {link}) persis, kayak tutorial [ di atas | yang ini nih... {link} ], tapi gagal gan, gak jalan! Gambarnya juga jadi berantakan. Gimana nih??!!! :emoticon-nangis:

Udah tak ganti-ganti juga versi JQuery sama tak otak-atik posisi tagging slider ntuh tapi tetep aja ga jalan. HEUUU

Aku pake Blogger. Nih blog ane: http://nama_blog.blogspot.com/p/url-menuju-halaman-yang-tepat.html

Sedikit Narsis Tidak Masalah

Sedikit narsis tidak masalah, malah menurut Saya bagus. Karena dengan sedikit narsis, maka saat kamu bertanya kamu akan merasa bahwa orang-orang di luar sana juga akan membaca tulisanmu, sehingga secara tidak langsung, alam bawah sadarmu akan berpikir untuk membuat pertanyaan-pertanyaan yang sekiranya bisa bermanfaat untuk orang-orang yang sedang membaca tulisanmu juga.

Bertanyalah Kepada Sesama Pelajar Otodidak

Bertanyalah kepada orang-orang yang selama ini belajar secara otodidak, bukan kepada orang-orang yang belajar melalui pendidikan formal. Saya mempunyai beberapa alasan mengapa kamu lebih baik tidak bertanya kepada mereka. Tapi mungkin Saya tidak akan menuliskannya di sini. Mungkin di blog lain.

Beberapa Hal yang Sebaiknya Dipikirkan Sebelum Bertanya

  1. Orang yang kamu tanyai belum tentu bisa menjawab pertanyaanmu.
  2. Orang yang kamu tanyai sedang sibuk.
  3. Orang yang kamu tanyai sedang tidak ingin menjawab karena pertanyaanmu ternyata tidak sesuai dengan topik pembahasan. Dia ingin menghapus pertanyaanmu, tapi takut kamu salah paham. Kalau dia menjawab pertanyaanmu atau memperingatkanmu untuk tidak menulis pertanyaan/memulai diskusi yang keluar dari topik, maka kamu akan menanggapi tulisan orang tersebut dan akan membuat diskusi OOT semakin panjang.
  4. Kalau seseorang bertanya kepada Saya seperti ini, apakah Saya bisa mengerti dan menjawabnya?
  5. Forum/grup/komunitas adalah milik bersama dan digunakan untuk memecahkan masalah bersama secara bersama-sama.
  6. Pertimbangkanlah untuk tidak bertanya. Ya. Coba pecahkan masalahmu sendiri sekali lagi. Mungkin sekarang akan berhasil.

Cara Mengetahui Bahwa Pertanyaanmu itu Bagus

  1. Pertanyaan yang bagus biasanya akan terjawab hanya dalam sekali jawab. Dalam beberapa forum bahkan terdapat semacam label peringkat yang diberikan kepada anggota bukan hanya berdasarkan kualitas jawaban tetapi juga berdasarkan kualitas pertanyaannya. Semacam up-vote dan down-vote. Orang-orang yang memberikan up-vote terhadap sebuah pertanyaan biasanya adalah orang-orang yang ingin menanyakan hal yang sama.
  2. Diskusi tidak berjalan seperti chatting/mengobrol.
  3. Ada orang yang berkata, “Pertanyaan bagus!”

Selasa, 08 Januari 2013

Membuat Fitur Komentar Berbalas (Threaded Comments) pada Blogger dengan Fungsional yang Asli

Membuat Fitur Komentar Berbalas (Threaded Comments) pada Blogger dengan Fungsional yang Asli
Mengaktifkan fitur threaded commenting non-standar pada Blogger.

Setelah berhasil menemukan beberapa metode untuk menciptakan komentar bersarang (atau berbalas??) pada Blogger, Saya rasa metode dari bX-NicoNico adalah yang paling bagus. Mengapa?

  1. Dia tidak menggunakan elemen <data:post.commentJso/> sebagai salah satu elemen yang dibutuhkan untuk sistem ini, sehingga markup HTML akan menjadi lebih pendek dari markup HTML pada template dengan fitur komentar bersarang yang masih standar. (Fitur komentar bersarang yang masih standar akan menampilkan JSON komentar sebelum daftar komentar, sehingga jumlah karakter markup HTML pada fitur komentar bersarang yang masih standar akan menjadi dua kali lipat lebih panjang dibandingkan markup komentar biasa.
  2. Layout komentar tertata secara otomatis. JavaScript hanya digunakan untuk mengubah URL pada iframe formulir komentar dan juga untuk memindahkan posisinya sesuai dengan ID komentar induk masing-masing.
  3. Karena layout komentar ditata secara otomatis oleh Blogger, maka saat JavaScript dimatikan, tata letak komentar balasan akan tetap berada pada posisi yang benar. Ini berbeda dengan beberapa hack komentar bersarang Blogger yang hanya menggunakan JavaScript (yang juga telah Saya pakai sampai sekarang) untuk memposisikan komentar-komentar balasan, sehingga saat JavaScript dimatikan, layout komentar akan berantakan.

Berikut ini adalah fitur komentar versi Saya yang lebih pendek dan lebih mudah dalam hal instalasi yang Saya buat berdasarkan konsep dari Felipe, yaitu dengan cara menggunakan elemen data baru bernama <data:comment.inReplyTo/> untuk menyaring anak-anak komentar yang tampil. Elemen ini berfungsi untuk menampilkan ID komentar induk pada masing-masing komentar balasan. Saya bisa mengatakan bahwa metode ini adalah metode yang paling tepat dan bukan merupakan “hack”, karena kita menerapkan elemen yang ada dari Blogger untuk dimanfaatkan sesuai dengan tugasnya:


Mengaktifkan Fitur Komentar Bersarang pada Blogger

Pertama-tama buka editor HTML template Anda kemudian cek Expand Template Widget. Temukan kode ini:

]]></b:skin>

Salin kode CSS ini dan letakkan di atasnya:

.clearfix:after {
content:"";
display:table;
clear:both;
}

.clearfix {*zoom:1}

.pull-left {
display:block;
float:left;
}

.pull-right {
display:block;
float:right;
}

/* Start Custom Comments' CSS */
.custom-comments {
margin:3em 0 0;
font:normal normal 13px/1.4 Tahoma,Arial,Sans-Serif;
letter-spacing:0;
}

/* links */
.custom-comments a,
.custom-comments a:visited {
color:#2143B4;
text-decoration:none;
}

.custom-comments a:hover {text-decoration:underline}

/* comment item */
.custom-comments .comment-item {
margin:0 0 1em;
padding:0 0 .7em 0;
border-bottom:1px solid #eee;
position:relative;
}

/* comment header */
.custom-comments .comment-header {
overflow:hidden;
margin:0 0 1em 0;
}

/* avatar area */
.custom-comments .avatar-box {
width:65px;
margin:0 0 20px 0;
}

/* avatar */
.custom-comments .avatar-image-container,
.custom-comments .avatar-image-container a,
.custom-comments .avatar-image-container img {
border:none;
padding:0;
margin:0;
float:none;
display:block;
width:50px;
height:50px;
max-width:none;
max-height:none;
}

.custom-comments .avatar-image-container img {
border:1px solid #ddd;
padding:4px;
background-color:#fafafa;
}

/* comment body */
.custom-comments .comment-body {margin:0 0 2em 75px}

/* comment reply */
.custom-comments .comment-reply {
margin:1em 0 0 75px;
padding:1em 1.2em;
background-color:#FFF7D1;
position:relative;
font-size:11px;
}

.custom-comments .comment-reply:after {
content:"";
display:block;
width:0;
height:0;
position:absolute;
top:0;
left:0;
border:10px solid transparent;
border-color:white #F5F2D8 #F5F2D8 white;
}

.custom-comments .comment-reply .user {margin-left:15px}
.custom-comments .comment-reply a {color:#767643}

.custom-comments .comment-reply .avatar-image-container img {
border-color:#EAE5C4;
background-color:#F5F0D3;
}

/* comment item footer */
.custom-comments .comment-bottom-line {
display:block;
clear:both;
margin:1em 0 .5em 75px;
text-align:right;
}

/* comment buttons */
.custom-comments .comment-bottom-line a,
.custom-comments .cancel-reply-btn {
border:1px solid #ddd;
outline:none;
padding:2px .7em 3px .5em;
margin:0 0 0 4px;
-webkit-border-radius:10px;
-moz-border-radius:10px;
border-radius:10px;
text-decoration:none;
}

.custom-comments .comment-reply .comment-bottom-line a {border-color:#EAE5C4}
.custom-comments .comment-bottom-line a:before {content:attr(data-icon) " "}
.custom-comments .comment-bottom-line .reply-btn:before {color:#3DB537}
.custom-comments .comment-bottom-line .delete-btn:before {color:#B42A21}

.custom-comments .comment-bottom-line a:hover,
.custom-comments .cancel-reply-btn:hover {
border-color:#bbb;
text-decoration:none;
}

.custom-comments .comment-bottom-line a:focus,
.custom-comments .comment-bottom-line a:active,
.custom-comments .cancel-reply-btn:focus,
.custom-comments .cancel-reply-btn:active {border-color:#999}
.custom-comments .cancel-reply-btn {padding:3px 1em 4px}

/* comment form */
.custom-comments .custom-comment-form {
margin:1em 0 2em;
clear:both;
}

.custom-comments .comment-item .custom-comment-form {
border:1px solid #eee;
padding:1em .2em 2em 1.5em;
margin-left:75px;
}

.custom-comments #comment-editor {
max-width:none;
width:100%;
height:250px;
border:none;
background:none;
}

.custom-comments .custom-comment-form .cancel-reply-btn {display:none}
.custom-comments .comment-item .custom-comment-form .cancel-reply-btn {display:inline}
.custom-comments .comment-item .custom-comment-form h4 {display:none}

/* loading animation */
.custom-comments .custom-comment-editor-wrapper {background:transparent url('data:image/gif;base64,R0lGODlhEgAEAKEAAH9/fwAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJDwACACwAAAAAEgAEAAACB5SPqcvtrwoAIfkECQ8AAgAsAAAAAAQABAAAAgSEjwkFACH5BAkPAAIALAAAAAALAAQAAAIMjCMJC4fKXBKsnVkLACH5BAkPAAIALAAAAAASAAQAAAIRjCN5mOCwkojt0Xnkg1l1sRUAIfkECQ8AAgAsAAAAABIABAAAAhGEIRkbKRwOUsxBaStdeDdfAAAh+QQJDwACACwHAAAACwAEAAACDIQhGRuHylwSrJ1ZCwAh+QQFDwACACwOAAAABAAEAAACBISPCQUAOw==') no-repeat 50% 50%}

/* deleted comment */
.custom-comments .deleted-comment {
font-style:italic;
color:#aaa;
}

/* comments paging control */
.custom-comments .paging-control-container {
font-size:80%;
text-align:center;
width:auto;
height:auto;
line-height:normal;
margin:1em 0;
float:none;
display:block;
clear:both;
border:1px solid #eee;
padding:.5em 1em;
overflow:hidden;
}

.custom-comments .paging-control-container .unneeded-paging-control {display:none}
.custom-comments .paging-control-container .paging-control {display:inline}

/* Author Comments Style: Do whatever you want with this! */
.author-comment > .comment-item {}
.author-comment > .comment-reply {}

Kemudian cari kode ini:

<b:includable id='comments' var='post'>

Salin kode ini, dan letakkan di atasnya:

<b:includable id='custom-comments' var='post'>
<section class='custom-comments' id='custom-comments'>
<b:if cond='data:post.allowComments'>

<h4>
<b:if cond='data:post.numComments == 1'>
<span>1</span>&amp;nbsp;<data:commentLabel/>
<b:else/>
<span><data:post.numComments/></span>&amp;nbsp;<data:commentLabelPlural/>
</b:if>
</h4>

<b:if cond='data:post.commentPagingRequired'>
<nav class='paging-control-container'>
<a expr:class='data:post.oldLinkClass' expr:href='data:post.oldestLinkUrl'><data:post.oldestLinkText/></a>
<a expr:class='data:post.oldLinkClass' expr:href='data:post.olderLinkUrl'><data:post.olderLinkText/></a>&#160;
<data:post.commentRangeText/>&#160;
<a expr:class='data:post.newLinkClass' expr:href='data:post.newerLinkUrl'><data:post.newerLinkText/></a>
<a expr:class='data:post.newLinkClass' expr:href='data:post.newestLinkUrl'><data:post.newestLinkText/></a>
</nav>
</b:if>

<div id='comments-area'>
<b:loop values='data:post.comments' var='comment'>
<b:if cond='data:comment.inReplyTo'><b:else/>
<b:if cond='data:comment.author == data:post.author'>&lt;div class=&#39;author-comment&#39;&gt;</b:if>
<div class='comment-item clearfix' expr:id='data:comment.anchorName'>
<div class='comment-header clearfix'>
<strong class='user pull-left'>
<b:if cond='data:comment.authorUrl'>
<a expr:href='data:comment.authorUrl' rel='nofollow'><data:comment.author/></a>
<b:else/>
<data:comment.author/>
</b:if> <data:commentPostedByMsg/>
</strong>
<a class='comment-permalink pull-right' rel='nofollow' expr:href='data:comment.url' title='Comment Permalink'><data:comment.timestamp/></a>
</div> <!-- comment-header -->
<div class='avatar-box pull-left'>
<b:if cond='data:comment.favicon'>
<img expr:src='data:comment.favicon' height='16px' style='margin-bottom:-2px;' width='16px'/>
</b:if>
<b:if cond='data:blog.enabledCommentProfileImages'>
<data:comment.authorAvatarImage/>
</b:if>
</div> <!-- avatar-box -->
<div class='comment-body'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'><data:comment.body/></span>
<b:else/>
<data:comment.body/>
</b:if>
</div> <!-- comment-body -->
<b:loop values='data:post.comments' var='replies'>
<b:if cond='data:replies.inReplyTo == data:comment.id'>
<b:if cond='data:replies.author == data:post.author'>&lt;div class=&#39;author-comment&#39;&gt;</b:if>
<div class='comment-reply clearfix' expr:id='data:replies.anchorName'>
<div class='comment-header clearfix'>
<strong class='user pull-left'>
<b:if cond='data:replies.authorUrl'>
<a expr:href='data:replies.authorUrl' rel='nofollow'><data:replies.author/></a>
<b:else/>
<data:replies.author/>
</b:if> <data:commentPostedByMsg/>
</strong>
<a class='comment-permalink pull-right' rel='nofollow' expr:href='data:replies.url' title='Comment Permalink'><data:replies.timestamp/></a>
</div> <!-- reply comment-header -->
<div class='avatar-box pull-left'>
<b:if cond='data:replies.favicon'>
<img expr:src='data:replies.favicon' height='16px' style='margin-bottom:-2px;' width='16px'/>
</b:if>
<b:if cond='data:blog.enabledCommentProfileImages'>
<data:replies.authorAvatarImage/>
</b:if>
</div> <!-- reply avatar-box -->
<div class='comment-body'>
<b:if cond='data:replies.isDeleted'>
<span class='deleted-comment'><data:replies.body/></span>
<b:else/>
<data:replies.body/>
</b:if>
</div> <!-- reply comment-body -->
<span class='comment-bottom-line'>
<a class='delete-btn' rel='nofollow' data-icon='&amp;times;' expr:href='data:replies.deleteUrl' expr:title='data:top.deleteCommentMsg'>Delete</a>
</span>
</div> <!-- reply comment-reply -->
<b:if cond='data:replies.author == data:post.author'>&lt;/div&gt;</b:if>
</b:if> <!-- replies.inReplyTo -->
</b:loop>
<span class='comment-bottom-line'>
<b:if cond='data:comment.isDeleted != &quot;true&quot;'>
<a class='reply-btn' data-icon='&amp;dArr;' expr:href='&quot;javascript:replyTo(&amp;quot;&quot; + data:comment.id + &quot;&amp;quot;);&quot;'>Reply</a>
</b:if>
<a class='delete-btn' rel='nofollow' data-icon='&amp;times;' expr:href='data:comment.deleteUrl' expr:title='data:top.deleteCommentMsg'>Delete</a>
</span>
<div expr:id='&quot;form-container-&quot; + data:comment.id'/>
</div> <!-- comment-item -->
<b:if cond='data:comment.author == data:post.author'>&lt;/div&gt;</b:if>
</b:if> <!-- comment.inReplyTo -->
</b:loop>
</div>

<b:if cond='data:post.commentPagingRequired'>
<nav class='paging-control-container'>
<a expr:class='data:post.oldLinkClass' expr:href='data:post.oldestLinkUrl'><data:post.oldestLinkText/></a>
<a expr:class='data:post.oldLinkClass' expr:href='data:post.olderLinkUrl'><data:post.olderLinkText/></a>&#160;
<data:post.commentRangeText/>&#160;
<a expr:class='data:post.newLinkClass' expr:href='data:post.newerLinkUrl'><data:post.newerLinkText/></a>
<a expr:class='data:post.newLinkClass' expr:href='data:post.newestLinkUrl'><data:post.newestLinkText/></a>
</nav>
</b:if>

<div class='custom-comment-form' id='custom-comment-form'>
<h4><data:postCommentMsg/></h4>
<p><data:blogCommentMessage/></p>
<data:blogTeamBlogMessage/>
<a expr:href='data:post.commentFormIframeSrc' id='comment-editor-src'/>
<div class='custom-comment-editor-wrapper'>
<iframe class='blogger-iframe-colorize blogger-comment-from-post' id='comment-editor' name='comment-editor' src=''/>
</div>
<data:post.friendConnectJs/>
<data:post.cmtfpIframe/>
<script>BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;, &#39;<data:post.communityId/>&#39;);</script>
<a class='cancel-reply-btn' href='javascript:replyTo(&quot;cancel&quot;);'>Cancel Reply</a>
</div>

<script>
//<![CDATA[
var originalSource = document.getElementById('comment-editor').src.split('#');
function replyTo(id) {
var frame = document.getElementById('comment-editor'),
form = document.getElementById('custom-comment-form'),
container = (id != "cancel") ? document.getElementById('form-container-' + id) : document.getElementById('custom-comments'),
part = originalSource;
frame.style.height = "50px";
frame.style.visibility = "hidden";
frame.src = (id != "cancel") ? part[0] + '&parentID=' + id + '#' + part[1] : part[0] + '#' + part[1];
container.insertBefore(form, null);
frame.onload = function() {
this.style.height = "250px";
this.style.visibility = "visible";
};
}
//]]>
</script>

</b:if>
</section>
</b:includable>

Terakhir tinggal mengaktifkan fitur komentar kita. Cari semua kode yang tampak seperti ini:

<b:include data='post' name='threaded_comments'/>

atau seperti ini:

<b:include data='post' name='comments'/>

Di manapun Anda menemukan kode itu, segera ganti dengan kode ini:

<b:include data='post' name='custom-comments'/>

Klik Simpan Template.

Konfigurasi

Kode-kode yang Saya beri tanda adalah label-label tombol dan bisa Anda ganti teksnya sesuka hati sesuai dengan bahasa pada negara dimana Anda tinggal (beberapa teksnya ada yang terletak jauh di sebelah kanan, mohon gulung kontainer kodenya ke kanan sekali-kali).

Fitur penanda komentar administrator juga ada. Untuk mengaktifkannya, Anda bisa menggunakan selektor-selektor CSS yang tercantum di atas, kemudian awali dengan kelas .author-comment untuk menandai komentar penulis. Sebagai contoh, Saya akan memberikan border warna merah dan latar warna kuning pada komentar administrator, maka yang harus Anda lakukan adalah seperti ini:

.author-comment > .comment-item {
border:5px solid #900;
background-color:#ff0;
}

Catatan: Bagi Anda yang selama ini telah lama menggunakan fitur komentar bersarang lebih dari dua level (seperti blog Saya), sangat disarankan untuk tidak menerapkan modifikasi di atas, karena Saya hanya menggunakan loop komentar balasan sebanyak satu kali:

<b:loop values='data:post.comments' var='replies'>
<b:if cond='data:replies.inReplyTo == data:comment.id'>
Komentar balasan muncul di sini...
</b:if>
</b:loop>

Seperti yang Anda lihat bahwa Saya hanya membandingkan nilai data:var.inReplyTo pada komentar balasan dengan ID komentar induk sekali saja (satu kali loop), sehingga jika komentar balasan lama Anda berada di level ke tiga dan seterusnya, komentar-komentar tersebut tidak akan tampil dalam posting Anda dikarenakan ID komentar induknya tidak sempat lolos penyaringan terhadap data:var.inReplyTo pada anak komentar di level tersebut.

Blog yang masih baru atau blog lama dengan sedikit komentar dan blog dengan fitur komentar yang masih lama bisa melakukan modifikasi ini dengan aman.

Minggu, 16 Desember 2012

Menonaktifkan Komentar Tanpa Menyembunyikan Komentar yang Sudah Ada

<b:if cond='data:post.allowComments'> adalah kondisional template yang berfungsi untuk menyatakan bahwa pemilik blog mengizinkan pengunjung untuk menuliskan komentar. Anda biasanya akan melihat kode ini membungkus semua elemen di dalam seksi komentar sehingga jika administrator mengeset opsi pengaturan untuk tidak mengizinkan pengunjung lain menuliskan komentar baru melalui panel pengaturan utama (bukan opsi pada pengaturan posting), maka seluruh komentar yang telah masuk akan ikut menghilang (disembunyikan):

<div class='comments' id='comments'>
<b:if cond='data:post.allowComments'>

<!--
Seluruh konten di bagian ini akan menghilang jika
Administrator mengeset opsi pengaturan untuk tidak mengizinkan pengunjung
menuliskan komentar baru.
-->

</b:if>
</div>

Biasanya hal ini akan merugikan blog-blog bertipe diskusi yang ramai pengunjung, terutama jika komentar-komentar yang diterbitkan berguna untuk pembaca lain sebagai referensi tambahan.

Suatu saat mungkin Anda akan mengalami masa-masa sibuk atau katakanlah “sedang tidak mampu untuk membalas komentar-komentar yang masuk”. Saat Anda mengalami itu biasanya hal yang akan Anda lakukan adalah menutup komentar posting secara temporer dengan cara menyembunyikannya seperti ini:

Menonaktifkan Sekaligus Menyembunyikan Komentar
Menonaktifkan sekaligus menyembunyikan komentar pada semua posting.

Untuk menjaga agar komentar-komentar lama tidak hilang, Anda bisa memindahkan/memperbaharui wilayah kondisional <b:if cond='data:post.allowComments'> menjadi lebih sempit. Cukup hilangkan formulir komentarnya saja dan biarkan komentar-komentar yang sudah ada tetap pada tempatnya. Caranya adalah hapus kode <b:if cond='data:post.allowComments'> ... </b:if> yang mengelilingi elemen <div class='comments' id='comment'> sehingga akan tersisa seperti ini:

<div class='comments' id='comments'>
...
</div>

Kemudian cari elemen ini:

<b:include data='post' name='comment-form'/>

Ganti dengan ini:

<b:if cond='data:post.allowComments'>
<b:include data='post' name='comment-form'/>
</b:if>

Temukan juga kode ini:

<b:include data='post' name='threaded-comment-form'/>

Ganti dengan kode ini:

<b:if cond='data:post.allowComments'>
<b:include data='post' name='threaded-comment-form'/>
</b:if>

Masing-masing kode biasanya akan ditemukan dua buah, termasuk juga untuk seksi komentarnya. Dimana salah satu adalah elemen komentar yang akan aktif pada blog versi biasa dan satunya lagi aktif pada blog tampilan seluler.

Minggu, 11 November 2012

Widget Recent Comment dengan Sistem Notifikasi

Pembaharuan 22 April 2013: Mengintegrasikan widget dengan cookies, menambahkan opsi summary dan menyingkirkan opsi tt_id.

Recent Comments Widget for Blogger with Notification System

Widget ini bukan widget recent comment biasa yang biasanya Anda temukan di blog-blog lain, karena widget ini memiliki kemampuan untuk memberitahu kepada administrator bahwa terdapat komentar baru yang telah masuk.

Demonya bisa Anda lihat di sini, namun efeknya hanya akan terlihat apabila terdapat (paling tidak) satu komentar baru yang masuk di blog ini:

Untuk memasang widget ini, pertama-tama tambahkan sebuah elemen halaman HTML/JavaScript. Salin kode ini kemudian letakkan di dalam formulirnya:

<style scoped="scoped">
.cm-outer {
margin:0 auto;
padding:0;
font:normal normal 11px/normal Arial,Sans-Serif;
border:1px solid;
border-top:none;
}
.cm-outer li {
margin:0;
padding:7px 10px 12px;
list-style:none;
clear:both;
border-top:1px solid;
}
.cm-outer .cm-header {margin:0 0 5px}
.cm-outer .cm-content {overflow:hidden}
.cm-outer img {
display:block;
float:left;
margin:2px 10px 2px 0;
border:4px solid black;
background:#8fa2cb url('http://img1.blogblog.com/img/anon36.png') no-repeat 50% 50%;
overflow:hidden;
}
</style>
<div id="comments-container">Loading&hellip;</div>
<script>
var cm_config = {
home_page: "http://nama_blog.blogspot.com",
max_result: 7,
t_w: 32,
t_h: 32,
summary: 9999,
new_tab_link: true,
ct_id: "comments-container",
new_cm: " Komentar Baru!",
interval: 30000,
alert: true
};
</script>
<script src="http://dte-project.googlecode.com/svn/trunk/recent-comments-script-with-notification.js"></script>

Ganti kode yang Saya beri tanda dengan URL blog Anda kemudian klik Simpan. Hasil maksimal akan terlihat saat terdapat komentar baru yang masuk.

Konfigurasi Widget Lanjutan

Ada beberapa hal yang harus Anda ketahui mengenai konfigurasi lanjutan widget ini:

OpsiKeterangan
home_pageGanti nilainya dengan URL halaman muka blog Anda
max_resultDigunakan untuk menentukan jumlah komentar yang akan ditampilkan pada widget ini
t_wDigunakan untuk menentukan lebar avatar
t_hDigunakan untuk menentukan tinggi avatar
summaryDigunakan untuk menentukan jumlah karakter komentar yang ditampilkan
new_tab_linkJika bernilai true, seluruh tautan yang ada di dalam widget ini akan terbuka di tab/jendela baru saat diklik
tt_idID kontainer total komentar (abaikan jika tidak perlu)
ct_idID kontainer daftar komentar (abaikan jika tidak perlu)
new_cmLabel teks yang akan muncul setelah jumlah komentar (Misalnya: 2 Komentar Baru!)
intervalLihat deskripsi di bawah
alertLihat deskripsi di bawah

Opsi: interval

Digunakan untuk menentukan interval penyegaran feed komentar. Menggunakan satuan milidetik. Nilai 30000 artinya bahwa feed komentar akan disegarkan selama setengah menit sekali untuk memeriksa apakah terdapat komentar baru yang masuk atau tudak. Jika terdapat komentar baru yang masuk, maka widget ini akan menampilkan pesan bahwa komentar baru telah masuk.

Opsi: alert

Ini cuma opsi untuk menentukan gaya pemberitahuan pesan. Jika bernilai false, widget ini akan menampilkan pesan masuknya komentar baru pada title bar peramban seperti gambar 1. Sebaliknya, jika bernilai true, notifikasi akan muncul pada kotak peringatan seperti terlihat pada gambar 2:

Model Notifikasi 1
Model Notifikasi 1: alert: false
Model Notifikasi 2
Model Notifikasi 2: alert: true

Pembaharuan

Sekarang Anda bisa menampilkan teks notifikasi pada elemen HTML tertentu dengan cara mengubah nilai opsi alert menjadi sebuah fungsi seperti ini:

var cm_config = {
...
alert: function(total, label) {
// Lakukan sesuatu dengan `total` dan `label`
}
};

total berfungsi untuk menampilkan total komentar baru, sedangkan label berfungsi untuk menampilkan nilai pada opsi new_cm. Sebagai contoh, buat sebuah elemen HTML seperti ini. Elemen ini akan digunakan sebagai penampil/kontainer teks total komentar:

<div id="show-total"></div>

Setelah itu, sisipkan teks total komentar ke dalam elemen tersebut dengan JavaScript innerHTML melalui fungsi di atas:

var cm_config = {
...
alert: function(total, label) {
document.getElementById('show-total').innerHTML = '<strong>'+total+' '+label+'</strong>';
}
};

Jika terdapat notifikasi baru, maka teks notifikasi tersebut akan muncul di dalam elemen #show-total dan akan menghasilkan markup HTML seperti ini:

<div id="show-total">
<strong>1 Komentar Baru!</strong>
</div>

Sebaiknya tambahkan juga atribut title dengan pesan tertentu dan satu buah fungsi kecil pada elemen di atas seperti ini:

<div id="show-total" title="Abaikan!" onclick="this.innerHTML='';"></div>

Fungsinya untuk menghilangkan teks total komentar apabila pengguna mengeklik elemen tersebut.

Rabu, 07 November 2012

XHTML Blogger, Item Kontrol

Tombol Edit Cepat Posting

Biasanya berbentuk gambar/ikon pensil dan terletak di dalam footer posting:

<b:includable id='postQuickEdit' var='post'>
<b:if cond='data:post.editUrl'>
<span expr:class='&quot;item-control &quot; + data:post.adminClass'>
<a expr:href='data:post.editUrl' expr:title='data:top.editPostMsg'>
<img alt='' class='icon-action' height='18' src='http://img2.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</b:if>
</b:includable>
DataKeteranganTampilan/Contoh Tampilan
data:post.editUrlElemen ini akan menghasilkan URL pengeditan postinghttp://www.blogger.com/post-edit.g?blogID=489094982896596XXXX&postID=622513084927827XXXX&from=pencil
data:top.editPostMsgElemen ini akan menghasilkan deskripsi/pesan tautan pengeditan postingEdit Entri
data:post.adminClassElemen ini akan menghasilkan kelas khusus administratorblog-admin pid-251761511

Tombol Edit Cepat Widget

Berbentuk gambar/ikon kunci inggris dan terletak pada bagian bawah widget:

<b:include name='quickedit'/>

http://img1.blogblog.com/img/icon18_wrench_allbkg.png

Tombol Penghapusan Komentar

Lihat pada XHTML Blogger, Ikon Penghapusan Komentar

Sabtu, 03 November 2012

XHTML Blogger, Formulir Komentar

Dalam Konsep

TemplatesV1

<b:includable id='comment-form' var='post'>
<div class='comment-form' id='comment-form'>
<h4 id='comment-post-message'><data:postCommentMsg/></h4>
<p><data:blogCommentMessage/></p>
<data:blogTeamBlogMessage/>
<a expr:href='data:post.commentFormIframeSrc' id='comment-editor-src'/>
<iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' frameborder='0' height='410' id='comment-editor' name='comment-editor' src='' width='100%'/>
<data:post.friendConnectJs/>
<data:post.cmtfpIframe/>
<b:if cond='data:showCmtPopup'>
<div id='comment-popup' style='width:100px;height:20px;'/>
</b:if>
<script type='text/javascript'>
BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;, &#39;<data:post.communityId/>&#39;);
</script>
</div>
</b:includable>
DataKeteranganTampilan/Contoh Tampilan
data:postCommentMsgElemen ini akan menghasilkan label judul komentarPoskan Komentar:
data:blogCommentMessageElemen ini akan menghasilkan pesan di atas formulir komentarBe nice, No spam!
data:blogTeamBlogMessage???...
data:post.commentFormIframeSrcElemen ini akan menghasilkan URL formulir komentar mentahhttp://www.blogger.com/comment-iframe.g?blogID=29890010286969XXXX&postID=556779452392602XXXX
data:post.friendConnectJs???...
data:post.cmtfpIframeElemen ini akan menghasilkan script XXX-comment_from_post_iframe.js<script type="text/javascript" src="//www.blogger.com/static/v1/jsbin/2468562941-comment_from_post_iframe.js"></script>
data:showCmtPopup[?]-
data:post.appRpcRelayPath???http://www.blogger.com/rpc_relay.html
data:post.communityId???0665491695519118XXXX

TemplatesV2

<b:includable id='threaded-comment-form' var='post'>
<div class='comment-form' id='threaded-comment-form'>
<b:if cond='data:mobile'>
<p><data:blogCommentMessage/></p>
<data:blogTeamBlogMessage/>
<a expr:href='data:post.commentFormIframeSrc' id='comment-editor-src'/>
<iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' frameborder='0' height='410' id='comment-editor' name='comment-editor' src='' style='display: none' width='100%'/>
<b:else/>
<p><data:blogCommentMessage/></p>
<data:blogTeamBlogMessage/>
<a expr:href='data:post.commentFormIframeSrc' id='comment-editor-src'/>
<iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' frameborder='0' height='410' id='comment-editor' name='comment-editor' src='' width='100%'/>
</b:if>
<data:post.friendConnectJs/>
<data:post.cmtfpIframe/>
<script type='text/javascript'>
BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;, &#39;<data:post.communityId/>&#39;);
</script>
</div>
</b:includable>
DataKeteranganTampilan/Contoh Tampilan
data:mobileBoolean untuk menyatakan apakah blog sedang berada dalam tampilan seluler atau tidaktrue, false

XHTML Blogger, Ikon Penghapusan Komentar

<b:includable id='commentDeleteIcon' var='comment'>
<span expr:class='&quot;item-control &quot; + data:comment.adminClass'>
<a expr:href='data:comment.deleteUrl' expr:title='data:top.deleteCommentMsg'>
<img src='//www.blogger.com/img/icon_delete13.gif'/>
</a>
</span>
</b:includable>
DataKeteranganTampilan/Contoh Tampilan
data:comment.adminClassElemen ini akan menghasilkan kelas khusus administratorblog-admin pid-615478996
data:comment.deleteUrlElemen ini akan menghasilkan URL penghapusan komentarhttp://www.blogger.com/delete-comment.g?blogID=672954121565214XXXX&postID=294509636837564XXXX
data:top.deleteCommentMsgElemen ini akan menghasilkan deskripsi tautan penghapusan komentarDelete Comment, Hapus Komentar

XHTML Blogger, Seksi Komentar

Dalam Konsep

Prolog

Seksi komentar adalah elemen <b:includable>. Pada template versi pertama hanya terdiri dari <b:includable id="comments"> namun bertambah satu lagi yaitu <b:includable id="threaded_comments"> pada versi ke dua:

TemplatesV1:

<b:includable id='comments' var='post'>
...
</b:includable>

TemplatesV2:

<b:includable id='comments' var='post'>
...
</b:includable>
<b:includable id='threaded_comments' var='post'>
...
</b:includable>

Detail

TemplatesV1

Terdapat lima bagian utama dalam kerangka komentar pada template versi pertama yaitu header, navigasi, daftar komentar, footer komentar dan backlink:

<div class='comments' id='comments'>

<!-- header -->
<h4>0 Komentar:</h4>

<!-- navigasi -->
<span class='paging-control-container'> ... </span>

<!-- daftar komentar -->
<div id='Blog1_comments-block-wrapper'>
<dl class='avatar-comment-indent' id='comments-block'>
...
</dl>
</div>

<!-- navigasi -->
<span class='paging-control-container'> ... </span>

<!-- footer komentar -->
<div class='comment-footer'> ... </div>

<!-- kontainer backlink -->
<div id='backlinks-container'> ... </div>

</div>

Header Komentar

Adalah sebuah elemen heading. Biasanya berupa elemen H4 dengan tulisan yang menunjukkan jumlah komentar:

<h4>
<b:if cond='data:post.numComments == 1'>1
<data:commentLabel/>:
<b:else/>
<data:post.numComments/>
<data:commentLabelPlural/>:
</b:if>
</h4>

<!--

Catatan: Seluruh elemen di atas juga bisa diwakili oleh satu elemen ini:
<h4><data:post.commentLabelFull/>:</h4>

-->
DataKeteranganTampilan/Contoh Tampilan
data:post.numCommentsElemen ini akan menghasilkan angka berupa jumlah komentar yang telah masuk3
data:commentLabelElemen ini akan menghasilkan label komentar singularComment, Komentar
data:commentLabelPluralElemen ini akan menghasilkan label komentar pluralComments, Komentar
data:top.commentLabelSama dengan data:commentLabelComment, Komentar
data:top.commentLabelPluralSama dengan data:commentLabelPluralComments, Komentar
data:post.commentLabelFullSebuah paket elemen untuk mewakili semua markup di atas0 Comment, 4 Comments, 4 Komentar

Navigasi Komentar

Berupa elemen <span> dengan kelas paging-control-container. Hanya akan muncul jika jumlah komentar sudah melebihi 200 buah (?)

<b:if cond='data:post.commentPagingRequired'>
<span class='paging-control-container'>
<a expr:class='data:post.oldLinkClass' expr:href='data:post.oldestLinkUrl'>
<data:post.oldestLinkText/>
</a>&#160;
<a expr:class='data:post.oldLinkClass' expr:href='data:post.olderLinkUrl'>
<data:post.olderLinkText/>
</a>&#160;
<data:post.commentRangeText/>&#160;
<a expr:class='data:post.newLinkClass' expr:href='data:post.newerLinkUrl'>
<data:post.newerLinkText/>
</a>&#160;
<a expr:class='data:post.newLinkClass' expr:href='data:post.newestLinkUrl'>
<data:post.newestLinkText/>
</a>
</span>
</b:if>
DataKeteranganTampilan/Contoh Tampilan
data:post.commentPagingRequiredBoolean untuk menyatakan apakah navigasi komentar sudah layak ditampilkan atau tidaktrue, false
data:post.oldLinkClassElemen ini akan menghasilkan kelas navigasi komentar “lebih lama”...
data:post.newLinkClassElemen ini akan menghasilkan kelas navigasi komentar “lebih baru”...
data:post.olderLinkUrlElemen ini akan menghasilkan URL komentar “lebih lama”...
data:post.oldestLinkUrlElemen ini akan menghasilkan URL komentar “paling lama”...
data:post.newerLinkUrlElemen ini akan menghasilkan URL komentar “lebih baru”...
data:post.newestLinkUrlElemen ini akan menghasilkan URL komentar “paling baru”...
data:post.olderLinkTextLabel navigasi “komentar lama”Older
data:post.oldestLinkTextLabel navigasi “komentar paling lama”Oldest
data:post.newerLinkTextLabel navigasi “komentar lebih baru”Newer
data:post.newestLinkTextLabel navigasi “komentar paling baru”Newest
data:post.commentRangeTextElemen ini akan menghasilkan teks interval halaman komentar yang sedang aktif.1 - 200

Daftar Komentar

Berupa daftar komentar yang telah masuk, biasanya dibangun dengan elemen definition list atau ordered list:

<div expr:class='data:post.postAuthorClass' expr:id='data:widget.instanceId + &quot;_comments-block-wrapper&quot;'>
<dl expr:class='data:post.avatarIndentClass' id='comments-block'>
<b:loop values='data:post.comments' var='comment'>
<dt expr:class='&quot;comment-author &quot; + data:comment.authorClass'
expr:id='data:comment.anchorName'>
<b:if cond='data:comment.favicon'>
<img expr:src='data:comment.favicon' height='16px' style='margin-bottom:-2px;'
width='16px' />
</b:if>
<a expr:name='data:comment.anchorName'/>
<b:if cond='data:blog.enabledCommentProfileImages'>
<data:comment.authorAvatarImage/>
</b:if>
<b:if cond='data:comment.authorUrl'>
<a expr:href='data:comment.authorUrl' rel='nofollow'><data:comment.author/></a> <data:commentPostedByMsg/>
<b:else/>
<data:comment.author/> <data:commentPostedByMsg/>
</b:if>
<span class='comment-timestamp'>
<a expr:href='data:comment.url' title='comment permalink'>
<data:comment.timestamp/>
</a>
<b:include data='comment' name='commentDeleteIcon'/>
</span>
</dt>
<dd class='comment-body'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'>
<data:comment.body/>
</span>
<b:else/>
<p><data:comment.body/></p>
</b:if>
</dd>
<dd class='comment-footer'></dd>
</b:loop>
</dl>
</div>
DataKeteranganTampilan/Contoh Tampilan
data:post.postAuthorClass???...
data:widget.instanceId[?]-
data:post.avatarIndentClassElemen ini akan menghasilkan nama kelas indentasi avataravatar-comment-indent
data:comment.authorClassElemen ini akan menghasilkan nama kelas administratorblog-author
data:comment.anchorNameElemen ini akan menghasilkan deret karakter yang nantinya akan berguna sebagai pendukung permalink komentar (diawali dengan hruf c, dan diikuti oleh ID komentar)c3630901959249728956
data:comment.faviconElemen ini akan menghasilkan favicon komentator yang tidak memiliki foto profil??? [biasanya berupa logo Blogger]
data:blog.enabledCommentProfileImages[?]-
data:comment.authorAvatarImageElemen ini akan menghasilkan foto profilSampel
data:comment.authorUrlElemen ini akan menghasilkan tautan profil penulis komentarhttp://www.blogger.com/profile/0513752219663605XXXX
data:comment.authorElemen ini akan menghasilkan nama penulis komentarTaufik Nurrohman
data:commentPostedByMsgElemen ini akan menghasilkan label kata kerja setelah nama komentarmengatakan..., said...
data:comment.urlElemen ini akan menghasilkan URL permalink komentar (URL halaman dengan akhiran berupa hash data:comment.anchorNameSampel
data:comment.timestampElemen ini akan menghasilkan timestamp penerbitan komentarJumat, 02 November 2012 10:20:00 WIB
data:comment.isDeletedBoolean untuk menyatakan bahwa komentar sudah dihapustrue, false
data:comment.bodyElemen ini akan menghasilkan badan komentarLorem ipsum dolor sit amet!
data:comment.idElemen ini akan menghasilkan ID komentar (seperti data:comment.anchorName tapi tanpa awalan c. Hanya angka)3630901959249728956
data:comment.inReplyToElemen ini akan menghasilkan ID komentar induk. Elemen ini hanya akan menampilkan ID komentar induk jika komentar tersebut merupakan komentar balasan dari salah satu komentar yang ada3630901959249728956
data:comment.authorAvatarSrcElemen ini akan menampilkan URL avatar komentarhttp://lh5.googleusercontent.com/-NDqfg6Z-elM/AAAAAAAAAAI/AAAAAAAADUQ/RODYRoOPPqM/s1600/profile-photo.jpg

Footer/Kaki Komentar

Elemen ini umumnya berisi pesan komentar dan formulir komentar:

<div class='comment-footer'>
<b:if cond='data:post.embedCommentForm'>
<b:if cond='data:post.allowNewComments'>
<b:include data='post' name='comment-form'/>
<b:else/>
<data:post.noNewCommentsText/>
</b:if>
<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>
</div>
DataKeteranganTampilan/Contoh Tampilan
data:post.embedCommentFormBoolean untuk menyatakan opsi peletakkan formulir komentar tersemat di bawah postingtrue, false
data:post.allowNewCommentsBoolean untuk menyatakan bahwa administrator memperbolehkan masuknya komentar barutrue, false
data:post.allowCommentsBoolean untuk menyatakan bahwa administrator memperbolehkan pengunjung untuk berkomentartrue, false
data:post.noNewCommentsTextElemen ini akan menghasilkan pesan bahwa komentar baru tidak diperbolehkanKomentar baru tidak diperbolehkan untuk posting ini.
data:post.addCommentUrlElemen ini akan menghasilkan URL komentar jendela munculan (???)...
data:post.addCommentOnclick???...
data:postCommentMsgElemen ini akan menghasilkan label tautan pengeposan komentarPoskan Komentar

Backlink Container

???

<div id='backlinks-container'>
<div expr:id='data:widget.instanceId + &quot;_backlinks-container&quot;'>
<b:if cond='data:post.showBacklinks'>
<b:include data='post' name='backlinks'/>
</b:if>
</div>
</div>
DataKeteranganTampilan/Contoh Tampilan
data:post.showBacklinks???...

TemplatesV2

Terdapat lima bagian utama dalam kerangka komentar pada template versi ke dua yaitu header, daftar komentar, footer komentar, popup komentar dan backlink:

<div class='comments' id='comments'>

<!-- header -->
<h4>0 Komentar:</h4>

<!-- daftar komentar -->
<div class='comments-content'>
<script> ... </script>
<div id='comment-holder'> ... </div>
</div>

<!-- footer komentar -->
<p class='comment-footer'> ... </p>

<!-- popup komentar -->
<div class='comment-popup'> ... </div>

<!-- kontainer backlink -->
<div id='backlinks-container'> ... </div>

</div>

Header Komentar

Adalah sebuah elemen heading. Biasanya berupa elemen <h4> dengan tulisan yang menunjukkan jumlah komentar:

<h4>
<b:if cond='data:post.numComments == 1'>1
<data:commentLabel/>:
<b:else/>
<data:post.numComments/>
<data:commentLabelPlural/>:
</b:if>
</h4>

Lihat pada bagian TemplatesV1 - Header Komentar

Daftar Komentar

Berupa daftar komentar yang telah masuk, dibangun oleh elemen-elemen ordered list di dalam elemen <div class='comments-content'>:

<div class='comments-content'>
<b:if cond='data:post.embedCommentForm'>
<b:include data='post' name='threaded_comment_js'/>
</b:if>
<div id='comment-holder'>
<data:post.commentHtml/>
</div>
</div>
DataKeteranganTampilan/Contoh Tampilan
data:post.commentHtmlElemen ini akan menghasikan seluruh markup daftar komentarSampel

Footer/Kaki Komentar

Elemen ini berisi pesan komentar dan formulir komentar:

<p class='comment-footer'>
<b:if cond='data:post.allowNewComments'>
<b:include data='post' name='threaded-comment-form'/>
<b:else/>
<data:post.noNewCommentsText/>
</b:if>
</p>

Lihat pada bagian TemplatesV1 - Footer/Kaki Komentar

Popup Komentar

???

<b:if cond='data:showCmtPopup'>
<div id='comment-popup'>
<iframe allowtransparency='true' frameborder='0' id='comment-actions' name='comment-actions' scrolling='no'>
</iframe>
</div>
</b:if>
DataKeteranganTampilan/Contoh Tampilan
data:showCmtPopup???...

Backlink Container

Lihat pada bagian TemplatesV1 - Backlink Container