Sabtu, 03 November 2012

XHTML Blogger, Utilitas Sistem Komentar V2

Dalam Konsep

JavaScript Thread Komentar

<b:includable id='threaded_comment_js' var='post'>
<script async='async' expr:src='data:post.commentSrc' type='text/javascript'></script>

<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;
} else if (entry.gd$extendedProperty[k].name == 'blogger.displayTime') {
comment.displayTime = 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>
DataKeteranganTampilan/Contoh Tampilan
data:post.commentSrcElemen ini akan menghasilkan URL sebuah script untuk keperluan fitur komentar//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js
data:post.commentJsoElemen ini akan menghasilkan JSON komentar yang telah diterbitkan di dalam posting terkaitSampel
data:post.commentMsgsElemen ini akan menghasilkan objek berupa variabel untuk menyatakan pesan-pesan tertentu yang akan tampil dalam sistem komentar versi ke duaSampel
data:post.commentConfigElemen ini akan menghasilkan nilai-nilai konfigurasi komentar, menyangkut ID blog, ID posting, URL feed, nama penulis administrator, URL profil administrator, URL Blogger dan kedalaman thread (beberapa tampaknya masih dalam konsep)Sampel

CSS Thread Komentar

<b:includable id='threaded_comment_css'>
<style>
.comments {}
.comments .comments-content {}
.comments .comment .comment-actions a, .comments .continue a {}
.comments .comment .comment-actions a:hover, .comments .continue a:hover {}
.comments .comments-content .comment-thread ol {}
.comments .comments-content .inline-thread {}
.comments .comments-content .comment-thread {}
.comments .comments-content .comment-thread:empty {}
.comments .comments-content .comment-replies {}
.comments .comments-content .comment {}
.comments .comments-content .comment:first-child {}
.comments .comments-content .comment:last-child {}
.comments .comments-content .comment-body {}
.comments .comments-content .user {}
.comments .comments-content .icon.blog-author {}
.comments .comments-content .datetime {}
.comments .comments-content .comment-header, .comments .comments-content .comment-content {}
.comments .comments-content .comment-content {}
.comments .comments-content .owner-actions {}
.comments .comments-replybox {}
.comments .comment-replybox-single {}
.comments .comment-replybox-thread {}
.comments .comments-content .loadmore a {}
.comments .thread-toggle {}
.comments .continue {}
.comments .comments-content .loadmore {}
.comments .comments-content .loadmore.loaded {}
.comments .thread-chrome.thread-collapsed {}
.comments .thread-toggle {}
.comments .thread-toggle .thread-arrow {}
.comments .thread-expanded .thread-arrow {}
.comments .thread-collapsed .thread-arrow {}
.comments .avatar-image-container {}
.comments .avatar-image-container img {}
@media screen and (max-device-width: 480px) {
.comments .comments-content .comment-replies {}
}
</style>
</b:includable>

Sudah tidak berlaku lagi?

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

Jumat, 02 November 2012

Menambahkan Kelas Spesifik pada Tag BODY Berdasarkan Tipe Halaman

Menambahkan Kelas yang Berbeda-Beda pada Tag Body berdasarkan Tipe Halaman
Tipe halaman berubah peran menjadi nama kelas pada tag <body>

Cara termudah untuk menambahkan kelas spesifik pada tag <body> berdasarkan tipe halaman adalah dengan mencantumkan nilai atribut kelas berupa data:blog.pageType seperti ini:

<body expr:class='data:blog.pageType'>

Dengan cara di atas, maka blog Anda akan memiliki kelas spesifik pada tag <body> yang nilainya akan menyesuaikan diri berdasarkan tipe halaman yang sedang diakses.

Kemungkinan akan muncul lima macam nama kelas yaitu:

  • index
  • item
  • archive
  • static_page
  • error_page

Jika Anda ingin menambahkan lebih dari satu kelas, Anda bisa memisahkannya menggunakan simbol + dan beberapa &quot; Misalnya:

<body expr:class='&quot;loading &quot; + data:blog.pageType'>

Kode di atas nantinya akan menghasilkan markup HTML seperti ini:

<body class='loading tipe_halaman'>

Lalu Bagaimana dengan Halaman Muka, Halaman Label dan Pencarian?

Untuk menambahkan kelas spesifik berdasarkan kondisi-kondisi halaman yang tidak termasuk di dalam data:blog.pageType, caranya menjadi sedikit rumit. Kita harus menambahkan sesuatu berupa elemen divisi tepat setelah tag <body>, kemudian kita tambahkan kelas-kelas tertentu berdasarkan kondisional halaman yang nantinya akan kita terapkan satu per satu. Tag yang kita pakai harus diubah menjadi karakter entitas HTML agar bisa lolos dari editor HTML Blogger:

...
<body>
<b:if cond='data:blog.url == data:blog.homepageUrl'>
&lt;div class=&#39;home-page&#39;&gt;
<b:else/>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
&lt;div class=&#39;item-page&#39;&gt;
</b:if>
<b:if cond='data:blog.pageType == &quot;archive&quot;'>
&lt;div class=&#39;archive-page&#39;&gt;
</b:if>
<b:if cond='data:blog.pageType == &quot;error_page&quot;'>
&lt;div class=&#39;error-page&#39;&gt;
</b:if>
<b:if cond='data:blog.pageType == &quot;static_page&quot;'>
&lt;div class=&#39;static-page&#39;&gt;
</b:if>
<b:if cond='data:blog.searchLabel'>
&lt;div class=&#39;label-page&#39;&gt;
</b:if>
<b:if cond='data:blog.searchQuery'>
&lt;div class=&#39;search-page&#39;&gt;
</b:if>
</b:if>

<!-- Konten blog di sini -->

&lt;/div&gt;
</body>

Saat Anda melihat kode sumber blog Anda melalui peramban, harusnya markup HTML akan tampak kurang lebih seperti ini:

...
<body>
<div class='kelas-spesifik'>
...
</div>
</body>

Untuk Apa Kita Melakukan Ini?

Ya, mungkin Anda ingin membuat warna latar artikel yang berbeda-beda berdasarkan tipe halaman. Saat Anda berhasil menerapkan ini, maka Anda bisa menuliskan kode CSS pada selektor yang diawali oleh nama kelas tersebut untuk membatasi penerapan deklarasi:

.post {
background-color:white; /* default */
}

.home-page .post {
background-color:red; /* warna latar artikel saat sedang berada di halaman muka */
}

.item-page .post {
background-color:orange; /* warna latar artikel saat sedang berada di halaman item */
}

.static-page .post {
background-color:green; /* warna latar artikel saat sedang berada di halaman muka */
}

.archive-page .post {
background-color:gold; /* warna latar artikel saat sedang berada di halaman arsip */
}

.error-page .post {
background-color:blue; /* warna latar artikel saat sedang berada di halaman error */
}

.label-page .post {
background-color:violet; /* warna latar artikel saat sedang berada di halaman label */
}

.search-page .post {
background-color:brown; /* warna latar artikel saat sedang berada di halaman hasil pencarian */
}

XHTML Blogger, Seksi Posting

Dalam Konsep

Konten Halaman:

Prolog:

Elemen posting pada umumnya adalah sebuah elemen <b:includable> dengan id='post' seperti ini:

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

Pada versi mobile, Anda akan melihatnya sebagai elemen ini:

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

Elemen tersebut berisi markup HTML yang mendukung penampilan posting:

<div class='post hentry'>
<h2 class='post-title entry-title'>
Judul Artikel...
</h2>
<div class='post-body entry-content' id='post-body-3907786755150251808'>
Konten artikel...
</div>
<div class='post-footer'>
Konten footer artikel...
</div>
</div>

Detail:

Judul Posting

Berupa elemen heading. Biasanya memiliki kelas post-title dan/atau entry-title:

<b:if cond='data:post.title'>
<h3 class='post-title entry-title'>
<b:if cond='data:post.link'>
<a expr:href='data:post.link'><data:post.title/></a>
<b:else/>
<b:if cond='data:post.url'>
<b:if cond='data:blog.url != data:post.url'>
<a expr:href='data:post.url'><data:post.title/></a>
<b:else/>
<data:post.title/>
</b:if>
<b:else/>
<data:post.title/>
</b:if>
</b:if>
</h3>
</b:if>
DataKeteranganTampilan/Contoh Tampilan
data:post.linkElemen ini akan menghasilkan tautan lampiran yang nilainya Anda atur melalui editor postinghttp://www.custom_link_url.com
data:post.urlElemen ini akan menghasilkan URL postinghttp://nama_blog.blogspot.com/2012/11/lorem-ipsum.html
data:post.titleElemen ini akan menghasilkan judul postingLorem Ipsum

Tubuh/Konten Posting

Berupa elemen divisi dengan kelas post-body dan/atau entry-content:

<div class='post-body entry-content' expr:id='&quot;post-body-&quot; + data:post.id'>
<data:post.body/>
<div class='clear'/> <!-- clear for photos floats -->
</div>
DataKeteranganTampilan/Contoh Tampilan
data:post.idElemen ini akan menampilkan ID posting3907786755150251808
data:post.bodyElemen ini akan menampilkan konten postingLorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
data:post.snippetElemen ini akan menghasilkan ringkasan posting dalam 100 kata + ...Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut ...
data:post.thumbnailUrlElemen ini akan menghasilkan URL thumbnail pertama di dalam posting dalam resolusi s72-chttp://4.bp.blogspot.com/-EJgQTkZZJXY/UI1J-2tM21I/AAAAAAAAFF8/09hfALvXkVY/s72-c/1389621_gaillardia.jpg
data:post.firstImageUrlElemen ini akan menghasilkan URL thumbnail pertama di dalam posting dalam resolusi yang sesungguhnyahttp://4.bp.blogspot.com/-EJgQTkZZJXY/UI1J-2tM21I/AAAAAAAAFF8/09hfALvXkVY/s1600/1389621_gaillardia.jpg
data:post.authorPhoto.urlElemen ini akan menghasilkan URL gambar foto profil penulishttps://lh4.googleusercontent.com/-nxgZmVx9WAM/AAAAAAAAAAI/AAAAAAAAAAA/q7C64RWrrU0/s1600/photo.jpg
data:post.authorProfileUrlElemen ini akan menghasilkan URL profil penulishttp://www.blogger.com/profile/034065736413533XXXXX
data:post.authorAboutMeElemen ini akan menghasilkan deskripsi profil penulisLorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.

Footer/Catatan Kaki Posting

Berupa elemen divisi. Biasanya memiliki kelas post-footer:

<div class='post-footer'>

<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
<b:if cond='data:top.showAuthor'>
<data:top.authorLabel/>
<span class='fn'>
<data:post.author/>
</span>
</b:if>
</span>
<span class='post-timestamp'>
<b:if cond='data:top.showTimestamp'>
<data:top.timestampLabel/>
<b:if cond='data:post.url'>
<a class='timestamp-link' expr:href='data:post.url' rel='bookmark' title='permanent link'><abbr class='published' expr:title='data:post.timestampISO8601'><data:post.timestamp/></abbr></a>
</b:if>
</b:if>
</span>
<!-- quickedit pencil -->
<b:include data='post' name='postQuickEdit'/>
<span class='post-comment-link'>
<b:if cond='data:blog.pageType != &quot;item&quot;'>
<b:if cond='data:blog.pageType != &quot;static_page&quot;'>
<b:if cond='data:post.allowComments'>
<a class='comment-link' expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><b:if cond='data:post.numComments == 1'>1 <data:top.commentLabel/><b:else/><data:post.numComments/> <data:top.commentLabelPlural/></b:if></a>
</b:if>
</b:if>
</b:if>
</span>
<!-- Feature added by BTemplates.com -->
<b:if cond='data:post.sharePostUrl'>
<div class='post-share-buttons'>
<b:include data='post' name='shareButtons'/>
</div>
</b:if>
</div>

<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'> ... </span>
<b:if cond='data:top.showMobileShare'>
<div class='mobile-link-button goog-inline-block' id='mobile-share-button'>
<a href='javascript:void(0);'><data:shareMsg/></a>
</div>
</b:if>
<b:if cond='data:top.showDummy'>
<div class='goog-inline-block dummy-container'>
<data:post.dummyTag/>
</div>
</b:if>
<b:if cond='data:top.showMobileShare'>
<div class='mobile-link-button goog-inline-block' id='mobile-share-button'>
<a href='javascript:void(0);'><data:shareMsg/></a>
</div>
</b:if>
<b:if cond='data:top.showDummy'>
<div class='goog-inline-block dummy-container'>
<data:post.dummyTag/>
</div>
</b:if>
</div>

<div class='post-footer-line post-footer-line-3'><span class='post-location'>
<b:if cond='data:top.showLocation'>
<b:if cond='data:post.location'>
<data:postLocationLabel/>
<a expr:href='data:post.location.mapsUrl' target='_blank'><data:post.location.name/></a>
</b:if>
</b:if>
</span> </div>

</div>
DataKeteranganTampilan/Contoh Tampilan
data:top.authorLabelLabel keterangan sebelum nama penulisDiposting oleh:
data:post.authorElemen ini akan menghasilkan nama penulisTaufik Nurrohman
data:top.timestampLabelLabel keterangan sebelum waktu penerbitanpada
data:post.timestampISO8601Elemen ini akan menampilkan waktu penerbitan dalam format timestamp ISO 86012012-10-28T22:42:00+07:00
data:post.timestampElemen ini akan menampilkan timestamp waktu penerbitan10:42
data:post.addCommentUrlElemen ini akan menampilkan URL posting dengan tambahan hash #comment-formhttp://nama_blog.blogspot.com/2012/11/lorem-ipsum.html#comment-form
data:post.addCommentOnclick???...
data:top.commentLabel[?]-
data:post.numComments[?]-
data:top.commentLabelPlural[?]-
data:shareMsg???...
data:post.dummyTag???...
data:top.showLocation???...
data:post.location???...
data:postLocationLabelElemen ini akan menampilkan label lokasi sebelum keterangan lokasi penerbitan postingLokasi:
data:post.location.mapsUrlElemen ini akan menghasilkan URL lokasi dalam peta Google (???)...
data:post.location.nameElemen ini akan menampilkan lokasi penerbitan posting yang telah dituliskan dalam formulir lokasiBanyumas, Indonesia

Jump Link/Read More Link

Elemen ini akan muncul saat Anda mengaktifkan jump link pada posting/memotong artikel dengan cara menyisipkan kode <!--more-->:

<b:if cond='data:post.hasJumpLink'>
<div class='jump-link'>
<a expr:href='data:post.url + &quot;#more&quot;' expr:title='data:post.title'>
<data:post.jumpText/>
</a>
</div>
</b:if>
DataKeteranganTampilan/Contoh Tampilan
data:post.jumpTextElemen ini akan menampilkan teks “Baca Selengkapnya” dari pengaturan postingRead More »

Kamis, 01 November 2012

Tabel Tag [data] Blogger Terluar

Dalam Konsep

Tabel Tag <data> Blogger Terluar
DataKeteranganTampilan/Contoh Tampilan
data:blog.blogIdMenampikan ID blog4828918596196909460
data:blog.bloggerUrlMenampikan URL blogger.comhttp://www.blogger.com
data:blog.titleMenampikan judul blogJudul Blog
data:blog.pageTypeMenampikan tipe halaman yang sedang aktifitem, index, archive, static_page, error_page
data:blog.homepageUrlMenampikan URL hostname blog atau URL halaman mukahttp://nama_blog.blogspot.com
data:blog.urlMenampikan URL blog halaman yang sedang aktifhttp://nama_blog.blogspot.com/2012/10/lorem-ipsum.html
data:blog.canonicalUrlMenampikan URL canonical (tidak berbeda dengan data:blog.url)http://nama_blog.blogspot.com/2012/10/lorem-ipsum.html
data:blog.canonicalHomepageUrlMenampikan URL canonical halaman muka (tidak berbeda dengan data:blog.homepageUrl)http://nama_blog.blogspot.com
data:blog.blogspotFaviconUrlMenampikan URL favicon bloghttp://nama_blog.blogspot.com/favicon.ico
data:blog.enabledCommentProfileImagesMenampikan nilai pengaturan penampilan avatar komentartrue, false
data:blog.adultContentMenampikan nilai pengaturan konten dewasatrue, false
data:blog.disableAdSenseWidgetBoolean untuk menyatakan apakah widget AdSense bawaan dari elemen <data:adCode/> akan ditampilkan atau tidak.true, false
data:blog.analyticsAccountNumberMenampilkan kode akun Google AnalyticUA-12345678-1
data:blog.searchLabelMenampilkan nama label saat kita sedang berada pada halaman labelTutorial
data:blog.searchQueryMenampilkan kueri pencarian saat kita sedang berada pada halaman hasil penelusuranakordion
data:blog.pageNameMenampilkan nama halaman (umumnya nilainya sama dengan judul posting)Lorem Ipsum
data:blog.pageTitleMenampilkan judul title barNama Blog: Judul Artikel
data:blog.metaDescriptionMenampilkan teks meta deskripsi blog/artikelBlog ini berisi artikel seputar babi-babi buta babibu brot.
data:blog.encodingMenampilkan tipe enkoding halamanUTF-8
data:blog.localeMenampilkan lokalisasi negara?id
data:blog.isPrivate???true, false
data:blog.isMobileIndikasi apakah kita sedang berada pada mode blog normal atau mobiletrue, false
data:blog.isMobileRequest???true, false
data:blog.mobileClassMenampilkan kelas khusus untuk blog versi mobile mobile
data:blog.isPrivateBlogMenampikan nilai pengaturan apakah blog ini terbuka untuk umum atau tidaktrue, false
data:blog.languageDirectionMenampikan direksi bahasaltr, rtl
data:blog.feedLinksMenampilkan daftar tag <link> berupa Atom, RSS dan hal-hal lain yang berhubungan dengan feedSampel
data:blog.meTag???...
data:blog.openIdOpTag???...
data:blog.googleProfileUrlMenampilkan URL profil Googlehttps://plus.google.com/108949996304093815163
data:blog.postImageThumbnailUrlMenampilkan thumbnail gambar posting yang sedang aktif (di halaman item/halaman statis). Resolusi thumbnail adalah /s72-c. Biasanya ini digunakan pada elemen <link rel="image_src">http://3.bp.blogspot.com/-48XmDxPLjJo/UJKAzMEr0XI/AAAAAAAAFN8/x90Yj_LnCCg/s72-c/fl-above-grass.jpg
data:blog.latencyHeadScriptMenampilkan script latency head (semacam lazy loader berdasarkan event scroll)Sampel
data:blog.mobileHeadScript???...
data:blog.ieCssRetrofitLinksMenampilkan script ieretrofit.js<!--[if IE]><script type="text/javascript" src="//www.blogger.com/static/v1/jsbin/3659544590-ieretrofit.js"></script><![endif]-->
data:blog.view???...
data:blog.dynamicViewsCommentsSrcMenampilkan URL script komentar halaman dinamis?//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js
data:blog.dynamicViewsScriptSrcMenampilkan script tampilan dinamis?//www.blogblog.com/dynamicviews/2179ec63bcf35660
data:blog.postImageUrlMenampilkan gambar posting yang sedang aktif (di halaman item/halaman statis). Resolusi gambar ada pada resolusi yang sebenarnya.http://3.bp.blogspot.com/-48XmDxPLjJo/UJKAzMEr0XI/AAAAAAAAFN8/x90Yj_LnCCg/s1600/fl-above-grass.jpg