Tiện ích Bài viết liên quan có phân trang
Thứ Ba, 14 tháng 12, 2010
Lấy cảm hứng từ tiện ích Bài viết liên quan có phân trang từ blog Hỗn tạp, tôi có điều chỉnh một số điểm và có hướng dẫn chi tiết hơn để giúp cho tiện ích Bài viết liên quan có phân trang (Related Posts with Navigation) trở nên hoàn thiện hơn.Xem Demo.
Để cài đặt tiện ích này, bạn hãy thực hiện theo các bước sau đây.
Bước 1. Đăng nhập Blogger, vào Design >> Edit HTML, chọn Expand Widget Templates.
Đặt đoạn code dưới đây vào trước thẻ </head>.
<!--Related Posts Scripts and Styles Start-->
<b:if cond='data:blog.pageType == "item"'>
<style>
#related-posts{float:center;text-transform:none;height:100%;min-height:100%;padding-top:5px}
#related-posts .widget{margin-bottom:10px}
#related-posts .widget h2,#related-posts h2{height:25px;color:blue;font-size:15px;font-weight:bold;font-family:Arial,Tahoma,Times New Roman,serif;margin:0 4px 0;margin-top:4px;padding:0 0 5px}
#related-posts a{color:blue;text-decoration:none}
#related-posts a:hover{color:blue}
#related-posts ul{list-style-type:none;margin:0 0 0 0;padding:0;text-decoration:bold;font-size:13px;text-color:#000}
#related-posts ul li{display:block;background:url("http://bit.ly/hjpshO") no-repeat 0 0;list-style-type:none;margin:0;padding-top:0;padding-right:0;padding-bottom:1px;padding-left:21px;margin-bottom:5px;line-height:2em;border-bottom:1px dotted #ccc}
.related-posts-navi a{border:1px solid #36c;background:#fff;color:#36c;display:block;float:left;margin-right:10px;padding:2px 5px;text-decoration:none}
.related-posts-navi a:hover{background:#36c;color:#fff;text-decoration:none}
.related-posts-navi .related-posts-navi-selected{background:#36c;color:#fff}
</style>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js' type='text/javascript'/>
<script type='text/javascript'>
jQuery.noConflict();
</script>
</b:if>
<!--Related Posts Scripts and Styles End-->
<b:if cond='data:blog.pageType == "item"'>
<style>
#related-posts{float:center;text-transform:none;height:100%;min-height:100%;padding-top:5px}
#related-posts .widget{margin-bottom:10px}
#related-posts .widget h2,#related-posts h2{height:25px;color:blue;font-size:15px;font-weight:bold;font-family:Arial,Tahoma,Times New Roman,serif;margin:0 4px 0;margin-top:4px;padding:0 0 5px}
#related-posts a{color:blue;text-decoration:none}
#related-posts a:hover{color:blue}
#related-posts ul{list-style-type:none;margin:0 0 0 0;padding:0;text-decoration:bold;font-size:13px;text-color:#000}
#related-posts ul li{display:block;background:url("http://bit.ly/hjpshO") no-repeat 0 0;list-style-type:none;margin:0;padding-top:0;padding-right:0;padding-bottom:1px;padding-left:21px;margin-bottom:5px;line-height:2em;border-bottom:1px dotted #ccc}
.related-posts-navi a{border:1px solid #36c;background:#fff;color:#36c;display:block;float:left;margin-right:10px;padding:2px 5px;text-decoration:none}
.related-posts-navi a:hover{background:#36c;color:#fff;text-decoration:none}
.related-posts-navi .related-posts-navi-selected{background:#36c;color:#fff}
</style>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js' type='text/javascript'/>
<script type='text/javascript'>
jQuery.noConflict();
</script>
</b:if>
<!--Related Posts Scripts and Styles End-->
Chú ý trong phần code ở trên, tôi thêm vào đoạn javascript được đánh dấu màu đỏ nhằm giúp cho thư viện jQuery không xung đột với các thư viện khác (nếu blog của bạn chứa các thư viện khác như Scriptaculous chẳng hạn), bởi vì nếu xảy ra sự xung đột thì chức năng phân trang sẽ không hoạt động được.
Bước 2. Tìm dòng <div class='post-footer-line post-footer-line-1'>
rồi đặt trước nó với đoạn code bên dưới.
<b:if cond='data:blog.pageType == "item"'>
<b:include data='post' name='related-posts'/>
</b:if>
<b:include data='post' name='related-posts'/>
</b:if>
Bước 3. Tìm dòng <b:includable id='feedLinksBody' var='links'>
rồi đặt trước nó với đoạn code sau đây.
<b:includable id='related-posts' var='post'>
<div id='related-posts'>
<h2>Bài viết liên quan</h2>
<ul id='related-posts-list'/>
</div>
<script type='text/javascript'>
var relatedPostsConfig = {
maxPosts: 500,
perLabel: 100,
perPage: 7,
hiddenLabel: ['Label 1', 'Label 2', 'Label 3']
};
function getRelatedPosts(json) {
var posts = [],
num = 0,
max = (relatedPostsConfig.maxPosts - relatedPostsConfig.count > json.feed.entry.length) ? json.feed.entry.length : (relatedPostsConfig.maxPosts - relatedPostsConfig.count); // max number of entries can be loaded
if (max <= 0) {
return;
}
for (var i = 0; i < max; i++) {
entry = json.feed.entry[i];
posts[num] = {};
posts[num].title = entry.title.$t;
for (var j = 0; j < entry.link.length; j++) {
if (entry.link[j].rel == "alternate") {
posts[num].url = entry.link[j].href;
break
}
}
num++;
}
relatedPostsConfig.count += max;
for (i = 0; i < num; i++) {
var li = document.createElement("li"),
a = document.createElement("a");
a.href = posts[i].url;
a.title = posts[i].title;
a.appendChild(document.createTextNode(posts[i].title));
if (a.href != location.href) {
li.appendChild(a);
relatedPostsConfig.container.appendChild(li);
}
}
}
(function() {
var obj = {};
for(var i = 0; i < relatedPostsConfig.hiddenLabel.length; i++) {
obj[relatedPostsConfig.hiddenLabel[i]] = '';
}
relatedPostsConfig.count = 0;
relatedPostsConfig.container = document.getElementById("related-posts-list");
<b:loop values='data:posts' var='post'>
<b:loop values='data:post.labels' var='label'>
if (!('<data:label.name/>' in obj)) {
document.write('<script type="text/javascript" src="/feeds/posts/summary/-/'+'<data:label.name/>'+'?alt=json-in-script&callback=getRelatedPosts&max-results='+relatedPostsConfig.perLabel+'"></' + 'script>');
}
</b:loop>
</b:loop>
})();
$(function(){
var pages = 1;
while ($('#related-posts-list > li').length) {
var $ul = $('<ul/>').appendTo($('#related-posts'));
$('#related-posts-list > li:lt('+relatedPostsConfig.perPage+')').appendTo($ul);
pages++;
}
$('#related-posts > ul:gt(1)').hide();
var $div = $('<div class="related-posts-navi"/>').appendTo($('#related-posts'));
for (var i = 1; i < pages; i++) {
var $a = $('<a id="related-posts-page-' + i + '" href="#"/>').click(function(){
var id = $(this).attr('id').substr(19);
$('#related-posts > ul').hide();
$('#related-posts > ul:eq(' + id + ')').show();
// change class
$('.related-posts-navi > a').removeClass('related-posts-navi-selected');
$(this).addClass('related-posts-navi-selected');
return false;
}).append(i).appendTo($div);
}
$('.related-posts-navi > a:first').addClass('related-posts-navi-selected');
$('<div style="clear:both" />').appendTo($('#related-posts'));
});
</script>
</b:includable>
<div id='related-posts'>
<h2>Bài viết liên quan</h2>
<ul id='related-posts-list'/>
</div>
<script type='text/javascript'>
var relatedPostsConfig = {
maxPosts: 500,
perLabel: 100,
perPage: 7,
hiddenLabel: ['Label 1', 'Label 2', 'Label 3']
};
function getRelatedPosts(json) {
var posts = [],
num = 0,
max = (relatedPostsConfig.maxPosts - relatedPostsConfig.count > json.feed.entry.length) ? json.feed.entry.length : (relatedPostsConfig.maxPosts - relatedPostsConfig.count); // max number of entries can be loaded
if (max <= 0) {
return;
}
for (var i = 0; i < max; i++) {
entry = json.feed.entry[i];
posts[num] = {};
posts[num].title = entry.title.$t;
for (var j = 0; j < entry.link.length; j++) {
if (entry.link[j].rel == "alternate") {
posts[num].url = entry.link[j].href;
break
}
}
num++;
}
relatedPostsConfig.count += max;
for (i = 0; i < num; i++) {
var li = document.createElement("li"),
a = document.createElement("a");
a.href = posts[i].url;
a.title = posts[i].title;
a.appendChild(document.createTextNode(posts[i].title));
if (a.href != location.href) {
li.appendChild(a);
relatedPostsConfig.container.appendChild(li);
}
}
}
(function() {
var obj = {};
for(var i = 0; i < relatedPostsConfig.hiddenLabel.length; i++) {
obj[relatedPostsConfig.hiddenLabel[i]] = '';
}
relatedPostsConfig.count = 0;
relatedPostsConfig.container = document.getElementById("related-posts-list");
<b:loop values='data:posts' var='post'>
<b:loop values='data:post.labels' var='label'>
if (!('<data:label.name/>' in obj)) {
document.write('<script type="text/javascript" src="/feeds/posts/summary/-/'+'<data:label.name/>'+'?alt=json-in-script&callback=getRelatedPosts&max-results='+relatedPostsConfig.perLabel+'"></' + 'script>');
}
</b:loop>
</b:loop>
})();
$(function(){
var pages = 1;
while ($('#related-posts-list > li').length) {
var $ul = $('<ul/>').appendTo($('#related-posts'));
$('#related-posts-list > li:lt('+relatedPostsConfig.perPage+')').appendTo($ul);
pages++;
}
$('#related-posts > ul:gt(1)').hide();
var $div = $('<div class="related-posts-navi"/>').appendTo($('#related-posts'));
for (var i = 1; i < pages; i++) {
var $a = $('<a id="related-posts-page-' + i + '" href="#"/>').click(function(){
var id = $(this).attr('id').substr(19);
$('#related-posts > ul').hide();
$('#related-posts > ul:eq(' + id + ')').show();
// change class
$('.related-posts-navi > a').removeClass('related-posts-navi-selected');
$(this).addClass('related-posts-navi-selected');
return false;
}).append(i).appendTo($div);
}
$('.related-posts-navi > a:first').addClass('related-posts-navi-selected');
$('<div style="clear:both" />').appendTo($('#related-posts'));
});
</script>
</b:includable>
Lưu Template là OK.
Chú ý: Trong đoạn code trên, bạn có thể thay đổi những tham số trong những dòng sau đây:
maxPosts: 500,
perLabel: 100,
perPage: 7,
hiddenLabel: ['Label 1', 'Label 2', 'Label 3']
Trong đó:
- maxPosts: chỉ số lượng bài viết liên quan (tối đa) được hiển thị
- perLabel: chỉ số lượng bài viết liên quan (tối đa) tính theo mỗi label
- perPage: chỉ số lượng bài viết liên quan được liệt kê trong 1 trang
- hiddenLabel: danh sách các label không hiển thị, phân cách bằng dấu phẩy. hiddenLabel được dùng khi bài viết của bạn có nhiều label, trong đó có 1 số label đặc biệt mà bạn không muốn liệt kê các bài viết liên quan nằm trong đó (VD 'Thông báo', 'Tổng hợp', ...). Khi đó bạn chỉ cần liệt kê các label dạng này vào biến hiddenLabel là xong. Nếu muốn hiển thị tất cả các label (không ẩn label) nào thì khai báo: hiddenLabel: []
Chúc bạn thành công!
Tăng cỡ chữ
Mặc định
Giảm cỡ chữ
Liên hệ mail: tpm1512@yahoo.com và xem tất cả bài viết trang này
Tại đây
Nhấn vào theo dõi thăm trang web của Trần Phúc Minh
-
https://yogaso1.blogspot.com/2010/12/tien-ich-bai-viet-lien-quan-co-phan.html
Minh cám ơn bạn đã quan tâm và rất vui vì bài viết đã đem lại thông tin hữu ích cho bạn.
MENU
Sản phẩm
Trang chủ
Nổi bậc
Tiện ích
Tài khoản
Tác vụ
YOUTUBE
Trang chủ
Lên trên
Tổng số Bình luận [ 0]
Đăng nhận xét