Hiển thị các bài đăng có nhãn B-wiget. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn B-wiget. Hiển thị tất cả bài đăng

Nâng cấp ANCMedia 3.3 - add server.

Người đăng: buonkhongem on Thứ Ba, 24 tháng 1, 2012

Đầu năm đầu tháng khai xuân một bài. Chúc mọi người một năm mới đầy sức khoẻ, may mắn, hạnh phúc. Mình về tết cũng rảnh đôi chút, sửa lại cho mọi người tiện add server.. Chứ suốt ngày kêu ca và yêu cầu mình có 3 đầu 6 tay cũng không làm hết được. ^^

Maphim.Net | Xem phim Online, xem phim han, phim 47, tron bo
Mình đã tách riêng làm 2 file js..Mọi người có thể up lên google code. Nhưng để tiện edit các bạn nên down dropbox về và up file server lên đó.

* File server : http://anhnc.googlecode.com/svn/trunk/ANC/3.3/server.js

_Trong file server này gồm 2 phần chính: config và server.

Maphim.Net | Xem phim Online, xem phim han, phim 47, tron bo
 Danh sách id các bạn có thể thay đổi tuỳ ý. Đã có nhiều bạn có host riêng, vì vậy mình đã làm thêm config cho Player, Proxy, Skin...

* File player: http://anhnc.googlecode.com/svn/trunk/ANC/3.3/player.js

_Vẫn là player có sẵn trong site, nhưng nếu dùng file đó để + file server sẽ không còn dùng được.

* Trong site chỉ cần paste 2 file này như sau vào dưới "anc_tp" hoặc </body>. Tốt nhất là dán dưới </body>
<script src="http://anhnc.googlecode.com/svn/trunk/ANC/3.3/server.js"></script>   
<script src="http://anhnc.googlecode.com/svn/trunk/ANC/3.3/player.js"></script>   

== > Phiên bản 3.3 này mình đã cải thiện vấn đề code, các player trước nhìn rất đau mắt, khó cấu hình CSS, nhiều đoạn code HTML bị thừa. Mọi người có thể nhìn vào hình dưới.

 +) ANC_old

Maphim.Net | Xem phim Online, xem phim han, phim 47, tron bo

+) ANC_new


* ) Giờ vẫn đang nghỉ tết nên mình chưa có mạng add server lên site mình, do đó không có demo cho mọi người. Nhưng có thể xem video hướng dẫn tại đây..

*) Các lưu ý mình đã ghi trong file server, các bạn có thể đọc.

Chúc các bạn thành công !
More about

Chèn Chabox Gtalk vào BlogSpot.

Người đăng: buonkhongem on Thứ Năm, 29 tháng 12, 2011

Nếu site bạn rất nhiều bạn bè có tài khoản Google, tại sao không thử chèn thêm một ChatBox để tăng tình năng trò chuyện kết bạn cho Blog. Việc đơn giản phải làm là bạn chỉ cần nhúng một iframe của Google cho sẵn.





Xem DEMO


Các bạn coppy và cài đặt nhé. Và nhớ chỉnh lại CSS. của mình.


<style>
    #chat{position:fixed; top:0px; left:1px;}
    .bt{background:url('http://cdn1.iconfinder.com/data/icons/androiddevicons/dialog.png') no-repeat; width: 48px; height: 48px;}
    #cbody{border-radius: 3px 10px 0px #444;}
</style>
<div id="chat">
<div class="bt" onclick="toggle()" ></div>
<p id="cbody" style="display:none;">
    <iframe height="350" frameborder="0" width="300" src="http://talkgadget.google.com/talkgadget/client?fid=gtalk0&amp;relay=http%3A%2F%2Fwww.google.com%2Fig%2Fifpc_relay"></iframe>
</p>
</div>
<script>
    var $_ = function(x){return document.getElementById(x);}
   
    function toggle(){
    var ck = $_("cbody").style.display;
        if(ck != "none"){
            $_("cbody").style.display = "none";
        }
        if(ck != "block"){
            $_("cbody").style.display = "block";
        }
    }
</script>


Chúc bạn thành công !
More about

Jquery Slider Tin Tức - News Slider

Người đăng: buonkhongem


Hẳn nhiều bạn cần slide này... mình đã phát triển phiên bản thumbail cho site phim. Nhưng gà CSS quá nên đắp chiếu, lấy silder của trang tin tức này cho các bạn dùng.



Nói về jquery thì mình cũng chả rành lắm, đến từ jquery viết còn hay nhầm thì các bạn chắc cũng đoán được. Phần slider rip của gostep.info, các bạn có thể vào đó xem.

Xem DEMO

Mình cũng hơi buồn ngủ, các bạn setup luôn nhé.


CSS (Cái này cũng gà lắm, mọi người tự căn chỉnh nhé !)

<style>
ul#ticker {
    font: "Helvetica,Arial";
    height: 26px;
    overflow: hidden;
    text-align: right;
    color: red;
    font-size: 12px;
    line-height: 28px;
    background: #444;
}
ul#ticker strong,ul#ticker strong a {
    color: green;
    font-size: 10px;
    padding-right: 5px;
    text-transform: uppercase;
}
#ticker a {
    text-decoration: none;
}
ul#ticker a {
    color: white;
    text-decoration: none;
}
ul, li {
    list-style: none outside none;
}
ul#ticker .meta-comments a,.meta-sep,.meta-date{
    color: #777777;
}
</style>


Javascript

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://anhnc.googlecode.com/svn/trunk/p/news.js"></script>
<script src="/feeds/posts/default?max-results=12&amp;orderby=published&amp;alt=json-in-script&amp;callback=news"></script>


Phần numberposts (12) có thể unlimit nhé ;))

Chúc các bạn thành công !
More about

Tiện ích Top Commentators cho blogspot

Người đăng: buonkhongem on Thứ Sáu, 23 tháng 12, 2011

Tiện ích Top Commentators cho phép hiển thị những đọc giả có lượng comment nhiều nhất. Hiện tại có 1 số blog đã có tiện ích này nhưng họ đã mã hóa code và không chia sẻ, đối với 1 số bạn không rành về javacript sẽ không đọc được các đoạn mã này. Hôm nay nhân tiện có người hỏi về thủ thuật này nên mình cũng xin chia sẻ để mọi người dùng.


Một vài thông tin của tiện ích :
- Không đếm comment của khách nặc danh.
- Chỉ thống kê được tối đa trong 200 comment mới nhất.
- Hiện thị ảnh đại diện (tất cả các author ngoại trừ nặc danh).
- Hiện thị số comment của từng người.

Xem DEMO

Hình ảnh minh họa

Để thực hiện các bạn chỉ việc tạo 1 widget HTML/javascript ở nơi muốn hiển thị rồi dán đoạn code bên dưới vào là được:
<style type="text/css">
.top-author ul li {
list-style:none;
width:250px;
height:45px!important;
border-bottom:1px solid #ccc;
margin-top:5px;
display:block!important;
}
.tau-cont {margin-left:38px;}
.tau-cont h4 {margin:0;padding:0;}
.tau-cont span {color:#555;}
img.tau-thumb {
float: left;
margin-right: 10px;
border: 1px solid #CCC;
padding: 0;
width: 36px;
height: 36px;
}
</style>

<script type="text/javascript">
var no_photo='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrbxY6lUljij5InlAcb1qrL4qnEv9ctBcYHZSiCzZ50QxBq-hMMRKhFGZ8eh_D20yc-1JzJ1VRr8j-mE5yI5f8o__-ELjkr2BWg9gcv1l_Yj7A1mgZ4p_m2eMflGqmmrojoLOrfzpxoALX/s50/blogger-nophoto.png';
var another_au='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1lMa-RO0sJBnPkcK6DN_DE-8LBM9wRt-_O7iQwakVpHTp8pxe9M6wMeNwsychLleBwpIfslER9fcb27oMB__Ugg2iqKL_rQHP9MdJqeBnuSOY72nhA8hbd-sCWFRS7TQfZOMtpwNMpbs9/s23/another-ico.png';
var au_nums=5;
var rcm_nums=100;
var homepage="http://www.fandung.com";
</script>
<div class="top-author">
<script type="text/javascript" src="http://fandung.googlecode.com/svn/trunk/js/top-author.js"></script>
</div>
Một vài lưu ý :
- var no_photo : avatar của tài khoản blogger chưa có ảnh đại diện.
- var another_au : avatar của tài khoản khác blogger.
- var au_nums=5; số tác giả được hiển thị
- var rcm_nums=100; số comment sẽ được khoanh vùng để thống kê (phải nhỏ hơn hoặc bẳng 200)
- var homepage="http://www.fandung.com"; thay http://www.fandung.com bằng tên miền của blog bạn.

Chúc các bạn thành công.

Thực hiện theo yêu cầu của Trần Việt Đức
More about

SlideTab Recent posts (jQuery)

Người đăng: buonkhongem on Thứ Năm, 22 tháng 12, 2011

Phải nói là ở blog của mình tiện ích recent posts rất nhiều, nhiều là do mỗi cái có giao diện khác nhau, chứ về cơ bản thì nó đều như nhau, và đa phần là do các bạn yêu cầu. Và bài này cũng không ngoại lệ. Bài này mình rip lại giao diện theo yêu cầu, chỉ có khác là thay nội dung của nó bằng tiện ích Recent Posts mà thôi.

Xem DEMO

Hình minh họa :

Sau đây là các bước thực hiện :
- Vào code template (thiết kế -> chỉnh sửa code HTML), và chèn đoạn mã code bên dưới vào trước thẻ đóng </head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
- lưu ý là nếu trong code template của bạn đã có file jquery.min.js thì không cần chèn vào nữa, hiện tại jquery đã ra bản 1.7.1

- tiếp theo, tạo 1 widget HTML/javascript và chèn đoạn code bên dưới :
<style type="text/css">
#slidearea {
height: 242px;
overflow: hidden;
margin: 0px 20px 0 20px;
position: relative;
width: 960px;
background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPW88dN11GW0CRS2pskKhfIMBGlnrlOdf4z13ttEP1h0WaFDZjpkPYPN5h0WseRhAxxAjov5WLRQ2I55WPacOaelEH4v88EbqLURn7gO9W_KEr-58RYKKZ3O27VZY2fTpYqXYxATNhuPp3/s0/slider.png) no-repeat;
}
#gallerycover {
overflow: hidden;
margin: 15px 30px 0 30px;
width: 900px;
}
.mygallery {
overflow: hidden;
visibility: visible;
position: relative; z-index: 2;
left: 0px;
width: 900px;
}
.mygallery ul {
margin:0;
padding:0;
position: relative;
list-style-type: none;
z-index: 1;
width: 2700px;
left: -1620px;
}
.mygallery ul li {
overflow: hidden;
float: left;
width: 180px;
height: 210px;
}
.mytext {
position: relative;
margin: 0 5px 0 5px;
width: 170px;
height: 210px;
display: inline;
float: left;
color: #C4C4C4;
}
.mytext p {
padding: 0 0;
color: #555;
font-size: 12px;
line-height: 20px;
width: 170px;
text-shadow: 1px 1px 0 #F6F6F6;
}
.mytext h2 {
padding: 5px 0;
color: black;
width: 170px;
font-size: 14px;
font-weight: bold;
}
.mytext h2 a:link, .mytext h2 a:visited {
color: black;
text-decoration: none;
outline: none;
}
.mytext h2 a:hover {color:#888;}
img.sidim {
width: 170px;
height: 100px;
}
.prevb {
float: left;
width: 20px;
height: 35px;
z-index: 200;
background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNzwNheAmkU5MJRqTdwuH_-PdyIEQawvkyMKePjHbla0HxGtdCA31UmdftmAGrk-7BUR_hcPPGLr1PrvqwQObAcjRN2qKvdSGhP49gqBVjBvpGsqnP_3_eyDANmANyGCGpmnYqA76geZxp/s0/prev.png)!important;
position: absolute;
left: 5px;
bottom: 110px;
}
.nextb {
float: right;
width: 20px;
height: 35px;
z-index: 200;
background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSosfDS_XTx5rkH6cVCbZGFBnzm8qG_KNoh7dSgRm3u3C-ZRoQGQVagouyzcPWRvo71jzemy-bzpIdcS0DfIES9-sY_5dalrspN7vDSwmiBpyv4L0EiioZ7R485QkowDq5wdBu88QugaPG/s0/next.png)!important;
position: absolute;
right: 5px;
bottom: 110px;
display: block;
}
</style>

<script src="http://fandung.googlecode.com/svn/trunk/js/slide-mygallery.js" type="text/javascript"></script>

<script stype="text/javascript">
var $jx = jQuery.noConflict();
$jx(function() {
$jx(".mygallery").jCarouselLite({
btnNext: ".nextb",
btnPrev: ".prevb",
visible: 5,
auto: 3000,
speed: 1000,
easing: "backout"
});
});
</script>

<div id="slidearea">
<div id="gallerycover">
<div class="mygallery">
<ul>
<script type="text/javascript">
var mode = "all";
var g_numposts = 10;
var g_numcontents = 15;
var g_label="B-advance";
var homepage="http://www.fandung.com";
</script>

<script src="http://fandung.googlecode.com/svn/trunk/js/feed-mygallery.js" type="text/javascript"></script>
</ul>

<div class="clear"></div>
</div>
</div>
<a class="prevb" href="#"></a>
<a class="nextb" href="#"></a>
</div>

Hướng dẫn tùy chỉnh :
- visible: 5 đây là số bài viết sẽ được hiển thị ra ngoài, như trong demo là 3.
- auto: 3000 đây là thời gian chạy auto, 3000 tương ứng với 3 giây, tức là sau 3 giây tự động chuyển bài.
- speed: 1000 là tốc độ chuyển bài viết khi click vào button left hoặc right (mũi tên màu cam)
- Lưu ý : nếu không muốn chạy auto, thì bạn bỏ dòng auto: 3000, trong đoạn code javascript, tức là đoạn script ở trên chỉ còn như bên dưới :
<script stype="text/javascript">
var $jx = jQuery.noConflict();
$jx(function() {
$jx(".mygallery").jCarouselLite({
btnNext: ".nextb",
btnPrev: ".prevb",
visible: 5,
speed: 1000,
easing: "backout"
});
});
</script>
- var mode = "all"; là chế độ hiển thị theo cả blog hoặc theo 1 nhãn nào đó, nếu giá trị là all thì hiển thị các bài viết mới của blog, nếu giá giá trị là single thì sẽ hiển thị bài viết theo nhãn được chọn (là biến g_label bên dưới)
- var g_numposts = 10; là số bài viết sẽ load (lưu ý là số bài viết sẽ load (g_numposts) khác với số bài viết sẽ được hiển thị (visible: {giá trị thiết lập}) )
- var g_numcontents = 15; số chữ (là các chuỗi ngăn cách bằng dấu khoảng trắng) sẽ được hiển thị ở đoạn mô tả bài viết.
- var g_label="B-advance"; tên nhãn sẽ được chọn nếu hiển thị ở chế độ mode = "single";
- var homepage="http://www.fandung.com"; thay http://www.fandung.com thành tên domain của blog bạn, ví dụ http://YOUR-BLOG-NAME.blogspot.com

- Ngoài ra nếu tiện ích rộng quá thì các bạn tùy chỉnh lại các thông số về chiều dài và rộng trong code CSS.

- Thủ thuật này xin lưu ý là hơi nặng, nên bạn nào thật sự thích thì hãy sử dụng, còn không thì có thể tham khảo thôi.

Thực hiện theo yêu cầu của Việt Nam
More about

Blogger chính thức add avatar vào comment feed

Người đăng: buonkhongem on Thứ Hai, 12 tháng 12, 2011

Mấy bữa nay ngồi mày mò vài thứ nên ko biết chút thông tin mới nào về blogger. Hôm nay đi dạo 1 vòng mình mới thấy. Nhân tiện đây mình giới thiệu luôn cho mọi người. Trước kia, khi blogger chưa add avatar vào comment feed thì mình có giới thiệu cho các bạn 1 thủ thuật recent comment có avatar, khi đó mình phải dùng tới php để lấy ảnh, nên load rất chậm, và rất ít người dùng. Nay blogger đã add avatar vào feed rồi thì chúng ta không còng phải lo về vấn đề load chậm nữa.


Nhân tiện hôm nay mình cũng sẽ update lại thủ thuật recent comment mà mình đã giới thiệu trước đó. Ngoài việc cập nhật cho avatar cho tiện ích, mình còn fix 1 lỗi mà trước kia post thủ thuật mình đã không để ý. đó là trong trường hợp bài viết bị xóa (không phải xóa vĩnh viễn) thì thủ thuật bị lỗi và không chạy được.

Các bạn có thể xem demo ở đây :


Để update thủ thuật, các bạn chỉ việc cập nhật lại file js trong bài hướng dẫn trước. Nếu ai chưa từng thực hiện thủ thuật thì vào lại bài cũ để xem hướng dẫn.
Link : http://www.fandung.com/2011/06/recent-comments-voi-anh-ai-dien.html

File js đã update :
http://fandung.googlecode.com/svn/trunk/js/recent-comment-avatar.js
More about

Hiển thị bài viết cho trang Music,Phim.

Người đăng: buonkhongem on Chủ Nhật, 11 tháng 12, 2011

Hiển thị thumb ngày càng đa dạng và phong phú, tuỳ vào ý tưởng trình bầy của mỗi người ta lại có một thumb đẹp cho site. Hôm nay xin giới thiệu một thumb đẹp cho blog. Đáp ứng theo yêu cầu của Namozu  từ box yêu cầu thủ thuật.

Trích dẫn :
Nguyên văn từ Namozu

Mình muốn 1 code js để hiện thị tự động 20 ca khúc đầu tiên trong 1 label như mẫu sau.
Thank anh Dũng và mọi người nhiều
http://www.djbooth.net/index/music-charts/entry/C26/
Nếu được xin anh Dũng hoặc các bạn trong BQT giúp mình 1 chút.

Mình đã dành chút thời gian để làm cho bạn.


Sử dụng nó cũng không khó, vì mình đã tích hợp sẵn rồi. Các bạn thích nó theo phong cách của mình có thể download file js về chỉnh sửa CSS. Mình thì cũng không rảnh lắm, dạo này cũng hợi bận, có điều gì tắc trách mong được bỏ qua..


Sử dụng:

1. Dán code sau vào dưới thẻ <body> hoặc trên thẻ </head>.

<script src="http://anhnc.googlecode.com/svn/trunk/xx/anc_sthumb.js"></script>

2. Dán code này vào phần cần hiển thị.

<script src="/feeds/posts/default/-/{Tên label}?max-results={số lượng hiển thị}&orderby=published&alt=json-in-script&callback=showms">
</script>


 Thế là đã xong, rất đơn giản.

Chúc bạn thành công ! 
More about

Lấy link youtube hàng loạt cho ANCMedia

Người đăng: buonkhongem on Thứ Tư, 7 tháng 12, 2011

Trước đây mọi người phải ngồi copy mã nhúng paste vào Blog. Khi có ANCMedia chắc mọi người thấy nhẹ nhàng hơn. Tuy nhiên, rất nhiều người đã chán cái cảnh, ngồi copy từng link Youtube cho vào blog. Rất mệt ! Nhìn một bộ phim mà hơn trăm tập phim thì phải làm thế nào, hic. Vừa làm vừa ngồi đếm, nhầm một link thôi là đã ức chế nổ con mắt đi dò lại.



Giờ đây, cái lười nối tiếp cái lười, với công cụ Get link Youtube thông qua Gdata (Playlist Youtube) cái ngày xưa ấy sẽ đi vào dĩ vãng.

Mình viết công cụ này bởi vì mình cũng là một kẻ lười.

Để sử dụng được công cụ này, các bạn vào trang http://www.maphim.net/p/gdata.html

Bạn phải tạo một playlist cho bộ phim cần lấy. Mình sẽ hướng dẫn các bạn luôn nhé. Nhưng để làm được điểu này, các bạn hãy tạo cho mình một tài khoản Youtube, có tài khoản Google chỉ cần vào điền tên kênh là xong, không cần đăng ký lại.

 B1. Chọn một tập phim để bắt đầu playlist., thêm nó vào playlist bằng dấu cộng bên dưới nhé.


 B2. Nhấn vào "Thông tin thêm về danh sách phát này" để lấy id playlist.


 B3. Lấy id playlist, chú ý chỉ lấy phần màu vàng.


 Có Id rồi bạn vào trang trên, paste id để lấy link, thông tin và ảnh.


Giới thiệu để các bạn sử dụng.

Episode: Nếu bạn có nhiều tập thì chọn phần này. Nó sẽ sinh code nhiều tập phim cho bạn.
Part : Nếu bạn có nhiều phần của tập phim thì chọn phần này. 
Start at episode : Danh sách phát của bạn bắt đầu từ tập bao nhiêu thì ghi vào đây nhé.

* Phần id Gdata lấy được các bạn cũng có thể dùng post cho ANCMedia theo link sau,

anc.yl/ID GDATA


Cách này thường chỉ áp dụng cho một tập phim nhiều part, làm cho gọn phần hiển thị bên dưới. Nếu áp dụng với nhiều tập phim sẽ gây bất tiện cho người dùng.

Chúc các bạn thành công ! 
More about

[Yêu cầu] - Kwick jQuey cho tiện ích Random posts

Người đăng: buonkhongem on Thứ Tư, 12 tháng 10, 2011

Tiện ích bài viết ngẫu nhiên (random posts) nói chung cũng là 1 trong những tiện ích ít người dùng, trước kia mình cũng có post vài bài viết về tiện ích này, mới nhất là ở bên mothuthuat.com, nhưng làm biếng, vẫn chưa rinh về đây. Hôm nay có người yêu cầu, mình sẽ hướng dẫn 1 style mới của tiện ích này, đó là kết hợp hiệu ứng kwick từ jQuery cho tiện ích này.


Xem DEMO

Hiệu ứng Kwick này cũng khá mượt, trước kia mình nhớ là có thấy nó ở trong 1 template nào đó của joomla, sau này lại thấy cộng đồng blogspot Việt dùng. Và mình cũng đã đọc qua 1 bài hướng dẫn chèn cái Kwick này vào blogspot luôn (nhưng giờ thì không nhớ blog nào nữa). Tính qua đó copy code về để chuẩn bị thủ thuật cho nhanh, nhưng ko nhớ, nên phải đi lang thang view source và xào nấu lại.

Hình ảnh minh họa


Theo yêu cầu mình sẽ kết hợp hiệu ứng Kwick này vào tiện ích random posts. Và ở đây tiện ích sẽ giữ nguyên kích thước như bản gốc mà 1 số template đang dùng.

Bài này cũng đơn giản, các bạn chỉ cần tạo 1 tiện ích HTML/javascript và dán code bên dưới vào là được:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
<script src='http://fandung.googlecode.com/svn/trunk/js/noct.js' type='text/javascript'></script>
<style type="text/css">
.kwicks { position:relative;width: 960px; height: 320px;}

.kwicks li{width: 192px;height: 320px;display: block;overflow: hidden;padding: 0px; }
.kwicks li img {width:720px;height:320px;}

.fadeout {
border-right:1px solid #aaa;
display: block;
position: absolute;
right: 0;
width: 300px;
height: 320px;
z-index: 4;
background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgho5Ay-FsJxzZaJMifiOMvSW34Q_fajgcNOFfG8Yz9xcnyM-R69HCNWYOFDGfgi696YEj5e3rhidB3qmwRO9amREU-ToB99oKvLm5FCEJQVKeDOHfJxLT78m8XmqRqiOSzq-qxbyExL7qG/) repeat-y scroll top right transparent; }

.cmkwick {position: absolute;right:10px;bottom:80px;font-weight:bold;font-size:60px;line-height: 1;opacity: 0.5;text-shadow: black 0px 0px 5px;cursor: pointer;color:#fff; }

#kwick_5 .fadeout { border-right:none }

.kwicks.horizontal li {margin-right: 0px; float: left; }
.kwicks.vertical li { margin-bottom: 5px; }
.kwicks .excerpt {
background: #fff;
color: #000;
opacity: 0.6;
filter:alpha(opacity=90);
position: absolute;
padding: 10px;
bottom: 0px;
display: block;
width: 100%; }

.excerpt strong {font-family: "Arial",Arial,Helvetica,san-serif;font-weight: normal;letter-spacing: 0.4px;height: 66px;line-height: 26px;font-size: 14px;display:block;text-transform:uppercase; }

.kwick_style {margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; position: absolute;}
#kwick_1 {left: 0px; width: 192px;}
#kwick_2 {width: 192px; left: 192px; }
#kwick_3 {width: 192px; left: 384px; }
#kwick_4 {width: 192px; left: 576px;}
#kwick_5 {right: 0px; width: 192px;}

#jquery-rd-posts-loading {background:#136eab;text-align:center;width:960px;}

</style>

<div id="jquery-rd-posts">
<div id="jquery-rd-posts-loading">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYb4R0sv6Cwk2mOnZWS3cZgACzotpDH3ge4y_1HY4BDcA40Luoxuk8aE5L-nivoz2vG64mTa9NalG8pr-5OYY9urlWg4CXBXjlQotr7c0hntmKGK7F5nQeqO6Vjf-EkigayBNI6jajhEei/s550/loading.gif" />
</div>
</div>

- Save widget lại. sau đó vào code template, chèn đoạn code bên dưới vào trước thẻ đóng </body>
<script type="text/javascript">
home_page = "http://www.fandung.com/";
kwlabel = "Film";
</script>
<script src="http://fandung.googlecode.com/svn/trunk/js/jquery-rd-post-v2.js" type="text/javascript"></script>

- Mình chọn chèn vào vị trí cuối cùng để không tạo cảm giác blog load chậm.
- Các bạn thay http://www.fandung.com/Film thành tên miền của blog bạn và tên nhãn mà bạn muốn hiển thị bài viết.
- Khuyên cáo : nên chọn 1 nhãn nào đó để hiển thị mà thôi, không nên lấy cả blog để hiển thị, do nếu feed càng nhiều bài viết thì tiện ích load càng chậm.
More about

Adv Recent Posts - Load nhiều tiện ích RP cùng 1 lúc

Người đăng: buonkhongem on Thứ Sáu, 7 tháng 10, 2011

Adv recent posts đơn giản chỉ là tiện ích recent posts thông thường, nhưng được mở rộng ra hơn 1 chút là có thể hiển được nhiều tiện ích recent posts với 1 lần load so với cách cũ là mỗi lần load chỉ hiển thị 1 tiện ích recent posts. Và 1 điểm nữa là chỉ sử dụng link feeed chính của blog, mà không cần dùng link feed theo từng nhãn.

Xem DEMO

Cập nhật thêm DEMO:
Tiện ích VnE TabNews với Adv Recent Posts : XEM

Ở bài viết trước mình đã giới thiệu sơ qua về thủ thuật này rồi, nên mình sẽ không nói lại. Và 1 lưu ý nữa là : ở thủ thuật này mình sẽ chỉ giới thiệu đoạn mã javascript và cách chỉnh sửa nó, còn việc thực hiện bố cục hiển thị cũng như thiết kế giao diện cho từng tiện ích thì mình sẽ không giới thiệu.

Hình ảnh minh họa
(click vào ảnh để xem với kích thước thật)

- Trước tiên thực hiện thủ thuật, các bạn phải xác định vị trí hiển thị cho các tiện ích recent posts. Ví dụ như mình có 4 tiện ích recent posts, và mình muốn chúng hiển thị ở phần main, và có bố cục như bên dưới (như trong demo) thì mình sẽ phải tạo 1 widget HTML/javascript (ví dụ HTML1) và nó có nội dung như bên dưới :

+ Hình minh họa:


+ Code mẫu của widget HTML:
<table>
<tbody>
<tr>
<td>
<div id="a11">
<h3>Blogger Tips</h3>
<div id="label1"></div>
</div>

<div id="a22">
<h3>Thong bao</h3>
<div id="label2"></div>
</div>
</td>
</tr>

<tr>
<td>
<div id="a33">
<h3>BlOg FD</h3>
<div id="label3"></div>
</div>

<div id="a44">
<h3>jQuery</h3>
<div id="label4"></div>
</div>

</td>
</tr>
</tbody>
</table>

- Ngoài ra các bạn cũng có thể đặt 1 cái RP ở Sidebar, và 4 cái ở phần main cũng được, nhưng quan trọng là bạn hãy nhớ các id : label1, label2, ... label5. Như vậy thì ở phần sidebar ta sẽ có 1 cái widget HTML/javascript có nội dụng như sau tương tự như sau:
<div id="a55">
<h3>Film</h3>
<div id="label5"></div>
</div>

- Các bạn sẽ thắc mắc tại sao nội dung nó chỉ là các thẻ div rỗng. Thẻ div rỗng nãy sẽ là địa chỉ mà mã javascript sẽ hiển thị bài viết vào, dựa vào các id đã được đặt sẵn. Như vậy quan trọng chỉ là thẻ các thẻ div : <div id="label1"></div> , <div id="label2"></div> , ... <div id="label5"></div> .
- Phần tạo bố cục và xác định vị trí cho các tiện ích hiển thị thì mình sẽ chỉ hướng dẫn được như vậy thôi, phần còn lại (viết code CSS và HTML) thì mình để lại cho các bạn. Bởi mình có hướng dẫn cụ thể 1 bố cục hoặc 1 giao diện nào đó thì cũng khó mà "tông/tông" với blog của mỗi người.

Và bây giờ là code của thủ thuật :
- Đầu tiên các bạn sẽ chèn đoạn mã script này vào trước thẻ </head>
//<![CDATA[
function stripHtmlTags(s,max){
s=s.replace(/<br.*?>/ig, ' ');
return s.replace(/<.*?>/ig, '').split(/\s+/).slice(0,max-1).join(' ')
}
function showadvrp(json) {
img = new Array();
var n1 = 0;
var n2 = 0;
var n3 = 0;
var n4 = 0;

for (var i = 0; i < numposts; i++) {
var entry = json.feed.entry[i];
var posttitle = entry.title.$t;

var pcm ;
var posturl;


if("media$thumbnail" in entry){
var thumburl = entry.media$thumbnail.url;
}
else{ var thumburl = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQtoJ-ournYGQyU8fKuLEt6FP0AVXxZtHJ0qX3GIHrxu91QtZfAWr9EcpnsfJ04_O7I177-T5zVjFSF97c6UcTlBY-_JLnngZTrg0j92q0V7nzFUCuoHg6HqJyykX1iche5tq8qfxKuuPv/"};


for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
posturl = entry.link[k].href;
break;
}
}

if ("thr$total" in entry) {pcm=entry.thr$total.$t;}
else {pcm="none";}

if (pcm==0) {var comment = 'No comment';}
else if (pcm=='none') {var comment = '<span style="color:#f00;">Do not comment here</span>';}
else {var comment = '<font style="color:#0082ff;">'+ pcm +'</font> Comments';}


var plabel = new Array();
var textlabel = 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> ';
textlabel [k]=entry.category[k].term;
}
var condlabel=textlabel.join(" ");
}
else {plabel = "No label";}

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/AVvXsEig1kE1_3OjSuMaq6NOWo8BohM8io5KWIv1PUvzKN3HVE8ZdBLYWaFWD4q4IAKwvMmknd53CUPZG7RsverYdVVPh3MpT92_gIdmEaEHFiBnhLXiNC_CDhDZrDwuTEJmK9VhTgZi9fWcLE0/s400/noimage.png";}

var advrc = '<li class="adv-rc-list"><img src="'+thumburl+'" style="width:40px; float:left;padding:1px; border:1px solid #ccc;margin-right:5px;" /><a href="'+posturl+'">'+posttitle+'</a><br/><i style="color:#888;">('+comment+')</i></li>';
var advrc_0 = '<li class="adv-rc-list-0"><img src="'+img[i]+'" style="width:100px;height:90px; float:left;padding:1px; border:1px solid #ccc;margin-right:5px;" /><a href="'+posturl+'"><b>'+posttitle+'</b></a><br/><i style="color:#888;">('+comment+')</i><br/>'+stripHtmlTags(postcontent,32)+' ...<p style="border-bottom:1px dashed #f80;margin:7px 0;"></p></li>';
var advrc_01 = '<li class="adv-rc-list-01"><a href="'+posturl+'"><b>'+posttitle+'</b></a> - <i style="color:#888;">('+comment+')</i><br/><img src="'+img[i]+'" style="width:100px;height:90px; float:left;padding:1px; border:1px solid #ccc;margin-right:5px;" />'+stripHtmlTags(postcontent,32)+' ...</li><p style="border-bottom:1px dashed #f80;margin:7px 0;"></p>';
var advrc_1 = '<li class="adv-rc-list-1"><a href="'+posturl+'"><b>'+posttitle+'</b></a><br/><i style="color:#888;">('+comment+')</i><br/><img src="'+img[i]+'" style="width:270px;height:100px;padding:1px; border:1px solid #ccc;margin-right:5px;" /><br/>'+stripHtmlTags(postcontent,32)+' ...<p style="border-bottom:1px dashed #f80;margin:8px 0;"></p></li>';
var advrc_2 = '<li class="adv-rc-list-2"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYOGoTH3OSAiOBkm-q5UGlCuEEcXOB7KGAdoOtmVB54T8BlM1Ao0NUX-udNvUsAORQB8sI93uB-HpfZxgH9k67skgYJLRBmUDB1Jmw9fnm1RrJ37k1jQGMGCTi2bnTBjfyyKcfxxWXUIRb/" /> <a href="'+posturl+'"><b>'+posttitle+'</b></a> - <i style="color:#888;">('+comment+')</i></li>';
var advrc_3 = '<li class="adv-rc-list-3"><span class="listcm">'+pcm+'</span> <a href="'+posturl+'"><b>'+posttitle+'</b></a></li>';

if ((condlabel.match("Thu Thuat Blog"))&&(n1<adv_num1)) {
n1=n1+1;
if (n1==1) {document.getElementById('label1').innerHTML += advrc_0;}
else {document.getElementById('label1').innerHTML += advrc;}
}
else if ((condlabel.match("Announcement"))&&(n2<adv_num2)) {
n2=n2+1;
document.getElementById('label2').innerHTML += advrc;
}
else if ((condlabel.match("BlOgFD"))&&(n3<adv_num3)) {
n3=n3+1;
if (n3==1) {document.getElementById('label3').innerHTML += advrc_1;}
else {document.getElementById('label3').innerHTML += advrc_2;}
}
else if ((condlabel.match("jQuery"))&&(n4<adv_num4)) {
n4=n4+1;
if (n4==1) {document.getElementById('label4').innerHTML += advrc_01;}
else {document.getElementById('label4').innerHTML += advrc_3;}
}
var n1234 = n1 + n2 + n3 + n4;
var ncond = adv_num1 + adv_num2 + adv_num3 + adv_num4;
if (n1234==ncond) {break;} else if (i == json.feed.entry.length) {break;}
}
}
//]]>

- Ở đoạn script trên có các biến : advrc, advrc_0, .., advrc_3. Đây là các biến để tạo giao diện riêng cho các tiện ích recent posts. Và các biến adv_num1, ...adv_num4 là số bài viết hiển thị ở mỗi tiện ích recent posts (tương ứng với các thẻ div có id lần lượt là : label1, ... label4).
- Để hiểu rõ hơn mình sẽ mô tả cách hoạt động chính của đoạn javascript trên. Đoạn code chính của thủ thuật chính là đoạn code bên dưới :
if ((condlabel.match("Thu Thuat Blog"))&&(n1<adv_num1)) {
n1=n1+1;
if (n1==1) {document.getElementById('label1').innerHTML += advrc_0;}
else {document.getElementById('label1').innerHTML += advrc;}
}
else if ((condlabel.match("Announcement"))&&(n2<adv_num2)) {
n2=n2+1;
document.getElementById('label2').innerHTML += advrc;
}
else if ((condlabel.match("BlOgFD"))&&(n3<adv_num3)) {
n3=n3+1;
if (n3==1) {document.getElementById('label3').innerHTML += advrc_1;}
else {document.getElementById('label3').innerHTML += advrc_2;}
}
else if ((condlabel.match("jQuery"))&&(n4<adv_num4)) {
n4=n4+1;
if (n4==1) {document.getElementById('label4').innerHTML += advrc_01;}
else {document.getElementById('label4').innerHTML += advrc_3;}
}
var n1234 = n1 + n2 + n3 + n4;
var ncond = adv_num1 + adv_num2 + adv_num3 + adv_num4;
if (n1234==ncond) {break;} else if (i == json.feed.entry.length) {break;}
}

- Bắt đầu vòng lặp, đoạn secript sẽ kiểm tra bài viết có nhãn Thu Thuat Blog hay ko (đây là giá trị bạn cần thay đổi), nếu bài viết có nhãn này, thì bài viết đó sẽ được hiện thị trong thẻ div có id="label1". Và nếu là bài viết đầu tiên thì sẽ với style biến advrc_0, ngoài ra thì sẽ hiển thị kiểu advrc. Cứ tiếp tục như thế, sang bài viết thứ 2 nếu bài viết ko có nhãn Thu Thuat Blog thì lập tức nó sẽ kiểm tra sang các nhãn khác như Announcement, BlOgFD, jQuery.
- Ở các kiểu hiển thị advrc, advrc_0, .., advrc_3, mình dùng các thẻ <li> để tạo giao diện cho các tiện ích. Các bạn có thể thay đổi giá trị của các biến này để tạo ra các giao diện khác nhau cho mỗi tiện ích.
- Ví dụ như :
advrc ='<li> ... Mã HTML để tạo giao diện cho mỗi bài viết ở mỗi tiện ích ... </li>
- Ở đoạn javascript trên chỉ có 1 label2 (Announcement) là các bài viết trong tiện ích có chung 1 kiểu hiển thị, ngoài ra 3 label còn lại thì được hiển thị theo kiểu nổi bật bài đầu tiên.
- Ở code mẫu trên là chỉ sử dụng cho việc hiển thị 4 tiện ích, nếu muốn hiển thị thêm nhiều tiện ích nữa thì các bạn thêm mã tương tự như đoạn code highlight như bên dưới :
if ((condlabel.match("Thu Thuat Blog"))&&(n1<adv_num1)) {
n1=n1+1;
if (n1==1) {document.getElementById('label1').innerHTML += advrc_0;}
else {document.getElementById('label1').innerHTML += advrc;}
}
else if ((condlabel.match("Announcement"))&&(n2<adv_num2)) {
n2=n2+1;
document.getElementById('label2').innerHTML += advrc;
}
else if ((condlabel.match("BlOgFD"))&&(n3<adv_num3)) {
n3=n3+1;
if (n3==1) {document.getElementById('label3').innerHTML += advrc_1;}
else {document.getElementById('label3').innerHTML += advrc_2;}
}
else if ((condlabel.match("jQuery"))&&(n4<adv_num4)) {
n4=n4+1;
if (n4==1) {document.getElementById('label4').innerHTML += advrc_01;}
else {document.getElementById('label4').innerHTML += advrc_3;}
}

else if ((condlabel.match("Nhãn thứ 5"))&&(n5<adv_num5)) {
n5=n5+1;
if (n5==1) {document.getElementById('label5').innerHTML += advrc_01;}
else {document.getElementById('label5').innerHTML += advrc_3;}
}
var n1234 = n1 + n2 + n3 + n4 + n5;
var ncond = adv_num1 + adv_num2 + adv_num3 + adv_num4 + adv_num5;

if (n1234==ncond) {break;} else if (i == json.feed.entry.length) {break;}
}
- Và tất nhiên phải điều chỉnh thêm ở phần đầu của code javascript như bên dưới:
function showadvrp(json) {
img = new Array();
var n1 = 0;
var n2 = 0;
var n3 = 0;
var n4 = 0;
var n5 = 0;

- Như vậy cơ bản đã hoàn thành, bây giờ là phần cuối cùng. Ở phần cuối cùng này sẽ là phần truy xuất link feed. Để thủ thuật chạy được, phần cuối cùng này phải đặt sau cùng. Tức là phải đặt sau các thẻ div có id : label1, label2,... label5. Tốt nhất là đặt nó ở dưới cùng trong phần nội dung của tiện ích HTML/javascript chứa thẻ div cuối cùng, ví dụ như thẻ div có id="label5" chẳng hạn. Và đây là đoan code sau cùng :
<script type="text/javascript">
numposts = 100;
adv_num1 = 4;
adv_num2 = 5;
adv_num3 = 4;
adv_num4 = 6;
adv_num5 = 6; // chèn thêm nếu có 5 tiện ích
</script>
<script src="http://Yourblogname.blogspot.com/feeds/posts/default?&max-results=100&orderby=published&alt=json-in-script&callback=showadvrp"></script>
- Giá trị max-results phải lớn hơn hoặc bằng giá trị numposts. Tùy theo số bài hiển thị mà bạn thay đổi 2 giá trị này cho hợp lý và cho bài viết được hiển thị đủ như mình muốn.
- Như ở bài giới thiệu trước, mình có nói tới việc nếu tỉ lệ xuất bản bài viết ở mỗi nhãn đều nhau thì tiện ích sẽ load nhanh hơn. Lấy ví dụ như, ở demo mình thực hiện trên blog của mình, do blog mình xuất bản chủ yếu là bài viết về thủ thuật blog, nên vì thế mà trong tiện ích yêu cầu hiển thị 19 bài viết, nhưng lặp đủ 100 lần mà vẫn chỉ được 18 bài, tức là vẫn còn thiếu 1 bài. Như hình minh họa bên dưới :


- Tuy nhiên nếu các bạn xuất bản đều đặn ở mỗi nhãn thì cho dù bạn set vòng lặp là 100 hay 200 thì khi đã lấy đủ bài viết thì vòng lặp sẽ dừng lại. Và đây là đoạn mã đó :
var n1234 = n1 + n2 + n3 + n4 + n5;
var ncond = adv_num1 + adv_num2 + adv_num3 + adv_num4 + adv_num5;
if (n1234==ncond) {break;} else if (i == json.feed.entry.length) {break;}

biến n1234 là số bài viết mà lấy được qua các lần lặp (thay đổi), còn biến ncond (cố dịnh) là tổng số bài mà bạn chọn hiển thị ở tất cả các tiện ích. Như đã set ở trên. Nếu đã lặp đủ, tức là giá trị của 2 biến n1234, ncond bằng nhau thì vòng lặp dừng lại.

Như vậy đã xong bài hướng dẫn. Mình chỉ có thể hướng dẫn sơ qua như vậy thôi, nếu có thắc mắc hoặc bài mình post có sai sót gì, các bạn comment bên dưới mình sẽ trả lời sau.
More about

[ Giới thiệu ] - Cải thiện tốc độ load cho các trang tin tức

Người đăng: buonkhongem on Thứ Hai, 3 tháng 10, 2011

Đa số các blog tin tức (sử dụng blogspot) đều dùng tiện ích recent posts (RP) để hiển thị nội dung trên trang chủ của mình, mà blog tin tức thì tất nhiên sẽ có nhiều chuyên mục, do đó sẽ phải dùng link feed khác nhau để hiển thị, và như thế phần nào ảnh hưởng tới tốc độ load trang.


Hiện tại chúng ta đã quen với việc hiển thị bài viết ở 1 nhãn thì sẽ dùng ngay link feed từ nhãn đó để truy xuất. Đối với 1 blog bình thường thì việc hiển thị 1 hoặc 2 tiện ích RP thì cũng không ảnh hưởng nhiều tới tốc độ load trang. Nhưng còn với blog tin tức thì các tiện ích RP được sử dụng nhiều, và có thể lên con số 10 hoặc hơn. Vì vậy hôm nay mình sẽ giới thiệu cho các bạn cách để cải thiện phần nào tốc độ load trang.

Và cách ở đây mình sử dụng cũng không xa lạ gì, vẫn là dùng tiện ích RP để hiển thị nội dung cho trang tin tức của bạn. Thay vì dùng 5 hoặc 6 tiện ích RP để hiển thị nội dung cho các chuyên mục khác nhau thì nay mình chỉ dùng 1 tiện ích RP để hiển thị cho tất cả.

Ví dụ ta có 4 tiện ích RP và có bố cục như bên dưới. Và bình thường các tiện ích sẽ được load tuần tự từ tiện ích 1 đến tiện ích 4. Như vậy ta sẽ có 4 lần load.


Với 4 lần load tuần tự này ta sẽ có cảm giác blog load chậm. Và tùy theo bố cục các tiện ích của blog được sắp xếp như thế nào thì ta sẽ có cảm giác khác nhau, ví dụ bố cục được sắp xếp theo kiểu cơ bản của blog (theo cột : sidebar1, main, sidebar 2, ...) thì sẽ có cảm giác load chậm hơn so với bố cục z-index (z-index là kiểu sắp xếp bố cục dàn hàng, như chữ Z, load xong hàng 1 xuống hàng 2 load tiếp).

Và với cách của mình thì 4 tiện ích sẽ được load 1 lượt như hình bên dưới :


Thủ thuật chính ở đây là mình dùng link feed của blog để hiển thị bài viết ra nhiều chuyên mục theo từng nhãn. Và tất nhiên sẽ không có chuyện 2 chuyên mục trùng bài viết. Tức là chuyên mục 1 đã có bài viết số 1 thì chuyên mục 2 sẽ không xuất hiện bài viết này nữa, mặc dù bài viết này nằm ở nhiều chuyên mục (bài viết có nhiều nhãn). Do chỉ load 1 link feed nên tốc độ sẽ nhanh hơn so với việc load lần lượt nhiều link feed.

Tuy cách này có thể gôm nhiều tiện ích RP lại để load cùng 1 lúc, nhưng các bạn cũng không nên lạm dụng mà gôm quá nhiều tiệc ích RP để load 1 lúc. Nếu load 10 tiện ích 1 lúc so với 5 tiện ích 1 lúc tất nhiên nó sẽ khác nhau. Do số bài viết được load nhiều hơn. Thế nên ta phải có bố cục hợp lý để chia thành từng nhóm 1 để load các tiện ích 1 lúc.

* Một vài thông tin của thủ thuật:
- Load nhiều tiện ích RP 1 lúc.
- Bố cục hiển thị linh hoạt, và không ảnh hưởng đến tốc độ load. (tức là cho dù bạn xắp xếp nó như thế nào thì nó sẽ vẫn hiển thị 1 lúc)
- Tốc độ load nhanh hơn so với cách thông thường dùng nhiều link feed.
- Không gây lặp bài viết.
- Tuy load chung 1 lúc nhưng các tiện ích RP hoàn toàn có thể có các giao diện khác nhau (kiểu hiển thị, số bài hiển thị ...) mà không nhất thiết phải giống nhau đồng loạt.
- Nếu các nhãn trên blog có tần suất xuất bản đều nhau thì tốc độ load sẽ nhanh hơn. Ví dụ như ở blog mình, bài viết về thủ thuật blog nhiều hơn so với các nhãn khác, vì thế mà sử dụng cách này cũng không tối ưu lắm. Việc này là do thủ thuật mình lọc các bài viết trong feed theo nhãn, nều 1 chuyên mục đã đủ bài hiển thị thì lập tức nó sẽ bỏ qua các bài viết thuộc nhãn này (nếu bài viết có 1 nhãn) và tiếp tục tìm đến bài viết thuộc nhãn khác. Chỉ khi nào số bài viết trong các mục đủ như đã set hoặc tới điểm dừng của vòng lặp thì vòng lặp sẽ dừng lại.

Do hiện tại host của mình có 1 trục trặc nhỏ, nên tạm thời mình chỉ giới thiệu thủ thuật. Còn DEMO và hướng dẫn cụ thể mình sẽ post ở bài viết tiếp theo.
More about

Recent comments với ảnh đại diện

Người đăng: buonkhongem on Thứ Năm, 23 tháng 6, 2011

Như đã thông báo, hôm nay mình sẽ giới thiệu cho các bạn 1 thủ thuật hoàn toàn mới. Đó là thủ thuật hiển thị các nhận xét mới nhất cho blog (hoặc 1 bài viết nào đó), điểm nổi bật ở thủ thuật lần này là sẽ hiển thị ảnh profile của người comment (đối với tài khoản blogger), và sẽ hiện thị avatar đại diện cho những người thuộc nhóm khác như : wordpress, AOL, ... Ngoài ra đối với những bạn comment với tài khoản blogger mà chưa add hình đại diện thì cũng sẽ hiển thị chung 1 ảnh đại diện.


Thủ thuật này đã được thay thế bằng thủ thuật mới 
--> xem ở đây
Trước kia mình cũng tường giới thiệu việc tạo ảnh đại diện cho các comment của các bài viết. Và sau này khi blogger đã include ảnh đại diện vào phần comment của bài viết thì thủ thuật đó đã không còn cần thiết nữa. Và lần này cũng vậy, khi mà blogger chưa include ảnh đại diện vào feed của comment thì mình giới thiệu cho các bạn thủ thuật này. Nếu sau này blogger có include thêm ảnh đại diện vào phần comment thì có lẽ thủ thuật này sẽ không còn cần thiết, bởi vì chắc chắn việc lấy ảnh profile theo thủ thuật này sẽ chậm hơn nhiều so với lấy ảnh trực tiếp từ feed.

Ý tưởng thủ thuật này mình cũng đã nghĩ tới từ lâu, nhưng lúc đó chưa biết cách làm như thế nào, gần đây mình có đọc comment của 1 bạn trên blog mình nói là hiện tại chưa có ai viết thủ thuật tạo ảnh đại diện cho tiện ích các nhận xét mới nhất (recent comments) và hy vọng mình có thể giới thiệu thủ thuật này cho mọi người. Và điều này thôi thúc mình suy nghĩ cách để lấy ảnh profile của blogger. Thông tin duy nhất trong feed comment để có thể lấy ảnh profile của blogger là chỉ có link profile của tác giả. Và mình đã cố suy nghĩ làm sao để lấy ảnh từ link profile này, sau 1 khoảng thời gian dài mò mẫm, test đi test lại thì mình đã thực hiện được điều mình muốn. Nói thật nếu như rành 1 chút về javascript và php thì có lẽ mình đã không tốn nhiều thời gian để thực hiện thủ thuật này.

Và đây là demo của thủ thuật:
- DEMO 1 : xem comment mới nhất của cả blog.
- DEMO 2 : xem comment mới nhất của 1 bài viết.

Hình ảnh minh họa 
và 1 số ảnh avatar đại diện cho các nhóm comment.


Thủ thuật này do phải lấy ảnh profile của blogger nên sẽ load lâu hơn thủ thuật cũ (không có ảnh đại diện), vì thế mình có lời khuyên nho nhỏ cho các bạn sử dụng thủ thuật này là nên để nó load sau cùng. Làm vậy ta sẽ có cảm giác blog không bị chậm. Để nó load nhanh hơn thì gần như là không khả thi, còn việc muốn nó hiển thị khi blog được load xong hết (tức là vị trí đặt tùy ý, không cần đặt ở cuối trang) thì mình hiện thời chưa test được. Khi nào test được mình sẽ update thủ thuật sau.

Và đây là code của thủ thuật :
- các bạn tạo 1 widget HTML/javascript rồi dán code bên dưới vào :
<style type="text/css">
#rcommentfd {width:300px;}
img.rcav-photo {
float:left;
margin-right:7px;
border:solid #ddd 1px;
padding:1px;
height:50px;
width:50px;
}
td div.rcav-content {font-size:12px!important;}
div.rcav-content .rcav-author {background:url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOH337m8YKjnwQGjLOsmrq2w6k_olyZPFGna4ZC0DcVJLycXWXrixANKN3Q2CSPqBT_yoNZV0LDTBCz4uhJDAQvSIjg0_FE7UiVTL3M3oG9yx-ge8rT-8591oDifxSCd4FQa27RtzOj8Tf/) no-repeat bottom left;padding-bottom:11px;}
div.rcav-content .rcav-sum {background:#efefef;padding:5px;border-left:1px solid #e1e1e1;border-right:1px solid #e1e1e1;border-bottom:1px solid #e1e1e1;}
</style>

<script type="text/javascript">
ava_mode = "single";
var cm_num = 5;
var cm_desc = 30;
var homepage = "http://www.fandung.com";
postID = "6268184133967397100";

var cm_ava = new Array();
cm_ava['openid'] = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG1KfWD5Kl6iYs0iZI9WcVJY4y_6qGTlz2KrDtLUbZSQNKgLAHnYPzd4v-Ks9Bhh0EX0G9Xk3H9cjRG19sU2uaVrhujaUFUr6T7Faf3FVuYaV1dlftF0Hd9TPrtLQbNjygp-r74c2-37GR/";
cm_ava['livej'] = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhia3AedA4eRE5MBobnlf8ttnulSxkhCe-iBCXpm-c-vN9cwnRbKMjc6WX-wZIvkaOD2gdIDmmV-CzRTOFoTzs-_BUXJrZCqMYdZy61CXByZ71tBzcCVpNPdDOsSTaSwHGcUJDJTFAuZkX9/";
cm_ava['wp'] = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii0avptXH8Hbpmlmkn9Pj819YBcS8874CXV5Ovn9k2CTfly_8GPKqr1Dti-yRlSb7UyD-O8ystUWJDJIVZKbp_e0cl_JeBpLjIdyCA_PPD_0GFJ23b__I7pt-XVZk54WEmUP4zcXYBecxK/";
cm_ava['typepad'] = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDEY5Aa-vgWjcGYfnKnrPY_X6wMsz2twhibgT2wDQeTEabZ1jJELe4jrVD5lWE7YGhNEF0h4DWGZxnTPP3K_fYa9mhXKI-99WNmZUQF4k9spBftRyl_Ryk4DWObrdR_bnQNILBTwChU1sr/";
cm_ava['aim'] = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6cfu6f-nKSfgwnPp_90LG1WsmQWW30-AQh2t0zH1yEyaqf0i6TkH2zWbNgzYWsKAJz_rxkMjZQXnsNWHeh1cVib8gspMn9X-w6Sco7wyWzinVFUB4racEwEbiNbTk7E-43KnvVIdLbxIC/";
cm_ava['url'] = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0w3z9SRWLQkhJD8LorTgLApR5gSEGjp158kcCEckZgEZz0AZub6iwIrRVN6exMBDNv4np5pvmdygNh0fTp46tVAdURCknNpIHwzpF8GxWnbLiWKyi1KIrXbWeGISUiQaSJv5ZOdmO_pPA/";
cm_ava['anon'] = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIE4Uz6yznCVSyhOROpJNWcp8yZhtbsGNN47j4pUKeNZHfzizymACRFASaz5SBZjaUt5yqFGstwkya8QNg_u3gLF4QGKlJFdfqY-JMzdsRsGcsePr0XOxBuYPmxeqYFhwky3sRDNGd1h8F/";

</script>
<script src="http://data.fandung.com/blog/demo/rcomment-avatar/recent-comment-avatar.js" type="text/javascript"></script>


Sau đây là 1 vài lưu ý:
- thủ thuật có 2 chế độ hiển thị, ở code mẫu ở trên là chế độ hiển thị comment cho 1 bài viết, lưu ý là phải thay đổi lại dòng code postID = "6268184133967397100"; cho đúng với số ID của bài viết mà bạn muốn hiển thị comment (có thể xem ở đây để lấy số ID của bài viết). Nếu muốn hiển thị comment cho cả blog thì các bạn thay đổi dòng code này ava_mode = "single"; thành ava_mode = "all";
- biến var cm_desc = 30; : là số chữ hiển thị (lưu ý là chữ chứ không phải ký tự).
- biến var cm_num = 5; : là số comment sẽ hiển thị.

Chúc các bạn thành công.
More about

FDNav - Phân trang cho blogspot

Người đăng: buonkhongem on Thứ Hai, 30 tháng 5, 2011

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/AVvXsEig1kE1_3OjSuMaq6NOWo8BohM8io5KWIv1PUvzKN3HVE8ZdBLYWaFWD4q4IAKwvMmknd53CUPZG7RsverYdVVPh3MpT92_gIdmEaEHFiBnhLXiNC_CDhDZrDwuTEJmK9VhTgZi9fWcLE0/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.
More about

Update tiện ích recent posts

Người đăng: buonkhongem on Thứ Tư, 25 tháng 5, 2011

Từ trước đến giờ đa số các tiện ích recent posts có 1 hạn chế nhỏ mà mọi người dễ dàng thấy, đó là việc hiện thị summary cho bài viết ko được tốt cho lắm. Ở 1 số bài viết, phần summary bị mất chữ, nguyên nhân của việc này là do cách thức ta ngắt phần summary post.



Trước giờ ta hay dùng cách ngắt theo kí tự, tức là chọn 1 số kí tự nhất định để hiển thị ở phần summary. Do đó mà khi đủ số kí tự thì script sẽ ngắt, do đó mà ta sẽ hay gặp trường hợp chữ hiển thị không đủ. Để khắc phục điều này, ta sẽ dùng cách chọn số từ để hiển thị chứ không phải số kí tự. Thực ra nói số từ cũng ko đúng, nếu nói đúng hơn thì là cụm kí tự chứ không phải là "từ". Cụm kí tự ở đây mình nói là các chuỗi kí tự được cách nhau bằng dấu cách (khoảng trắng).
Ví dụ:
"... cũng ko đúng, nếu ..." - ta sẽ có 4 cụm kí tự, và cụm "đúng," không được xem là 1 từ.
Thực ra cách này đã có từ lâu, nhưng chưa có ai để ý để khắc phục cho tiện ích recent posts, thế nên hôm nay mình sẽ hướng dẫn các bạn cách khắc phục điều này.

Trong file js của các tiện ích recent posts ta hay gặp 1 hàm như bên dưới :

function removeHtmlTag(strx,chop){
var s = strx.split("<");
for(var i=0;i<s.length;i++){
if(s[i].indexOf(">")!=-1){
s[i] = s[i].substring(s[i].indexOf(">")+1,s[i].length);
}
}
s = s.join("");
s = s.substring(0,chop-1);
return s;

}

- Hàm này dùng để loại bỏ các thẻ HTML có trong phần nội dung của bài viết trên feed. Đồng thời giúp hiển thị phần rút gọn của bài viết. Giá trị chop ở đây chính là số kí tự sẽ hiển thị ở phần summary.

Các bạn thay hàm ở trên bằng hàm bên dưới:

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


Và bây giờ các bạn chỉ cần thay giá trị của biến summaryPost lại là được. (đa số các tiện ích recent posts mình hay đặt tên biến để tùy chỉnh số kí tự hiển thị là summaryPost )

- Ví dụ : summaryPost = 30; giá trị 30 chính là số cụm kí tự (cách nhau bằng dấu khoảng trắng) sẽ được hiển thị là 30.

Chúc các bạn thành công.
More about