Wednesday, September 30, 2015

Mengatasi tombol reply komentar yang tidak berfungsi

Kejadian seperti ini kerap dialami para blogger yang suka memodifikasi templatenya.
Memang menjadi suatu tantangan yang menyenangkan dan bukan sesuatu yang menakutkan bagi seorang blogger bila template yang dia modif menjadi sedikit error atau bahkan fatal error.
Salah satunya ya seperti tombol reply komentar yang tidak bekerja yang akan kita bahas kali ini.
Setiap kali membalas komentar atau juga bila ada pembaca yang ingin nambahi komentar yang ada diatasnya, tombol reply menjadi link biasa yang tidak berfungsi walaupun di klik berulang kali.
Balasan pun menjadi komentar baru dengan ditambahi @ di depannya lalu nama pembaca yang dituju.
Baca juga: Cara mudah membuat recent comments dengan avatar

Sebagai blogger yang baik hati :) saya akan mencoba berbagi cara yang sangat mudah untuk mengatasi error pada tombol reply komentar yang tidak berfungsi ini.
Memang banyak sekali dari para sobat blogger yang telah membagikan solusi ini tapi cara yang saya bagikan kali ini terbukti langsung jadi, lolos uji coba dan selalu berhasil.

Lansung saja mas bro..
Edit template sobat di menu dashboard blogger.
Agar lebih enak ketika mengeditnya, gunakan aplikasi notepad++, cari di google bila belum mempunyainya, aplikasi ini gratis kok.

Caranya mengedit template, copy semua skrip template sobat yang ada di dashboard blogger lalu pastekan di notepad++ yang ada di komputer sobat kemudian simpan dengan ekstensi .xml bukan lagi txt.
Dan lihat, kode yang kita pastekan tadi akan terkelompokkan sendiri dengan warna yang berbeda-beda, jadi akan lebih memudahkan kita.

Kemudian cari (tekan F3 atau Ctrl+F) kode ini,
<b:includable id='threaded_comment_js' var='post'>
Setelah ketemu, maka kode tersebut akan terlihat highlighted di notepad++.

Mengatasi tombol reply komentar yang tidak berfungsi

Kemudian klik collapse (-) pada sisi sebelah kiri disamping nomer urut.
Maka menjadi seperti ini.

Mengatasi tombol reply komentar yang tidak berfungsi

Lalu copy kode ini
<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>
Dan pastekan pada kode yang highlighted di notepad++ tadi.
Setelah itu copy all kode yang ada di notepad++ tadi dan pastekan lagi di teks area edit html yang ada di dasboard blogger selanjutnya klik simpan.

Dan.. Cobalah membalas komentar di blog, dan anda tidak perlu lagi menambahkan @ nama pembaca untuk membalas komentar.

Catatan,
Mengapa saya menggunakan notepad++?
Karena aplikasi notepad++ ini mampu melakukan undo berulang-ulang hingga awal penulisan kode.
Akan terjadi perubahan warna font bila kita menuliskan kode yang salah, jadi memudahkan dalam error correction.

Sangat mudah bukan?
Semoga saja artikel tentang cara untuk mengatasi tombol reply komentar yang tidak berfungsi kali ini bisa bermanfaat bagi kawan-kawan blogger semua.

4comments

Defa Ramadhani Mengatasi tombol reply komentar yang tidak berfungsi delete October 6, 2015 at 7:31 PM

caranya cukup mudah ya, ijin save scrif nya ya

Anonymous Mengatasi tombol reply komentar yang tidak berfungsi delete October 2, 2017 at 1:25 AM

test

Anonymous Mengatasi tombol reply komentar yang tidak berfungsi delete October 2, 2017 at 1:25 AM

test reply

SimBalisme - Download Software Gratis Mengatasi tombol reply komentar yang tidak berfungsi delete August 20, 2018 at 10:42 AM

thanks gan saya cob dulu tipsnya :)

IBX59E89E6F98B8E