Thứ Hai, 30 tháng 5, 2011

FDNav - Phân trang cho blogspot

Trước kia mình đã từng giới thiệu thủ thuật phân trang cho blogspot, nhưng chỉ là phạm vi ở trang chủ, do đó 1 tiện ích này còn được ít người sử dụng. Hôm nay mình sẽ nâng cấp thủ thuật này lên cho toàn bộ blog.


* Một số tính năng mới :
- Hiển thị phân trang cho toàn bộ blog (trừ trang Archive).
- Hiển thị trang báo lỗi 404 khi trang tìm kiếm không tồn tại.
- Hiện thị 2 dạng list và dạng thumbnail.
* Nhược điểm :
- Không hiện thị được với trang Archive. Vì thế ai dùng thủ thuật này sẽ phải chấp nhận đóng các trang Archive lại.
- Thanh Navigation hiện thị trên đầu khi truy cập blog từ IE6 và Opera.

- Bên dưới là hình minh họa trang báo lỗi (ví dụ 1 nhãn chỉ có 50 trang, mà bạn tự truy cập vào trang có giá trị page là 51 thì tiện ích sẽ báo lỗi)

Để thực hiện thủ thuật này, các bạn vào bài viết "Phân trang cho trang chủ" để tham khảo cách thực hiện.

Cách thực hiện tương tự như bài trước, vào chỉ việc thay thế các code ở các bước như bên dưới:
- Sửa lại code ở bước 1 như bên dưới :
...
...
<style type='text/css'>
<b:if cond='data:blog.url != "item"'>
#Blog1 {display:none;}
</b:if>
</style>
- tiếp theo là ẩn nội dung bài viết : tìm đọan code như bên dưới :
<div class='post-header-line-1'/>
<div class='post-body entry-content'>
...
xuống bên dưới vài dòng ta sẽ thấy đọan code như bên dưới
...
<data:post.body/>
<div style='clear: both;'/> <!-- clear for photos floats -->

</div>
- phần code này chính là nội dung của mỗi bài viết.
- và chèn thêm code như bên dưới :
<div class='post-header-line-1'/>
<div class='post-body entry-content'>
<b:if cond='data:blog.url == "item"'>
...
xuống bên dưới vài dòng ta sẽ thấy đọan code như bên dưới
...
<data:post.body/>
<div style='clear: both;'/> <!-- clear for photos floats -->
</b:if>

</div>

- Thay thế code ở bước 2 thành code như bên dưới :
<style type="text/css">
.clear {clear: both;}
.home-navi {width:500px;color:#000}
.home-navi h2 {border-bottom:1px solid #f70;padding-bottom:3px;margin-bottom:5px;}
.home-navi h2 a {text-decoration:none;color:#c65b00;}
.home-navi h2 a:hover {color:#eb8e41;}
.home-navi p {color:#000;}
.home-navi p span {color:#000}
.cat_tags {background:#FFF url(http://data.fandung.com/img/fd_category1.png) no-repeat;width:500px;}
.cat_tags_close {background:#FFF url(http://data.fandung.com/img/fd_category1.png) 0 -81px no-repeat;width:500px;}
.cat_tags{margin-top:10px;padding:8px 0 5px 10px;}
.cat_tags_close{max-height:3px;height:3px;margin-bottom:20px;}

.cat_tags .continue{float:right;padding-right:10px;width:90px;text-align:center;}
.cat_tags .category{float:left;color:#f70;width:360px;}
.cat_tags .category a {color:#}
.cat_tags a {color:#999;}
.cat_tags .continue a {color:#fff;text-decoration:none;}
.cat_tags .continue a:hover {text-decoration:underline;font-weight:bold;}

#page-rc-tooltip {font-weight:bold; padding-top:15px;margin-bottom:15px;text-align:center;}
#page-rc-tooltip a {text-decoration:none; border:1px solid #fcb353; padding:2px 5px;background:#fae9c8;}
#page-rc-tooltip a:hover {color:#f00;background:#fcc697;}
#page-rc-tooltip span {border:1px solid #ccc; padding:2px 5px;background:#fff;}
#page-rc-tooltip span.currentpage {background:#fcaa62;}

a.label-link {color:#555;text-decoration:none;}
a.label-link:hover {color:#000;text-decoration:underline;}

td.listtitle {padding-left:5px;width:405px;}
td.listtitle span {color:#888;font-size:85%;}
td.listtitle span a{color:#e70!important;}
td.listtitle span i{color:#000!important;}
td.listinfo {width:90px;text-align:right;font-size:85%;color:#888;}
td.listinfo span {color:#000;font-style:italic;}

</style>
<div style="margin-bottom:10px;padding:5px;font-weight:bold;border:1px solid #fcb353;-khtml-border-radius: 5px;-moz-border-radius: 5px;-webkit-border-radius: 5px;background:#fae9c8;">
Dạng xem (<a href="?v=full">Full</a> | <a href="?v=list">List</a>)<img src="http://www.nepalguidetreks.com/images/new_animated.gif" /> - <i style="color:#f00;">Đang thử nghiệm</i></div>

<script type='text/javascript'>
//<![CDATA[
//page, view value

String.prototype.GetValue= function(para) {
var reg = new RegExp("(^|&)"+ para +"=([^&]*)(&|$)");
var r = this.substr(this.indexOf("\?")+1).match(reg);
if (r!=null) return unescape(r[2]); return null;
}
var str = location.href;
var page = str.GetValue("page");
var view = str.GetValue("v"); //lấy giá trị dạng xem
var homepageurl = "http://www.fandung.com/";
var urllength = homepageurl.length;
if (page==undefined) { page = "1"; }
if (view==undefined) { view = "full"; } //mặc định giá trị view là full

if (str.indexOf("search/label")!=-1) {
if (str.indexOf("?")!=-1){
var str1 = str.split("?")[0];
var label = str1.substring(urllength+13,str1.length);
}
else {
var label = str.substring(urllength+13,str.length);
}
var textlabel = "/-/"+label;
var textpage = "search/label/"+label;
}
else {var textlabel ="";var textpage = ""; }


// remove tags
function stripHtmlTags(s,max){
s=s.replace(/<br.*?>/ig, ' ');
return s.replace(/<.*?>/ig, '').split(/\s+/).slice(0,max-1).join(' ')
}

//get RSS FEED
function showrecentposts(json) {
img = new Array();
for (var i = 0; i < numposts; i++) {
var entry = json.feed.entry[i];
var posttitle = entry.title.$t;
var pcm ;
var posturl;
if (i == json.feed.entry.length) break;
for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
posturl = entry.link[k].href;
break;
}
}

for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == 'replies' && entry.link[k].type == 'text/html') {
pcm = entry.link[k].title.split(" ")[0];
break;
}
}
var plabel = new Array();
var cate = entry.category;
if(cate) {
for (var k = 0; k < entry.category.length; k++) {
plabel[k] = ' <a class="label-link" href="http://www.fandung.com/search/label/'+entry.category[k].term+'">'+entry.category[k].term+'</a> ';
}
}
else {plabel = "No label";}

var authpost = entry.author[0].name.$t;

var postdate = entry.published.$t;
var month = [1,2,3,4,5,6,7,8,9,10,11,12];
var month2 = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];

var day = postdate.split("-")[2].substring(0,2);
var m = postdate.split("-")[1];
var y = postdate.split("-")[0];
postDay = day+ "/" + m + "/" + y ;

if ("content" in entry) {
var postcontent = entry.content.$t;}
else
if ("summary" in entry) {
var postcontent = entry.summary.$t;}
else postcontent = "";

s = postcontent; a = s.indexOf("<img"); b = s.indexOf("src=\"",a); c = s.indexOf("\"",b+5); d = s.substr(b+5,c-b-5);

if((a!=-1)&&(b!=-1)&&(c!=-1)&&(d!="")) {img[i] = d;} else {img[i]="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM4DyMw0nfxrTrDB4rgoqWa95AZvhqOoACM1nDgObc_2lXRck0LRilpnhNMr18R8N6vQhyphenhyphen22a13UI5SnuKjPuJdNRcnChK4t24GgCbmHqfX_2TmhsOe5lhwBcczFAyaojVoZcfHE5-k8Q/s400/noimage.png";}

if (pcm==0) {var comment = " Chưa có nhận xét";}
//else if (pcm==1) {var comment = " "+ pcm + " Comment ";}
else {var comment = '<font style="color:#f80;">'+ pcm +'</font> Nhận xét';}

var td1 = '<div class="home-navi"><h2><a href="'+posturl+'">'+posttitle+'</a></h2><p style="font-size:85%;color:#888;"><span>by</span> '+authpost+' | <span>on</span> '+postDay+' | '+comment+'</p><p style="padding:10px 0px;"><img style="width:120px;padding:2px;border:1px solid #ccc;margin-right:5px;margin-bottom:5px;float:left;" src="'+img[i]+'" />'+stripHtmlTags(postcontent,90)+' ...</p> <div class="cat_tags clear"><span class="category">Nhãn : '+plabel+'</span><span class="continue"><a href="'+posturl+'">Xem thêm...</a></span><div class="clear"></div></div><div class="cat_tags_close"></div></div>';

var td2 = '<div style="border-bottom:1px dashed #f80;"><table><tr><td valign="top" class="listinfo">'+comment+'<br/><span>by</span> '+authpost+'<br/><span>on</span> '+postDay+'</td><td valign="top" class="listtitle"><a href="'+posturl+'"><b>'+posttitle+'</b></a><br/><span><i>Tags</i> : '+plabel+'</span></td></tr></table></div>';

if (view=="full") {document.write(td1);}
else {document.write(td2);}
}
}

// get total number of posts
function numberOfPosts(json) {
document.write('<script style=\"text/javascript\">var totalPosts= '+json.feed.openSearch$totalResults.$t+' ;<\/script>');
}
document.write('<script src=\"http://www.fandung.com/feeds/posts/default'+textlabel+'?alt=json-in-script&callback=numberOfPosts\"><\/script>');

//]]>
</script>

<script type='text/javascript'>

if (str.indexOf("archive.html")!=-1) {
document.write("<div style=\"text-align:center;padding:10px;background-color:#fae9c8;border:1px #fcb353 solid;\"><img src=\"http://data.fandung.com/img/404page-bg.png\" \/><br><br>Trang mà bạn đang tìm không tồn tại trên blog.<br> Click <a href=\"http://www.fandung.com\">vào đây<\/a> để trở về trang chủ.<\/div>"); }

else {
var rcpage = new Array();
if (view=="full") {
var numposts = 5; // số bài viết hiển thị trên 1 trang dạng thumbnail
}
else {var numposts = 20;} // số bài viết hiển thị trên 1 trang dạng list

var numpage=totalPosts/numposts;
var lastnum = totalPosts%numposts;
if (lastnum==0) {numpage=numpage+1;}

for (var m=1;m<numpage;m++) {
var start=numposts*(m-1)+1;
rcpage[m] ="<script src=\"http://www.fandung.com/feeds/posts/default"+textlabel+"?start-index="+start+"&max-results="+numposts+"&orderby=published&alt=json-in-script&callback=showrecentposts\"><\/script>";
}
if ((page>numpage)&&(page<numpage+1)&&(lastnum>0)) {
var numposts=lastnum;
start = totalPosts-lastnum+1;
document.write("<script src=\"http://www.fandung.com/feeds/posts/default"+textlabel+"?start-index="+start+"&max-results="+numposts+"&orderby=published&alt=json-in-script&callback=showrecentposts\"><\/script>");
}
else if ((page>numpage)||((page>numpage-1)&&(lastnum==0))){document.write("<div style=\"text-align:center;padding:20px 10px;background-color:#fae9c8;border:1px #fcb353 solid;\"><img src=\"http://data.fandung.com/img/404page-bg.png\" \/><br><br>Trang mà bạn đang tìm không tồn tại trên blog.<br>Click <a href=\"http://www.fandung.com\">vào đây<\/a> để trở về trang chủ.<\/div>"); }
else {document.write(rcpage[page]); }

// Create page navigation

if (lastnum==0) {var pagelist=totalPosts/numposts;} else {var pagelist=numpage+1;}
var pagelist1 = parseInt(pagelist);

var npage = parseFloat(page);

if (page<=parseInt(pagelist)) {

if ((pagelist>=2)&&(pagelist1<6)) {

document.write("<div id=\"page-rc-tooltip\">Page ("+page+"/"+parseInt(pagelist)+") : ");
for (var n=1;n<pagelist1+1;n++) {
if (n==npage) {var navpage=" <span class=\"currentpage\" >"+n+"<\/span>";} else {var navpage=" <a href=\"http://www.fandung.com/"+textpage+"?v="+view+"&page="+n+"\">"+n+"<\/a>";}
document.write(navpage);
}
document.write("<\/div>");
}

if ((pagelist>=6)&&(page<4)) {
document.write("<div id=\"page-rc-tooltip\">Page ("+page+"/"+parseInt(pagelist)+") : ");
for (var n=1;n<6;n++) {
if (n==npage) {var navpage=" <span class=\"currentpage\" >"+n+"<\/span>";} else {var navpage=" <a href=\"http://www.fandung.com/"+textpage+"?v="+view+"&page="+n+"\">"+n+"<\/a>";}
document.write(navpage);
}
if (parseInt(pagelist)>5) { document.write(" ... <a href=\"http://www.fandung.com/"+textpage+"?v="+view+"&page="+parseInt(pagelist)+"\">Last<\/a><\/div>"); } else {document.write("<\/div>");}
}

else if ((pagelist>=6)&&(page>3)&&(page<parseInt(pagelist)-2)) {
var first = page-2;
var last = first+5;
document.write("<div id=\"page-rc-tooltip\">Page ("+page+"/"+parseInt(pagelist)+") : <a href=\"http://www.fandung.com/"+textpage+"?v="+view+"&page=1\">First<\/a> ...");
for (var n=first;n<last;n++) {
if (n==npage) {var navpage=" <span class=\"currentpage\" >"+n+"<\/span>";} else {var navpage=" <a href=\"http://www.fandung.com/"+textpage+"?v="+view+"&page="+n+"\">"+n+"<\/a>";}
document.write(navpage);
}
document.write(" ... <a href=\"http://www.fandung.com/"+textpage+"?v="+view+"&page="+parseInt(pagelist)+"\">Last<\/a><\/div>");
}

else if ((pagelist>=6)&&(page>3)&&(page>parseInt(pagelist)-3)) {
var first = parseInt(pagelist)-4;
var last = parseInt(pagelist)+1;
document.write("<div id=\"page-rc-tooltip\">Page ("+page+"/"+parseInt(pagelist)+") : <a href=\"http://www.fandung.com/"+textpage+"?v="+view+"&page=1\">First<\/a> ...");
for (var n=first;n<last;n++) {
if (n==npage) {var navpage=" <span class=\"currentpage\" >"+n+"<\/span>";} else {var navpage=" <a href=\"http://www.fandung.com/"+textpage+"?v="+view+"&page="+n+"\">"+n+"<\/a>";}
document.write(navpage);
}
document.write("<\/div>");
}
}
} //kết thúc lệnh không cho phép hiện thị tiện ích trên trang archive
</script>
- Các giá trị numposts=5; numposts=20; lần lượt là số bài viết hiển thị trên 1 trang dạng thumbnail và dạng list.
- Thay www.fandung.com thành tên blog của bạn.
- Chú ý : code ở bước 2 là code mình chia sẻ, vì thế muốn cho tiện ích phù hợp với blog của các bạn thì các bạn nên tùy chỉnh lại code CSS. Thứ 2 nữa là giao diện hiển thị, các bạn có thể tùy chỉnh giao diện hiển thị bằng cách thay đổi code của biến td1td2 (với td1 là giao diện của dạng thumbnail, td2 là giao diện của dạng list.)

- Đến bước thứ 3: ta có đoạn code như thế này :
<b:if cond='data:blog.pageType == data:blog.homepageUrl'>
...
...
...
</b:if>
- thay thế nó bằng code như bên dưới:
<b:if cond='data:blog.pageType != "item"'>
...
...
...
</b:if>
- ở bài trước, tiện ích chỉ cho phép hiển thị ở trang chủ, bài này ta mở rộng cho nó hiển thị ở tất cả các trang trừ trang bài viết.

Như vậy mình đã giới thiệu xong. Chúc các bạn thành công.

Không có nhận xét nào:

Đăng nhận xét