Senin, 27 Februari 2012

Memunculkan Deskripsi Blog Ketika Share di Facebook

| |
0 komentar
Sebelumnya saya telah mengulas tentang Open Graph Facebook yang berguna untuk optimasi SEO blog di Facebook. Dan ternyata Open Graph telah mempengaruhi Facebook dalam membaca script meta description pada blog, sehingga ketika kita sharing di Facebook yang terlihat hanya gambar dan judul postingan dan tidak memuat deskripsi postingan kita. Nah sekarang saya akan memberikan solusi kepada sobat blogger agar deskripsi postingan dapat terlihat saat anda share di Facebook.

Cara yang harus dilakukan adalah sbb:
1. Login ke Blogger Dasbor > Rancangan > Edit HTML
2. Centang Expand Template Widget
3. Cari kode <data:post.body/>
4. Simpan kode berikut ini diatas kode <data:post.body/>
(di template saya ada 4 kode <data:post.body/>, pilih kode no. 2)
<b:if cond='data:blog.pageType == "item"'>
<b:if cond='data:post.snippet'>
<meta expr:content='data:post.snippet' name='description'/>
</b:if>
</b:if>
5. Kemudian setelah itu pasang tag <p> dan penutupnya di semua  kode <data:post.body/>, contoh seperti dibawah ini:
 <p><data:post.body/></p>
6. Save Template
7. Selesai...

Contoh sebelum dan sesudah di edit:

 

Note: Perubahan yang kita lakukan baru akan berpengaruh kurang lebih sekitar 24 jam. Untuk mengatasinya anda dapat memasukkan link posting secara manual agar lebih cepat ke Facebook Debugger.

Read More

Minggu, 26 Februari 2012

Meta Tag Open Graph Facebook

| |
0 komentar
Open Graph Protocol adalah skema FBML untuk media sosial sharing seperti facebook misalnya agar link bisa di masukkan ke facebook dengan gampang. Hal ini sangat berguna untuk optimasi SEO blog di Facebook.
Memasang meta tags untuk Open Graph Protocol di Blogger:
1. Login ke blogger Dasboar >Rancangan> Edit HTML,
2. Cari kode:
xmlns:expr='http://www.google.com/2005/gml/expr'>
3. Tambahkan kode Open Graph Protocol ini sebelum kode penutup >
xmlns:og='http://ogp.me/ns#'
4. Sehingga hasilnya akan terlihat seperti ini:
<html ...... xmlns:expr='http://www.google.com/2005/gml/expr' xmlns:og='http://ogp.me/ns#'>
5. Cari kode <head> dan simpan kode meta tag berikut ini dibawah kode <head> atau dibawah kode meta tag yang sudah ada sebelumnya.
<b:if cond='data:blog.pageType != &quot;item&quot;'>
<meta expr:content='data:blog.title' property='og:title'/>
<meta expr:content='data:blog.homepageUrl' property='og:url'/>
<meta content='blog' property='og:type'/>
<b:else/>
<meta expr:content='data:blog.pageName' property='og:title'/>
<meta expr:content='data:blog.url' property='og:url'/>
<meta content='article' property='og:type'/>
</b:if>
<b:if cond='data:blog.postImageThumbnailUrl'>
<meta expr:content='data:blog.postImageThumbnailUrl' property='og:image'/>
<b:else/>
<meta content='http://example.com/logo blog.jpg' property='og:image'/>
</b:if>
<meta content='Nama Blog' property='og:site_name'/>
<meta content='Your-App-ID' property='fb:app_id'/>

<meta content='Facebook-profile-ID' property='fb:admins'/>
(ganti tulisan warna merah sesuai dengan blog kamu)
6. Save Template, Selesai.

Untuk memeriksa apakah Anda telah menerapkan semua tag <META> dengan benar, kunjungi Facebook Debugger for Developers.

Note: Open graph ini juga berguna untuk menampilkan gambar atau logo blog kamu ketika di share, like atau send ke facebook jika artikel yang di posting tidak memiliki gambar.
Read More

Script Anti Copas - Copy Paste

| |
0 komentar
Cara memasukkan script anti copy paste di blog :

1.Login ke akun blogger kamu.
2.Klik Rancangan lalu klik Edit HTML.
3.Tandai Expand Template Widget pada bagian Edit Template.
4.Cari kode </head>
5.Jika sudah ketemu, masukkan script berikut ini diatas kode </head>
<SCRIPT type="text/javascript">
if (typeof document.onselectstart!="undefined") {
document.onselectstart=new Function ("return false");
}
else{
document.onmousedown=new Function ("return false");
document.onmouseup=new Function ("return true");
}
</SCRIPT>
6.Lalu klik Simpan Template dan lihat hasilnya.
7.Selesai.
Read More

Jumat, 24 Februari 2012

Mengatasi Tombol Reply Yang Tidak Bisa di Klik Alias Error

| |
0 komentar
Tadi saya ingin membalas sebuah komentar di blog ini dan saya menemukan masalah bahwa fitur tombol reply yang ada di blog ini tidak berfungsi dan tidak berpengaruh apa-apa saat di klik, walhasil saya tidak jadi membalas komentar tersebut, hehehe..
Setelah mencari info, ternyata ada perubahan pada JavaScript thread comment. Nah untuk mengatasi masalah tersebut, Lakukan langkah-langkah berikut ini:

1. Login ke Dasbor Anda >> Rancangan >> Edit HTML
2. Centang Expand Template Widget
3. Untuk menjaga hal-hal yang tidak diinginkan saya sarankan backup dulu template blog anda dengan mengklik Download Full Template.
4. Cari kode:
<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 = &#39;<data:post.id/>&#39;;
      var feed = &#39;<data:post.commentFeed/>&#39;;
      var authorName = &#39;<data:post.author/>&#39;;
      var authorUrl = &#39;<data:post.authorUrl/>&#39;;
      var blogId = &#39;<data:top.id/>&#39;;
      var baseUri = &#39;<data:post.commentBase/>&#39;;

// <![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>
5. Ganti semua kode tersebut dengan kode dibawah 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>
6. Save Template dan lihat hasilnya
Read More

Jumat, 17 Februari 2012

Cara Membuat Fitur Reply Comment Seperti Wordpress di Blogger - Terbaru

| |
0 komentar
Kita mungkin iri melihat fitur reply comment pada blog wordpress teman-teman yang lain, nah blogger jg tidak mau kalah dengan fitur seperti itu dan sekarang di blogger juga sudah bisa ditambahkan fitur comment reply atau thread comments. Sebenarnya cara ini sangat mudah dilakukan, tinggal mengubah sedikit kode template html anda.
Disini saya akan mejelaskan cara yang paling simple dengan mengedit template.
1. Login ke Dasbor Anda ---> Edit HTML
2. Jangn lupa centang Expand Template Widget
3. Cari kode ini:
<b:include data='post' name='comments'/>
 (di template saya ada 4 kode seperti itu)
4. Ganti semua kode diatas dengan :
<b:if cond='data:post.showThreadedComments'>
<b:include data='post' name='threaded_comments'/>
<b:else/>
<b:include data='post' name='comments'/>
</b:if>
 5. Save.

Dan hasilnya akan seperti ini:



Sampai disini, fitur replay comment atau thread comments blogger anda sudah jadi.
Semoga bermanfaat...
Read More

Labels

Tips n Trick (41) tutorial blog (37) Software (20) Tips Blogging (20) RF PrivateServer (17) tutorial (17) Information (14) Tips Blog (14) tips (14) Blogger (13) blog (12) Free Domain (10) Wordpress (10) Games (8) facebook (8) tools (6) tutorial facebook (6) About SEO (5) Movie (5) Skin RF Online (5) media sosial (5) Operation System (4) Webdesign (4) iklan (4) komentar (4) news (4) video (4) custom domain (3) internet tools (3) script (3) youtube (3) Google Apps (2) back to top (2) custom domain 2012 (2) domain (2) domain gratis (2) emoticon (2) facebook chat (2) hacking (2) internet (2) intuit (2) photoshop (2) science (2) time line (2) widget (2) Block Quote (1) CPM (1) Google Drive (1) Lirik Lagu (1) Popads (1) Sail Komodo 2013 (1) Winrar (1) Wisata Indonesia (1) adsense (1) alternatif adsense (1) animal (1) anti copas (1) aplikasi portable (1) backup template (1) berita nasional (1) chat (1) cinta Indonesia (1) convert (1) custom (1) data backup (1) dofollow (1) domain.com (1) event Indonesia (1) feedburner (1) feedburner. subscribe (1) form contact us (1) foto (1) gambar berjalan (1) google insight (1) google plus (1) hosting (1) hosting gratis (1) lebaran (1) marquee text (1) media player (1) musik (1) next page (1) nofollow (1) open source (1) pasang lagu (1) pesawat (1) pilkada (1) pramugari (1) search (1) seo (1) shukoi (1) simbol (1) tabel (1) tampilan blogger baru (1) teks berjalan (1) template (1) tombol like (1) top ranking 1 google (1) top ranking di halaman 1 Google (1) twitter (1) unfriend (1) upload template (1)

attribut