Penting!! Sobat Blogger yang ingin re-post atau menulis kembali artikel kami diblog/website Anda, harap lihat halaman DISCLAIMER ( beberapa blog telah diproses di Google Removal Content ) Setiap tindakan pelanggaran hak cipta (COPAS) akan dilaporkan, TANPA pemberitahuan.

Mengatasi Tombol Balas/Reply Komentar Yang Tidak Berfungsi

proBlogiz
Blogger CommentTutorial blog kali ini proBlogiz membagi info tips Mengatasi Masalah Tombol Balas/Reply Komentar Yang Tidak Berfungsi atau Solusi Tidak Bisa Balas Komentar. Pada dasarnya  Blogger sudah menghadirkan fitur Reply Comment atau Thread Comment atau bisa disebut juga "Balas Komentar". Dengan fitur ini kita bisa membalas komentar secara langsung dan membuat lebih interaktif dengan pengunjung. Namun sayangya fitur ini sedikit bermasalah bagi para blogger yang menggunakan template yang bukan bawaan atau produk dari Blogger sendiri. Kadang tombol reply tidak berfungsi dan tidak bisa balas komentar, adakah solusinya? tentu pada tip dan trik Solusi Tidak Bisa Balas Komentar Anda akan menemuka solusinya. 

Umumnya template-template yang Anda unduh dari berbagai site template gratis dan dipasang/dipakai di Blogger akan mengalami hal yang sama salah satunya adalah tidak bisa membalas setiap komentar dari pengunjung.


Ada beberapa masalah yang berbeda tentunya pada tiap template, misalnya tombol reply comment yang tidak bereaksi kalau diklik, atau bahkan ada yang tidak menemukan tombol reply sama sekali di kolom komentarnya, dan mungkin permasalahan lain yang dijumpai berkaitan dengan "balas komentar" tersebut.

Bagi saya sendiri yang juga menggunakan template gratis dari sebuah situs, mengalami hal serupa yaitu tidak bisa membalas / reply komentar dari pengunjung blog saya. Tombol reply memang tersedia di kolom komentar tapi kalau diklik tidak ada reaksi atau tidak berfungsi sebagai mana mestinya, so... ini memang pengalaman pribadi :)

Pada kasus tombol reply / balas tidak berfungsi atau form komentar tidak keluar, bisa disebabkan karena ada perubahan pada JavaScript threaded comment. Untuk memperbaiki ikuti langkah tip dan trik berikut :

  • Masuk ke Dasbor ---> Rancangan ---> Edit Template
  • Menjaga kegagalan, backup dulu template anda ---> Download Template Lengkap
  • Centang Expand Template Widget
  • Cari kode dibawah ini :
*klik 2x untuk select all
    <b:includable id='threaded_comment_js' var='post'>
      <script defer='defer' expr:src='data:post.commentSrc' type='text/javascript'/>
    
      <script type='text/javascript'>
        (function() {
          var items = <data:post.commentJso/>;
          var msgs = <data:post.commentMsgs/>;
          var postId = '<data:post.id/>';
          var feed = '<data:post.commentFeed/>';
          var authorName = '<data:post.author/>';
          var authorUrl = '<data:post.authorUrl/>';
          var blogId = '<data:top.id/>';
          var baseUri = '<data:post.commentBase/>';
    
    // <![CDATA[
          feed += '?alt=json&v=2&orderby=published&reverse=false&max-results=50';
          var cursor = null;
          if (items && items.length > 0) {
            cursor = parseInt(items[items.length - 1].timestamp) + 1;
          }
    
          var bodyFromEntry = function(entry) {
            if (entry.gd$extendedProperty) {
              for (var k in entry.gd$extendedProperty) {
                if (entry.gd$extendedProperty[k].name == 'blogger.contentRemoved') {
                  return '<span class="deleted-comment">' + entry.content.$t + '</span>';
                }
              }
            }
            return entry.content.$t;
          }
    
          var parse = function(data) {
            cursor = null;
            var comments = [];
            if (data && data.feed && data.feed.entry) {
              for (var i = 0, entry; entry = data.feed.entry[i]; i++) {
                var comment = {};
                // comment ID, parsed out of the original id format
                var id = /blog-(\d+).post-(\d+)/.exec(entry.id.$t);
                comment.id = id ? id[2] : null;
                comment.body = bodyFromEntry(entry);
                comment.timestamp = Date.parse(entry.published.$t) + '';
                if (entry.author && entry.author.constructor === Array) {
                  var auth = entry.author[0];
                  if (auth) {
                    comment.author = {
                      name: (auth.name ? auth.name.$t : undefined),
                      profileUrl: (auth.uri ? auth.uri.$t : undefined),
                      avatarUrl: (auth.gd$image ? auth.gd$image.src : undefined)
                    };
                  }
                }
                if (entry.link) {
                  if (entry.link[2]) {
                    comment.link = comment.permalink = entry.link[2].href;
                  }
                  if (entry.link[3]) {
                    var pid = /.*comments\/default\/(\d+)\?.*/.exec(entry.link[3].href);
                    if (pid && pid[1]) {
                      comment.parentId = pid[1];
                    }
                  }
                }
                comment.deleteclass = 'item-control blog-admin';
                if (entry.gd$extendedProperty) {
                  for (var k in entry.gd$extendedProperty) {
                    console.log(entry.gd$extendedProperty[k].name + ' - ' + entry.gd$extendedProperty[k].value);
                    if (entry.gd$extendedProperty[k].name == 'blogger.itemClass') {
                      comment.deleteclass += ' ' + entry.gd$extendedProperty[k].value;
                    }
                  }
                }
                comments.push(comment);
              }
            }
            return comments;
          };
    
          var paginator = function(callback) {
            if (hasMore()) {
              var url = feed;
              if (cursor) {
                url += '&published-min=' + new Date(cursor).toISOString();
              }
              window.bloggercomments = function(data) {
                var parsed = parse(data);
                cursor = parsed.length < 50 ? null
                    : parseInt(parsed[parsed.length - 1].timestamp) + 1
                callback(parsed);
                window.bloggercomments = null;
              }
              url += '&callback=bloggercomments';
              var script = document.createElement('script');
              script.type = 'text/javascript';
              script.src = url;
              document.getElementsByTagName('head')[0].appendChild(script);
            }
          };
          var hasMore = function() {
            return !!cursor;
          };
          var getMeta = function(key, comment) {
            if ('iswriter' == key) {
              var matches = !!comment.author
                  && comment.author.name == authorName
                  && comment.author.profileUrl == authorUrl;
              return matches ? 'true' : '';
            } else if ('deletelink' == key) {
              return baseUri + '/delete-comment.g?blogID=' + blogId + '&postID=' + comment.id;
            } else if ('deleteclass' == key) {
              return comment.deleteclass;
            }
            return '';
          };
    
          var replybox = null;
          var replyUrlParts = null;
          var replyParent = undefined;
    
          var onReply = function(commentId, domId) {
            if (replybox == null) {
              // lazily cache replybox, and adjust to suit this style:
              replybox = document.getElementById('comment-editor');
              if (replybox != null) {
                replybox.height = '250px';
                replybox.style.display = 'block';
                replyUrlParts = replybox.src.split('#');
              }
            }
            if (replybox && (commentId !== replyParent)) {
              document.getElementById(domId).insertBefore(replybox, null);
              replybox.src = replyUrlParts[0]
                  + (commentId ? '&parentID=' + commentId : '')
                  + '#' + replyUrlParts[1];
              replyParent = commentId;
            }
          };
    
          var tok = 'comment-form_';
          var hash = window.location.hash || '';
          var startThread = hash.indexOf(tok) == 1 ? hash.substring(tok.length + 1) : undefined;
    
          // Configure commenting API:
          var configJso = {
            'maxDepth': 2
          };
          var provider = {
            'id': postId,
            'data': items,
            'loadNext': paginator,
            'hasMore': hasMore,
            'getMeta': getMeta,
            'onReply': onReply,
            'rendered': true,
            'initReplyThread': startThread,
            'config': configJso,
            'messages': msgs
          };
    
          var render = function() {
            if (window.goog && window.goog.comments) {
              var holder = document.getElementById('comment-holder');
              window.goog.comments.render(holder, provider);
            }
          };
    
          // render now, or queue to render when library loads:
          if (window.goog && window.goog.comments) {
            render();
          } else {
            window.goog = window.goog || {};
            window.goog.comments = window.goog.comments || {};
            window.goog.comments.loadQueue = window.goog.comments.loadQueue || [];
            window.goog.comments.loadQueue.push(render);
          }
        })();
    // ]]>
      </script>
    </b:includable>

  • Gantilah semua kode diatas dengan yang baru ini :
*klik 2x untuk select all
    <b:includable id='threaded_comment_js' var='post'>
      <script async='async' expr:src='data:post.commentSrc' type='text/javascript'/>
    
      <script type='text/javascript'>
        (function() {
          var items = <data:post.commentJso/>;
          var msgs = <data:post.commentMsgs/>;
          var config = <data:post.commentConfig/>;
    
    // <![CDATA[
          var cursor = null;
          if (items && items.length > 0) {
            cursor = parseInt(items[items.length - 1].timestamp) + 1;
          }
    
          var bodyFromEntry = function(entry) {
            if (entry.gd$extendedProperty) {
              for (var k in entry.gd$extendedProperty) {
                if (entry.gd$extendedProperty[k].name == 'blogger.contentRemoved') {
                  return '<span class="deleted-comment">' + entry.content.$t + '</span>';
                }
              }
            }
            return entry.content.$t;
          }
    
          var parse = function(data) {
            cursor = null;
            var comments = [];
            if (data && data.feed && data.feed.entry) {
              for (var i = 0, entry; entry = data.feed.entry[i]; i++) {
                var comment = {};
                // comment ID, parsed out of the original id format
                var id = /blog-(\d+).post-(\d+)/.exec(entry.id.$t);
                comment.id = id ? id[2] : null;
                comment.body = bodyFromEntry(entry);
                comment.timestamp = Date.parse(entry.published.$t) + '';
                if (entry.author && entry.author.constructor === Array) {
                  var auth = entry.author[0];
                  if (auth) {
                    comment.author = {
                      name: (auth.name ? auth.name.$t : undefined),
                      profileUrl: (auth.uri ? auth.uri.$t : undefined),
                      avatarUrl: (auth.gd$image ? auth.gd$image.src : undefined)
                    };
                  }
                }
                if (entry.link) {
                  if (entry.link[2]) {
                    comment.link = comment.permalink = entry.link[2].href;
                  }
                  if (entry.link[3]) {
                    var pid = /.*comments\/default\/(\d+)\?.*/.exec(entry.link[3].href);
                    if (pid && pid[1]) {
                      comment.parentId = pid[1];
                    }
                  }
                }
                comment.deleteclass = 'item-control blog-admin';
                if (entry.gd$extendedProperty) {
                  for (var k in entry.gd$extendedProperty) {
                    if (entry.gd$extendedProperty[k].name == 'blogger.itemClass') {
                      comment.deleteclass += ' ' + entry.gd$extendedProperty[k].value;
                    }
                  }
                }
                comments.push(comment);
              }
            }
            return comments;
          };
    
          var paginator = function(callback) {
            if (hasMore()) {
              var url = config.feed + '?alt=json&v=2&orderby=published&reverse=false&max-results=50';
              if (cursor) {
                url += '&published-min=' + new Date(cursor).toISOString();
              }
              window.bloggercomments = function(data) {
                var parsed = parse(data);
                cursor = parsed.length < 50 ? null
                    : parseInt(parsed[parsed.length - 1].timestamp) + 1
                callback(parsed);
                window.bloggercomments = null;
              }
              url += '&callback=bloggercomments';
              var script = document.createElement('script');
              script.type = 'text/javascript';
              script.src = url;
              document.getElementsByTagName('head')[0].appendChild(script);
            }
          };
          var hasMore = function() {
            return !!cursor;
          };
          var getMeta = function(key, comment) {
            if ('iswriter' == key) {
              var matches = !!comment.author
                  && comment.author.name == config.authorName
                  && comment.author.profileUrl == config.authorUrl;
              return matches ? 'true' : '';
            } else if ('deletelink' == key) {
              return config.baseUri + '/delete-comment.g?blogID='
                   + config.blogId + '&postID=' + comment.id;
            } else if ('deleteclass' == key) {
              return comment.deleteclass;
            }
            return '';
          };
    
          var replybox = null;
          var replyUrlParts = null;
          var replyParent = undefined;
    
          var onReply = function(commentId, domId) {
            if (replybox == null) {
              // lazily cache replybox, and adjust to suit this style:
              replybox = document.getElementById('comment-editor');
              if (replybox != null) {
                replybox.height = '250px';
                replybox.style.display = 'block';
                replyUrlParts = replybox.src.split('#');
              }
            }
            if (replybox && (commentId !== replyParent)) {
              document.getElementById(domId).insertBefore(replybox, null);
              replybox.src = replyUrlParts[0]
                  + (commentId ? '&parentID=' + commentId : '')
                  + '#' + replyUrlParts[1];
              replyParent = commentId;
            }
          };
    
          var hash = (window.location.hash || '#').substring(1);
          var startThread, targetComment;
          if (/^comment-form_/.test(hash)) {
            startThread = hash.substring('comment-form_'.length);
          } else if (/^c[0-9]+$/.test(hash)) {
            targetComment = hash.substring(1);
          }
    
          // Configure commenting API:
          var configJso = {
            'maxDepth': config.maxThreadDepth
          };
          var provider = {
            'id': config.postId,
            'data': items,
            'loadNext': paginator,
            'hasMore': hasMore,
            'getMeta': getMeta,
            'onReply': onReply,
            'rendered': true,
            'initComment': targetComment,
            'initReplyThread': startThread,
            'config': configJso,
            'messages': msgs
          };
    
          var render = function() {
            if (window.goog && window.goog.comments) {
              var holder = document.getElementById('comment-holder');
              window.goog.comments.render(holder, provider);
            }
          };
    
          // render now, or queue to render when library loads:
          if (window.goog && window.goog.comments) {
            render();
          } else {
            window.goog = window.goog || {};
            window.goog.comments = window.goog.comments || {};
            window.goog.comments.loadQueue = window.goog.comments.loadQueue || [];
            window.goog.comments.loadQueue.push(render);
          }
        })();
    // ]]>
      </script>
    </b:includable>

  • Kemudian save template.

Sekarang  bisa lihat hasilnya, dengan mencoba membalas/reply komentar dari pengunjung situs Anda.
Mudah-mudah tip ini bisa berhasil mengatasi permasalahan Anda, seperti yang saya alami sebelumnya.

Nice to be share...


Artikel Terkait Lainnya:
Click here for comments

Silahkan Berkomentar
Komentar/pertanyaan Sesuai Topik, Please NO SPAM, NO Promotion Links
Convert Kode HTML sebelum disisipkan

Convert

Google+ Followers

Submit email Anda, dapatkan update artikel:


Like Me

Artikel Terbaru

|Copyright © 2013| Problogiz |All Rights Reserved|