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

Thứ Năm, 8 tháng 12, 2011

Facebook comments for blogger - Update

Ở bài viết trước mình đã hướng dẫn các bạn thay thế comment của blogger bằng comment của facebook, và mình đã nhận được 1 số phản hồi như là : chèn form comment của facebook vô làm blog load ỳ ạch, hoặc nhiều khi không load được đối với nhà mạng VNPT, và 1 ý kiến phản hồi khá hay là sử dụng song song cả 2 form comment của blogger và facebook cho bài viết. Ý kiến phản hồi này đã kích thích mình, và mình đã test ngay. Và bây giờ là lúc ngồi trước máy tính để chia sẻ cho mọi người.


Ở bản cập nhật này, mặc định form comment của Blogger sẽ được hiển thị, khi muốn comment bên form của facebook, thì các bạn chỉ việc click vào thanh điều hướng chuyển form comment là được.

Demo của bạn này và demo của bản cũ sẽ vẫn được dùng chung.

Xem DEMO

Hình ảnh minh họa


Updated 10/12/2011 : về việc click vào điều hướng chuyển form sẽ nhảy đến khu vực comment, tránh trường hợp bài viết dài khỏi mất công kéo chuột xuống.
- Để update thủ thuật, bạn chỉ cần update code của bước 5 là được.

Sau đây là các bước thực hiện : lưu ý là ở bản cập nhật này các bước thực hiện vẫn tương tự, chỉ có khác là không vào phần cài đặt để ẩn comment mà thôi. Vì thế nếu đã thực hiện bản cũ muốn update lên ở bản này thì các bạn cứ việc thay thế code đã thêm ở bản cũ bằng code của bản này là được.
1. Vào phần thiết kế -> chỉnh sửa code HTML -> nhấp chọn mở rộng mẫu tiện ích.
2. Chèn đoạn code bên dưới vào trước thẻ đóng </head>
<script type='text/javascript'>
//<![CDATA[
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 purl= location.href;
var cm_form = purl.GetValue("cm_form");
var fb_href = purl.substring(0,purl.indexOf(".html")+5);
var fbcm ='<div class="fb-comments" data-href="'+fb_href+'" data-num-posts="5" data-width="660"></div>';
//]]>
</script>
- data-width là độ rộng của comment box.
- data-num-posts là số comment được hiển thị (cũng chính là số bài reply trên 1 comment)
- data-href là để phân biệt từng comment box, mỗi địa chỉ data-href khác nhau sẽ cho 1 comment box khác nhau. và trong thủ thuật này data-href chính là link của mỗi bài viết.

3. Chèn đoạn code bên dưới vào sau thẻ <body>
<div id='fb-root'/>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = &quot;//connect.facebook.net/en_US/all.js#xfbml=1&quot;;
fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));</script>

4. Tìm đoạn code như bên dưới :

<b:include data='post' name='post'/>


5. Chèn ngay sau nó đoạn code bên dưới :
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<div id='cmnav' style='text-align:center;'> <a href='?cm_form=blogger#cmnav'>Blogger Comments</a> | <a href='?cm_form=facebook#cmnav'>Facebook Comments</a> </div>

<script type='text/javascript'>
if (cm_form==&quot;facebook#cmnav&quot;) {
document.write(fbcm);
var fbcss = document.createElement(&quot;style&quot;);
fbcss.type = &quot;text/css&quot;;
fbcss.innerHTML = &quot;#comments { display:none }&quot;;
document.body.appendChild(fbcss);
}
</script>
</b:if>

- Ở bước 5 này có 1 lưu ý nhỏ. Bạn phải xác định thẻ div chưa nội dung của phần comment của blogger là gì, đa số nó sẽ là #comments. Tùy theo template của bạn đang xài, và tùy theo người Rip template thì có thể nó sẽ khác. Việc xác định nó cũng không khó nên mình không hướng dẫn ở đây.
- 1 điều nữa là phần liên kết chuyển form comment (href='?cm_form=blogger' href='?cm_form=facebook'). Cái giá trị cm_form=facebook thì bạn phải giữ nguyên, còn giá trị cm_form=blogger thì các bạn có thể thay đổi theo ý thích. Cái này chỉ có tác dụng load lại trang để sang chế độ comment của blogger mà thôi. Như ở đây mình khuyên cũng nên giữ nguyên để cho nó đẹp, pro 1 tý.

6. Save template.

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

Thanks ý tưởng của Quang Minh today

Thứ Tư, 7 tháng 12, 2011

Chèn comment của facebook vào blogspot

Facebook đã trở nên phổ biến và quen thuộc mỗi khi chúng ta muốn lên đây để ... "chém gió". Và hôm nay mình sẽ hướng dẫn cho các bạn đem cái công cụ "chém gió" này vào blog của các bạn. Với việc thay thế comment của blogspot bằng comment của facebook hy vọng blog của các bạn sẽ sôi động hơn.


Có thể nói thủ thuật chèn comment của facebook vào mỗi bài viết blogspot cũng không mới lạ gì, 1 số blog thủ thuật nước ngoài đã đăng tải rồi (các bạn có thể vào google search với từ khóa facebook comments for blogger là có kết quả ngay). Tuy nhiên phải nói là cách thực hiện nó cũng khá phức tạp. Ngay cả mình cũng chưa thực hiện thành công khi làm theo các bước hướng dẫn. Có lần mình đã cố thử vào trang http://developers.facebook.com/setup/ mà không được, không biết có phải facebook hạn chế đối với user ở Viện Nam ko nữa.

Và ở thủ thuật này, các bạn sẽ chỉ cần copy và paste code là xong, không cần phải thiết lập hay tạo App trên facebook.

Xem DEMO

Hình ảnh minh họa


Bước đầu tiên bạn phải làm là đóng comment của blogger lại. Các bước thực hiện như hình bên dưới :

- Save cài đặt lại.

Bước 2 : chèn code của thủ thuật vào template.
1. Vào phần thiết kế -> chỉnh sửa code HTML -> nhấp chọn mở rộng mẫu tiện ích.
2. Chèn đoạn code bên dưới vào trước thẻ đóng </head>
<script type='text/javascript'>
//<![CDATA[
var purl= location.href;
var fb_href = purl.substring(0,purl.indexOf(".html")+5);
var fbcm ='<div class="fb-comments" data-href="'+fb_href+'" data-num-posts="5" data-width="660"></div>';
//]]>
</script>
- data-width là độ rộng của comment box.
- data-num-posts là số comment được hiển thị (cũng chính là số bài reply trên 1 comment)
- data-href là để phân biệt từng comment box, mỗi địa chỉ data-href khác nhau sẽ cho 1 comment box khác nhau. và trong thủ thuật này data-href chính là link của mỗi bài viết.

3. Chèn đoạn code bên dưới vào sau thẻ <body>
<div id='fb-root'/>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = &quot;//connect.facebook.net/en_US/all.js#xfbml=1&quot;;
fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));</script>

4. Tìm đoạn code như bên dưới :

<b:include data='post' name='post'/>


5. Chèn ngay sau nó đoạn code bên dưới :
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<script type='text/javascript'>
document.write(fbcm);
</script>
</b:if>

6. Save template.

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

Theo yêu cầu của Phù Thủy Âm Nhạc

Thứ Hai, 10 tháng 10, 2011

[ Yêu Cầu ] - Chèn quảng cáo giữa 2 bài viết bất kỳ trên trang chủ

Việc chèn quảng cáo vào blog cũng khá đơn giản, ta chỉ cần xác định vị trí đặt quảng cáo (như trên header, top main, sidebar, hay là bên dưới footer) rồi tạo 1 widget HTML/javascript để dán code quảng cáo vào. Đó là các vị trí đơn giản, tức là chèn giữa các widget, nhưng còn chèn giữa các bài viết thì sao???


Xem DEMO
Lưu ý : DEMO chỉ xem được khi thủ thuật còn tồn tại trên blog test

Như chúng ta đã biết các bài viết hiển thị ở trang chủ hay các trang label, archive đều nằm trong widget Blog1. Các bài viết đều được lặp tuần tự để hiển thị ra trên các trang này. Nếu ta chèn thẳng code quảng cáo vào trong code của widget Blog1 thì các quảng cáo này cũng sẽ được lặp lại tuần tự. Như thế thì có bao nhiêu bài viết hiển thị thì sẽ có bấy nhiêu quảng cáo xuất hiển, và các quảng cáo này đều giống nhau. Và với bài viết này, với 1 chút thủ thuật nhỏ, mình sẽ hướng dẫn cho các bạn cách chèn vào quảng cáo vào giữa 2 bài viết bất kỳ trên trang chủ. Và ở mỗi vị trí này (tức là giữa các bài viết) ta hoàn toàn có thể chèn các quảng cáo khác nhau.


Sau đây là các bước thực hiện:
- Vào Thiết kế --> Chỉnh sửa code HTML --> nhấp chọn mở rộng mẫu tiện ích
- Tìm đoạn code tương tự như bên dưới (lưu ý : có thể mỗi emplate đoạn code bên dưới sẽ dài ngắn khác nhau, nhưng quan trọng ta tìm đúng vị trí của nó và chú ý đến đoạn code highlight)

<div class='blog-posts hfeed'>

<b:include data='top' name='status-message'/>

<data:adStart/>
<b:loop values='data:posts' var='post'>

<b:include data='post' name='post'/>
<b:if cond='data:blog.pageType == "item"'>
<b:include data='post' name='comments'/>

</b:if>
<b:if cond='data:post.includeAd'>
<data:adEnd/>
<data:adCode/>
<data:adStart/>
</b:if>
<b:if cond='data:post.trackLatency'>
<data:post.latencyJs/>
</b:if>

</b:loop>
<data:adEnd/>

</div>

- Sau khi tìm thấy đoạn code như trên, ta thêm đoạn code màu hồng như bên dưới :
<div class='blog-posts hfeed'>

<script type='text/javascript'>
//<![CDATA[
var stt=0;
var ads1='Code của quảng cáo 1';
var ads2='Code của quảng cáo 2';
//]]>
</script>


<b:include data='top' name='status-message'/>

<data:adStart/>
<b:loop values='data:posts' var='post'>

<b:include data='post' name='post'/>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<b:include data='post' name='comments'/>

</b:if>
<b:if cond='data:post.includeAd'>
<data:adEnd/>
<data:adCode/>
<data:adStart/>
</b:if>
<b:if cond='data:post.trackLatency'>
<data:post.latencyJs/>
</b:if>

<script type='text/javascript'>
stt=stt+1;
if (stt==1) {document.write(ads1);}
if (stt==2) {document.write(ads2);}
</script>


</b:loop>
<data:adEnd/>

</div>

- Với :
+ stt = 1: là vị trí giữa bài viết 1 và 2
+ stt = 2: là vị trí giữa bài viết 2 và 3
+ và thực hiện tương tự ta có các vị trí khác.

- Nếu muốn các quảng cáo chỉ xuất hiển ở trang chủ thì ta thay đoạn code bên dưới :
<script type='text/javascript'>
//<![CDATA[
var stt=0;
var ads1='Code của quảng cáo 1';
var ads2='Code của quảng cáo 2';
//]]>
</script>

bằng :
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<script type='text/javascript'>
//<![CDATA[
var stt=0;
var ads1='Code của quảng cáo 1';
var ads2='Code của quảng cáo 2';
//]]>
</script>
</b:if>

Ảnh minh họa ở trang chủ:

Mở rộng hơn, các bạn có thể tùy chỉnh thêm bằng cách cho hiển thị các quảng cáo khác ở trang label hoặc trang archive.
- ví dụ ở trang archive, ta thay quảng cáo ads1ads2 thành các quảng cáo ads3, ads4
- để thực hiện ta thay đoạn code ở trên thành code bên dưới :
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<script type='text/javascript'>
//<![CDATA[
var stt=0;
var ads1='Code của quảng cáo 1';
var ads2='Code của quảng cáo 2';
//]]>
</script>
</b:if>
<b:if cond='data:blog.pageType == &quot;archive&quot;'>
<script type='text/javascript'>
//<![CDATA[
var stt=0;
var ads1='Code của quảng cáo 3';
var ads2='Code của quảng cáo 4';
//]]>
</script>
</b:if>

Ảnh minh họa ở trang archive:

- Ngoài 2 trang này (trang trang chủarchive) ta có thể hiển thị các quảng cáo ads5ads6 ở các trang còn lại (các trang label và các trang index khác). Để thực hiển thì ta thay đoạn code ở trên bằng đoạn code bên dưới:
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<script type='text/javascript'>
//<![CDATA[
var stt=0;
var ads1='Code của quảng cáo 1';
var ads2='Code của quảng cáo 2';
//]]>
</script>
<b:else/>
<b:if cond='data:blog.pageType == &quot;archive&quot;'>
<script type='text/javascript'>
//<![CDATA[
var stt=0;
var ads1='Code của quảng cáo 3';
var ads2='Code của quảng cáo 4';
//]]>
</script>
<b:else/>
<script type='text/javascript'>
//<![CDATA[
var stt=0;
var ads1='Code của quảng cáo 5';
var ads2='Code của quảng cáo 6';
//]]>
</script>
</b:if>
</b:if>

- Khi thực hiện cách mở rộng tới đây, chúng ta vẫn còn 1 thiếu sót, đó là quảng cáo vẫn có thể sẽ hiển thị ở trang bài viết. nếu vị trí 1 là giữa bài 1 và bài 2 thì quảng cáo sẽ xuất hiện ở trang bài viết. Nếu muốn không cho quảng cáo này hiển thị ở trang bài viết thì các bạn thay đoạn code này :
<script type='text/javascript'>
stt=stt+1;
if (stt==1) {document.write(ads1);}
if (stt==2) {document.write(ads2);}
</script>
thành:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
<script type='text/javascript'>
stt=stt+1;
if (stt==1) {document.write(ads1);}
if (stt==2) {document.write(ads2);}
</script>
</b:if>

Ảnh minh họa ở các trang còn lại, ví dụ trang label:

- Lưu ý : chỉ thay đổi nội dung code của các quảng cáo, còn các biến ads1, ads2 thì phải giữ nguyên, tức là quảng cáo 5 và 6 tên biến vẫn là ads1ads2, chứ không phải là ads5, ads6
- Cuối cùng là save template và kiểm tra kết quả.

Thứ Sáu, 10 tháng 6, 2011

[Update] - Modify Form comment : Bài 13 - Thiết kế lại giao diện của comment

Thủ thuật này mình thực hiện theo yêu cầu của bạn Yolks.
Đây là thủ thuật thứ 13 về comment cho blogspot. Thủ thuật này sẽ giúp các bạn tạo mới lại giao diện cho khu vực hiển thị comment của blogspot.
Một lưu ý nhỏ khi thực hiện thủ thuật : do thủ thuật can thiệp khá nhiều vào code của template, nên tránh gặp sự cố đáng tiếc, các bạn nên download template của blog về máy trước khi thực hiện thủ thuật.

Sau đây là 1 số hình mình họa cho thủ thuật:

Hình minh họa cho yêu cầu

Hình mình đã test trên blog

A. Đầu tiên đê thực hiện thủ thuật, bạn phải thay đổi 1 số cài đặt như bên dưới
- Vào phần cài đặt
- Chọn mục nhận xét
- Kéo xuống dưới phần "Định dấu thời gian của các nhận xét" và chọn như hình bên dưới
- Lưu lại giá trị cài đặt.

B. Sau đây là các bước thực hiện thủ thuật:
1. Vào bố cục
2. Vào chỉnh sửa code HTML
3. Chọn mở rộng mẫu tiện ích
4. Tìm đến đoạn code CSS như bên dưới :
#comments dl dt {
...
...
}
5. Thay thế và thêm mới bằng đoạn code CSS bên dưới:
#comments dl dt {
font-weight: bold;
margin-top: 0;
padding-left: 4px;
}
#comments dl dt span.cmlink {font-weight:normal!important;}
#comments dl dt p
{font-size:85%;font-weight:normal!important;padding: 0; margin: 0;}

/* Modify Comment layout */

#comments-block.avatar-comment-indent {margin-left:0px!important;}
.comment-items {
background:#efefef;
border:1px solid #c3c3c3;
margin-bottom:5px;
padding:5px;
}
.comment-items-info {padding-left: 45px;}
.avatar-image-container {
position:none!important;
left:12px!important;
}
.comment-items-body {
margin-top: 20px;
position: relative;
background: white;
border: 1px solid #C3C3C3;
padding:3px 7px;
}
.comment-items-body .triangle {
width: 19px;
height: 18px;
display: block;
position: absolute;
left: 50px;
top: -18px;
background: url(http://data.fandung.com/img/fd-cm_triangle.gif);
}

.avatar-image-container img{width:40px;height:40px;padding:1px;}

/* END Modify Comment Layout */

- Chú ý : nếu blog của bạn nào ko có đoạn code ở bước 4 thì vẫn thêm đoạn code ở bước 5 như bình thường, vị trí thêm bạn có thể đặt nó trước đoạn code bên dưới :
.deleted-comment {
font-style:italic;
color:gray;
}
6. Tiếp tục tìm trong code template đoạn code như bên dưới :
<div expr:class='data:post.postAuthorClass' expr:id='data:widget.instanceId + "_comments-block-wrapper"'>

<dl expr:class='data:post.avatarIndentClass' id='comments-block'>
<b:loop values='data:post.comments' var='comment'>

<dt expr:class='"comment-author " + data:comment.authorClass' expr:id='data:comment.anchorName'>
...
...
...
</dt>

<dd expr:class='"comment-body " + data:comment.commentAuthorClass' expr:id='data:widget.instanceId + data:comment.cmtBodyIdPostfix'>
...
...
...
</dd>

<dd class='comment-footer'>
...
...
...
</dd>

</b:loop>
</dl>

</div>
7. Thay tất cả chúng bằng code bên dưới :
<div expr:class='data:post.postAuthorClass' expr:id='data:widget.instanceId + "_comments-block-wrapper"'>

<dl expr:class='data:post.avatarIndentClass' id='comments-block'>
<b:loop values='data:post.comments' var='comment'>

<div class='comment-items'>

<b:if cond='data:blog.enabledCommentProfileImages'>
<data:comment.authorAvatarImage/>
</b:if>

<div class='comment-items-info'>

<dt expr:class='"comment-author " + 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:comment.authorUrl'>
<a expr:href='data:comment.authorUrl' rel='nofollow'><data:comment.author/></a>
<b:else/>
<data:comment.author/>
</b:if>
<span class='cmlink'>
( <a expr:href='data:comment.url' title='comment permalink'> <img src='http://data.fandung.com/img/fd-link-icon.png'/> </a><b:include data='comment' name='commentDeleteIcon'/> )
</span>
<p><data:comment.timestamp/></p>
</dt>

</div> <!-- END comment-items-info -->

<div class='comment-items-body'>
<span class='triangle'/>
<dd expr:class='"comment-body " + data:comment.commentAuthorClass' expr:id='data:widget.instanceId + data:comment.cmtBodyIdPostfix'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'><data:comment.body/></span>
<b:else/>
<p>
<data:comment.body/>
<span class='interaction-iframe-guide'/>
</p>
</b:if>
</dd>

</div>

</div> <!-- END DIV comment-items -->

</b:loop>
</dl>

</div>
8. Save Template.
Update : Tạo ảnh nền riêng biệt cho comment của ADMIN

Hình ảnh minh họa:

Để update, các bạn thực hiện các bước như bên dưới:
1. Thêm code CSS vào code ở bước 5:
.comment-items-body-admin{
margin-top: 20px;
position: relative;
padding:3px 7px;
background: #d3f0f8;
border: 1px solid #98ccda!important;
}

.comment-items-body-admin .triangle {
width: 19px;
height: 18px;
display: block;
position: absolute;
left: 50px;
top: -18px;
background: url(http://data.fandung.com/img/fd-cm_triangle-admin.gif);
}
2. Tìm code như bên dưới ở bước 7:
<div class='comment-items-body'>
<span class='triangle'/>

<dd expr:class='"comment-body " + data:comment.commentAuthorClass' expr:id='data:widget.instanceId + data:comment.cmtBodyIdPostfix'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'><data:comment.body/></span>
<b:else/>
<p>
<data:comment.body/>
<span class='interaction-iframe-guide'/>
</p>
</b:if>
</dd>

</div>
3. Thay nó bằng code bên dưới:
<b:if cond='data:comment.authorUrl == "http://www.blogger.com/profile/04749296400753058357"'>
<div class='comment-items-body-admin'>
<span class='triangle'/>

<dd expr:class='"comment-body " + data:comment.commentAuthorClass' expr:id='data:widget.instanceId + data:comment.cmtBodyIdPostfix'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'><data:comment.body/></span>
<b:else/>
<p>
<data:comment.body/>
<span class='interaction-iframe-guide'/>
</p>
</b:if>
</dd>
</div>

<b:else/>

<div class='comment-items-body'>
<span class='triangle'/>

<dd expr:class='"comment-body " + data:comment.commentAuthorClass' expr:id='data:widget.instanceId + data:comment.cmtBodyIdPostfix'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'><data:comment.body/></span>
<b:else/>
<p>
<data:comment.body/>
<span class='interaction-iframe-guide'/>
</p>
</b:if>
</dd>
</div>

</b:if>
- Ở code này, ta sẽ thấy 1 dãy số 04749296400753058357 , đây là số ID Profile của các bạn, thay nó bằng mã ID của bạn.

4. Save template.

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

Chủ Nhật, 5 tháng 6, 2011

Modify Form Comment : Bài 14 - Media Comment cho blogspot

Mấy bữa nay do bận làm web cho người quen (làm bằng joomla thôi :D) nên mình OFF blog vài bữa, nay xả hởi xíu, dành chút thời gian cho blog. Hôm nay mình sẽ giới thiệu với các bạn cách nâng cấp comment cho blog. Hay nói các khác, giúp cho mình có thể post các dữ liệu media lên blog, ví dụ như : hình ảnh, film, nhạc ...

Thủ thuật này thực ra cũng đã được biết từ lâu với việc chèn bộ ảnh vui nhộn của yahoo vào comment. Do blogspot hạn chế dùng các thẻ HTML trong phần comment, nên chúng ta phải dùng các kí tự cho phép để thay thế các thẻ HTML. Ở bài này ta dùng nhiều đến các kí tự [] để thay thế. Nó gần giống như các thẻ BBcode trong forum.

Thủ thuật này còn có 1 hạn chế (cũng có thể đây là lý do mà ít người dùng nó) đó là khi ta dùng các thẻ thay thế này, trong comment của các bài viết thì sẽ hiển thị được, nhưng ở các tiện ích Recent comment thì nó sẽ hiện ra 1 mớ code lộn xộn, đọc vô sẽ rất khó hiểu. Khắc phục vấn đề này cũng không quá khó, ta có thể loại bỏ các thẻ thay thế này để trả về nội dung dễ hiểu nhất. Mình sẽ hướng dẫn thủ thuật này sau.

Hình ảnh minh họa:

TEST trực tiếp tại đây : http://demo.fandung.com/2011/06/media-comment-for-blogspot.html

A. Sau đây là 1 số tính năng được thêm vào:
1. Cỡ chữ (size) [si]:
- cấu trúc thẻ như bên dưới:
[si="{kích thước chữ}"]{TEXT}[/si]
- Kích thước chữ : ví dụ như 12px, hay 3em ...

2. Màu chữ (color) [co]:
- cấu trúc thẻ như bên dưới:
[co="{mã màu}"]{TEXT}[/co]
- Mã màu : ví dụ như màu đỏ là #f00 hay red ...

3. Canh giữa văn bản (center) [ce]:
- cấu trúc thẻ như bên dưới:
[ce]{TEXT}[/ce]

4. Chạy chữ - mặc đinh là qua trái (marquee) [mar]:
- cấu trúc thẻ như bên dưới:
[mar]{TEXT}[/mar]

5. Chạy chữ - qua phải [mar+]:
- cấu trúc thẻ như bên dưới:
[mar+]{TEXT}[/mar+]

6. Chèn ảnh vào comment [img]:
- cấu trúc thẻ như bên dưới:
[img]{link ảnh}[/img]

7. Chèn video YouTube vào comment [youtube]:
- cấu trúc thẻ như bên dưới:
[youtube]{mã video}[/youtube]
- Ở đây mình đã mặc định kích thước của video là width='350'height='229', để thay đổi nó bạn có thể tùy chỉnh kích thước của nó ở trong đoạn code javascript mà mình sẽ giới thiệu ở bên dưới.
- Mã video là gì??? ví dụ ta có link youtube như sau : http://www.youtube.com/watch?v=7IM5x3bD5Vg thì giá trị 7IM5x3bD5Vg chính là mã video.
- và như thế ta sẽ có thẻ youtube như sau :
[youtube]7IM5x3bD5Vg[/youtube]

8. Nhúng nhạc từ trang mp3.zing.vn [zmp3]
- cấu trúc thẻ như bên dưới:
[zmp3]{Mã nhúng vào forum được cung cấp từ trang mp3.zing.vn}[/zmp3]
- Ví dụ ta có 1 đoạn mã nhúng vào forum từ trang mp3.zing.vn như bên dưới:
[FLASH]http://static.mp3.zing.vn/skins/mp3_main/flash/player/mp3Player_skin1.swf?xmlurl=http://mp3.zing.vn/blog?MjAxMS8wNS8zMC81LzMvInagaMENTNhMTI1Y2VmMjMzYjQyY2IyODkwY2RkMjU4OTMwNTMdUngWeBXAzfFThdUng4ldUngaCBN4WeBdUngZWeBmd8RMawxqFdUngZyBUmUsICmnhdUng4d1IFWeBFqXx8Mg[/FLASH]
- các bạn chỉ cần thay thẻ [FLASH] thành [zmp3] là có thể hiển thị được trong nội dung comment.

9. Nhúng video từ trang clip.vn [clipvn]
- cấu trúc thẻ như bên dưới:
[clipvn]{Mã nhúng vào forum được cung cấp từ trang clip.vn}[/clipvn]
- Ví dụ ta có 1 đoạn mã nhúng vào forum từ trang clip.vn như bên dưới:
[Flash]http://clip.vn/w/DxnK[/Flash]
- các bạn chỉ cần thay thẻ [FLASH] thành [clipvn] là có thể hiển thị được trong nội dung comment.

10. Nhúng các file flash vào comment [flash]
- cấu trúc thẻ như bên dưới:
[flash]{link file flash}[/flash]
- ở đây mình đã mặc định kích thước cho vùng hiển thi flash (width='400'height='350') các bạn có thể tùy chỉnh lại trong code javascript.
- ví dụ ta code 1 file flash như sau : http://imgfree.21cn.com/free/flash/61.swf và chèn vào comment sẽ như sau:
[flash]http://imgfree.21cn.com/free/flash/61.swf[/flash]

11. Như vậy mình đã giới thiệu 1 số thẻ thông dụng để chèn vào blog, tuy nhiên sẽ xuất hiện 1 số trường hợp như : nếu ta chèn ảnh vào comment, ví dụ như thẻ [img] ở trên. Nếu ảnh có kích thước lớn hơn vùng hiển thị nội dung comment thì sao? hay muốn chèn 1 số thẻ HTML khác thì sao? sau đây mình sẽ hướng dẫn tiếp dùng cách chèn 1 đoạn HTML vào comment để cho nó hiển thị.
- Ví dụ ta có đoạn code HTML:
<img src="link ảnh" width="400" height="300" />

Khi muốn chèn vào comment, bạn chỉ việc thay thế các kí tự <> thành [[]]. Ví dụ như :
[[img src="link ảnh" width="400" height="300" /]]

- Nếu như bạn ko thích dùng chuỗi [[ để thay thế thì có thể đổi lại trong code javascript.
- Cách này xem ra có vẻ hơi lâu, nhưng sẽ rất cơ động. Nếu các bạn không muốn thay thế các kí tự trên bằng tay thì có thể copy code vào NotePad rồi dùng lệnh thay thế đồng loạt (Ctrl+H) thì sẽ nhanh hơn nhiều.

B. Sau đây là code của thủ thuật:
- Các bạn chèn đoạn code javascript bên dưới (code 1 hay 2 đều được) vào trong code template (trước thẻ đóng </body>).

Code 1:
<script src='http://data.fandung.com/js/media-comment.js' type='text/javascript'></script>

Code 2:
<script type='text/javascript'>
//<![CDATA[

a=document.getElementById('comments');
if(a){b=a.getElementsByTagName("DD");

for(i=0;i<b.length;i++){
_str=b.item(i).innerHTML.replace(/\[img\]/gi,"<img src=' ");
_str=_str.replace(/\[\/img\]/gi,"' class='image'/>");
_str=_str.replace(/\[\[/gi,"<");
_str=_str.replace(/\]\]/gi,">");
_str=_str.replace(/\[mar\]/gi,"<marquee>");
_str=_str.replace(/\[\/mar\]/gi,"</marquee>");
_str=_str.replace(/\[mar\+\]/gi,"<marquee direction='right'>");
_str=_str.replace(/\[\/mar\+\]/gi,"</marquee>");
_str=_str.replace(/\[si\=\"/gi,"<font size='");
_str=_str.replace(/\[\/si\]/gi,"</font>");
_str=_str.replace(/\[co=\"/gi,"<font color='");
_str=_str.replace(/\[\/co\]/gi,"</font>");
_str=_str.replace(/\"\]/gi,"'>");
_str=_str.replace(/\[ce\]/gi,"<center>");
_str=_str.replace(/\[\/ce\]/gi,"</center>");
_str=_str.replace(/\[youtube\]/gi,"<iframe width='350' height='229' src='http://www.youtube.com/embed/");
_str=_str.replace(/\[\/youtube\]/gi,"' frameborder='0' allowfullscreen></iframe>");
_str=_str.replace(/\[zmp3\]/gi,"<embed width='300' height='61' src='");
_str=_str.replace(/\[\/zmp3\]/gi,"' quality='high' wmode='transparent' type='application/x-shockwave-flash'></embed>");
_str=_str.replace(/\[flash\]/gi,"<embed quality=high width='400' height='350' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' src='");
_str=_str.replace(/\[\/flash\]/gi,"'></embed>");
_str=_str.replace(/\[clipvn\]/gi,"<embed type='application/x-shockwave-flash' allowFullScreen='true' allowScriptAccess='always' width='400' height='320' src='");
_str=_str.replace(/\[\/clipvn\]/gi,"'></embed>");
_str=_str.replace(/:\)\)/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/21.gif' alt='' class='smiley'/>");
_str = _str.replace(/:\)\]/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/100.gif' alt='' class='smiley'/>");
_str = _str.replace(/;\)\)/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/71.gif' alt='' class='smiley'/>");
_str = _str.replace(/;\;\)/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/5.gif' alt='' class='smiley'/>");
_str = _str.replace(/:d/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/4.gif' alt='' class='smiley'/>");
_str = _str.replace(/\;\)/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/3.gif' alt='' class='smiley'/>");
_str = _str.replace(/:p/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/10.gif' alt='' class='smiley'/>");
_str = _str.replace(/:\(\(/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/20.gif' alt='' class='smiley'/>");
_str = _str.replace(/:\)/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/1.gif' alt='' class='smiley'/>");
_str = _str.replace(/:\(/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/2.gif' alt='' class='smiley'/>");
_str = _str.replace(/:x/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/8.gif' alt='' class='smiley'/>");
_str = _str.replace(/=\(\(/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/12.gif' alt='' class='smiley'/>");
_str = _str.replace(/:\-\o/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/13.gif' alt='' class='smiley'/>");
_str = _str.replace(/:-\//gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/7.gif' alt='' class='smiley'/>");
_str = _str.replace(/:-\*/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/11.gif' alt='' class='smiley'/>");
_str = _str.replace(/:\|/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/22.gif' alt='' class='smiley'/>");
_str = _str.replace(/8-\}/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/35.gif' alt='' class='smiley'/>");
_str = _str.replace(/~x\(/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/102.gif' alt='' class='smiley'/>");
_str = _str.replace(/:-t/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/104.gif' alt='' class='smiley'/>");
_str = _str.replace(/b-\(/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/66.gif' alt='' class='smiley'/>");
_str = _str.replace(/:-\L/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/62.gif' alt='' class='smiley'/>");
_str = _str.replace(/x\(/gi, "<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/14.gif' alt='' class='smiley'/>");
_str = _str.replace(/\=\)\)/ig,"<img src='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/24.gif' alt='' class='smiley'/>");

b.item(i).innerHTML=_str}}
//]]>
</script>

- Save template lại.

Như vậy đã hoàn thành. Chúc các bạn thành công.

Thứ Sáu, 8 tháng 10, 2010

Phân trang cho trang chủ

Như các bạn đã biết, hiện tại có 1 vài tiện ích phân trang cho blogspot, nhưng các tiện ích này có 1 nhược điểm là dễ bị mất bài viết. Hôm nay mình sẽ giới thiệu cho các bạn 1 cách phân trang khác. Phân trang này khác hòan tòan với bản cũ, đó là mình dùng feed để hiển thị và phân trang. Với cách này bạn có thể tự do tùy chỉnh giao diện hiển thị các bài viết ngòai trang chủ. Cách này cũng có thể thay thế cho các trang nhãn có sẵn của blog.

Và đây là các bước cho các bạn dễ hình dung:
a – đầu tiên ta sẽ ẩn bài viết ngòai trang chủ.
b – sau đó tạo 1 widget recent posts và cho nó hiển thị vào chỗ mà bài viết đã bị ẩn.
c – và cuối cùng là tùy chỉnh cho widget chỉ hiển thị ở trang chủ.
- như vậy tòan bộ các trang được phân sẽ chỉ hiển thị trên 1 trang, và nội dung hiển thị sẽ thay đổi tùy vào link liên kết.
- thủ thuật này xây dựng nên từ thủ thuật mà mình đã giới thiệu nhưng chưa post bài hướng dẫn cho mọi người.

Xem DEMO - các bạn có thể xem trực tiếp trên blog của mình.

* Sau đây là các bước thực hiện :
1. đầu tiên các bạn sẽ ẩn bài viết ở trang chủ :
- nếu các bạn dùng CSS để ẩn widget chứa bài viết (Blog1) thì nó chỉ ẩn và sẽ vẫn load bài viết, vì thế mình sẽ dùng kết hợp 2 cách, ẩn widget Blog1 và ẩn nội dung bài viết ở trang chủ.
- vào bố cục
- vào chỉnh sửa code HTML
- chọn mở rộng mẫu tiện ích
- đầu tiên sẽ là ẩn widget Blog1 ở trang chủ : các bạn chèn đọan code này vào trước thẻ đóng </head>
<style type='text/css'>
<b:if cond='data:blog.url == data:blog.homepageUrl'>
#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 != data:blog.homepageUrl'>
...
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>
- save template.
2. và bước 2 là tạo 1 widget HTML/javascript. vị trí của widget này sẽ nằm bên trên widget Blog1 hoặc ngay bên dưới.
- và đây là code của thủ thuật :
<style type="text/css">
.clear {clear: both;}
.home-navi {width:540px;color:#000}
.home-navi h2 {border-bottom:1px solid #ccc;padding-bottom:3px;margin-bottom:5px;}
.home-navi h2 a {text-decoration:none;color:#444;}
.home-navi p {color:#888;}
.home-navi p span {color:#000}
.cat_tags {background:#FFF url(http://data.fandung.com/blog/demo/home-navi/tags_category.png) no-repeat;width:540px;}
.cat_tags_close {background:#FFF url(http://data.fandung.com/blog/demo/home-navi/tags_category.png) 0 -81px no-repeat;width:548px;}
.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:400px;}
.cat_tags .category a {color:#}
.cat_tags a {color:#999;}
.cat_tags .continue a {color:#2C2C29;text-decoration:none;}
.cat_tags .continue a:hover {color:#f50;text-decoration:underline;font-weight:bold;}

#page-rc-tooltip {font-weight:bold; padding-top:15px;}
#page-rc-tooltip a {text-decoration:none; border:1px solid #ccc; padding:2px 5px;background:#fff;}
#page-rc-tooltip a:hover {color:#f00;background:#eee;}
#page-rc-tooltip span {border:1px solid #ccc; padding:2px 5px;background:#fff;}
#page-rc-tooltip span.currentpage {background:#ddd;}

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

</style>
<script type='text/javascript'>
//<![CDATA[
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;

}

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/AVvXsEhTmPvMUvfVm5r59qTxHT-QMjUDYUq5SInqaF86etyMRxmj9lQSiZPVbVGAGZQtI-aL-JX9xDV_QQU890p_OjHXkszGdCD5WEJ62MCNyT9c4uLaNxh0Tm_7lVcw512hArrl5odgRfkl7TQ/s400/noimage.png";}

if (pcm==0) {var comment = " No Comment ";}
else {var comment = " "+ pcm + " Comments ";}

var td1 = '<div class="home-navi"><h2><a href="'+posturl+'">'+posttitle+'</a></h2><p style="font-size:90%;"><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]+'" />'+removeHtmlTag(postcontent,500)+' ...</p> <div class="cat_tags clear"><span class="category">Label : '+plabel+'</span><span class="continue"><a href="'+posturl+'">Read more...</a></span><div class="clear"></div></div><div class="cat_tags_close"></div></div>';

document.write(td1);
}
}

//page 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");
if (page==undefined) { page = "1"; }

// 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?alt=json-in-script&callback=numberOfPosts\"><\/script>');

//]]>
</script>

<script type='text/javascript'>
var rcpage = new Array();
var numposts = 5; // số bài viết hiển thịt trên 1 trang
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?start-index="+start+"&max-results="+numposts+"&orderby=published&alt=json-in-script&callback=showrecentposts\"><\/script>";
}
if ((page>numpage)&&(page<numpage+1)) {
var numposts=lastnum;
start = totalPosts-lastnum+1;
document.write("<script src=\"http://www.fandung.com/feeds/posts/default?start-index="+start+"&max-results="+numposts+"&orderby=published&alt=json-in-script&callback=showrecentposts\"><\/script>");
}
else if (page>numpage){document.write("<div style=\"width:450px;color:#f00;font-weight:bold;padding:10px; border:1px #ccc solid;\">This page does not exist. Please check link again<\/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://data.fandung.com/blog/demo/home-navi/index.html?page="+n+"\">"+n+"<\/a>";}
document.write(navpage);
}
document.write(" | "+totalPosts+" posts<\/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://data.fandung.com/blog/demo/home-navi/index.html?page="+n+"\">"+n+"<\/a>";}
document.write(navpage);
}
if (parseInt(pagelist)>5) { document.write("... <a href=\"http://data.fandung.com/blog/demo/home-navi/index.html?page="+parseInt(pagelist)+"\">Last<\/a> | "+totalPosts+" posts<\/div>"); } else {document.write(" | "+totalPosts+" posts<\/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://data.fandung.com/blog/demo/home-navi/index.html?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://data.fandung.com/blog/demo/home-navi/index.html?page="+n+"\">"+n+"<\/a>";}
document.write(navpage);
}
document.write("... <a href=\"http://data.fandung.com/blog/demo/home-navi/index.html?page="+parseInt(pagelist)+"\">Last<\/a> | "+totalPosts+" posts<\/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://data.fandung.com/blog/demo/home-navi/index.html?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://data.fandung.com/blog/demo/home-navi/index.html?page="+n+"\">"+n+"<\/a>";}
document.write(navpage);
}
document.write(" | "+totalPosts+" posts<\/div>");
}
}
</script>
- thay www.fandung.com thành tên miền của blog bạn, ví dụ blogA.blogspot.com
- thay link http://data.fandung.com/blog/demo/home-navi/index.html thành URL blog của bạn, ví dụ http://blogA.blogspot.com/
- muốn tùy chỉnh việc hiển thị số bài viết trên blog các bạn chỉ việc thay lại giá trị của biến numposts.

3. cuối cùng là set cho widget này chỉ được hiển thị ngòai trang chủ.
- đầu tiên vào phần phần tử trang , nhấp chọn vào nút edit widget mới tạo để xem ID của nó, như hình bên dưới :
home-navigation2 | fandung.com
- ví dụ như trong hình ta có ID là HTML2, và bây giờ ta vào code template, nhớ chọn “Mở rộng mẫu tiện ích” và ta sẽ tìm đọan code như  bên dưới :
home-navi3 | fandung.com
- và thêm code như  bên dưới (code highlight):

home-navi4 | fandung.com
- cuối cùng là save template.

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

Thứ Tư, 22 tháng 9, 2010

Hướng dẫn tạo 1 PAGE cho blogspot

[FD BlOg] - Như các bạn đã biết, muốn tạo thêm 1 page cho blogspot ta chỉ có 1 cách duy nhất là tạo thêm 1 bài viết mới. Và lợi dụng điều này, và áp dụng các thủ thuật cũ đã đăng, hôm nay mình sẽ hướng dẫn 1 cách nhỏ để tạo thêm 1 page cho blogspot của bạn. Với thủ thuật này blog bạn sẽ ngày càng giống 1 weblog hơn.

Các bạn có thể xem thử demo minh họa ở đây : http://www.fandung.com/2009/02/contact-me.html


Mô tả chung thủ thuật : thủ thuật này lợi dụng việc tạo thêm 1 bài viết mới để lấy link liên kết cho trang page mà bạn sẽ tạo. Tức là khi xuất bản bài viết mới, ta không cần quan tâm tới nội dung của bài viết này, có thể bạn không cần soạn nội dung của nó cũng đc, ko sao cả. Khi đã có được link, bây giờ ta sẽ tạo 1 widget HTML/Javascript, và soạn nội dung của page vào đó. Tiếp đến ta dùng thủ thuật ẩn bài viết khi truy cập tới link liên kết này, và thêm 1 thủ thuật nữa là chỉ cho phép widget vừa tạo hiển thị khi truy cập tới link liên kết trên.

Như vậy ở thủ thuật này sẽ có 3 bước :
- Bước 1: tạo 1 trang bài viết để lấy link cho page.
- Bước 2: tạo 1 widget HTML/Javascript, và dán nội dung của trang page sẽ được tạo vào.
- Bước 3: tùy chỉnh việc hiển thị bài viết và widget HTML/Javascript.

☼ Bây giờ ta sẽ đi vào từng bước:
I. Bước 1 : tạo 1 trang bài viết để lấy link cho page.
- Vào phần soạn thảo bài viết mới và tạo 1 trang bài viết mới. với nội dung của bài viết để trống, nhãn cũng được để trống, chỉ duy nhất có phần tiêu đề.
- Mẹo : để link của trang page được đẹp, ta nên đặt tên của tiêu đề bài viết này là không dấu, ví dụ như hình minh họa :

- Ví dụ như với tiêu đề của mình minh họa trên ta sẽ có link liên kết của trang page như thế này :
http://www.fandung.com/2009/02/contact-me.html
- Và thêm 1 mẹo thứ 2 ở bước 1 này là : nên chỉnh sửa lại ngày đăng bài viết, để cho bài viết được nằm ở cuối của danh sách các bài đăng. Ví dụ như blog bạn tạo ngày 20/4/2008 thì ta chỉnh lại ngày đăng cho bài viết nằm trong ngày này chẳng hạn. Với mẹo này sẽ làm việc hiển thị bài viết ở trang chủ trở nên khó hơn.


II. Bước 2 : Tạo 1 widget HTML/Javascript và dán nội dung của trang mà bạn muốn tạo.
- Với việc này, bạn sẽ phải soạn thảo code HTML cho trang page ngay trên widget. Code để tạo nên trang này nhất thiết phải là code HTML, ngoài ra có thể kèm theo các code CSS, code Javascript để trang được tạo sẽ đẹp hơn. Việc này tương tự như các thủ thuật khác.


- Lưu ý : widget này phải nằm ở vị trí bên trên (hoặc dưới) phần "Bài đăng trên blog", tức là nó nằm ở cột Main. Như hình minh họa bên dưới:

- Như vậy đã xong bước 2, tiếp tục sang bước 3.

III. Bước 3 : ẩn bài viết và tùy chỉnh việc hiển thị của widget chứa nội dung của trang page.
- Ở bước 3 này ta sẽ có 2 bước nhỏ phải làm : ẩn bài viết khi truy cập tới link liên kết của trang page, và tùy chỉnh để widget chỉ hiển thị khi bạn truy cập tới link liên kết của trang page.

+ b1 : ẩn bài viết khi truy cập tới link liên kết của trang page.

Với bước này, ta sẽ ẩn hoàn toàn phần bài viết và chỉ cho phép hiển thị widget (và các phần còn lại của blog). Khi đó widget hiển thị chính là trang page mà bạn muốn tạo.
Để thực hiện điều này rất đơn giản, bạn chỉ cần thực hiện các bước như bên dưới :
1. Vào bố cục
2. vào chỉnh sửa code HTML
3. Chèn đoạn code CSS bên dưới vào trước dòng code </head>

<style type="text/css">
<b:if cond='data:blog.url == &quot;http://www.fandung.com/2009/02/contact-me.html&quot;'>
#Blog1 {display:none;}
</b:if>
</style>

- Với link màu xanh sẽ là link liên kết của bài viết mà bạn đã tạo để gán cho trang page.
4. Save template.

+ b2: chỉ cho phép widget chứa nội dung hiển thị khi bạn truy cập tới đúng link liên kết của trang page (ví dụ như trong code mẫu sẽ là link : http://www.fandung.com/2009/02/contact-me.html )

Với bước này, trước tiên bạn phải xác định ID của widget chứa nội dung của trang page. Để biết được ID, thực hiện các bước sau :
1. vào phần tử trang
2. Nhấp chọn chỉnh sửa ở widget chứa nội dung của trang page.
3. Và ta sẽ thấy được ID của nó như bên dưới :

- Trong hình minh họa ta thấy ID của nó là HTML8
- Bây giờ ta sang bước chính là chỉ cho widget này hiển thị khi ta truy cập tới link của trang page. Để làm điều này, các bạn thực hiện các bước như bên dưới :
1. Vào bố cục
2. Vào chỉnh sửa code HTML
3. Chọn mở rộng mẫu tiện ích.
4. Tìm đoạn code của widget chứa nội dung của trang page (nhấn Ctrl + F và điền ID của widget vào là có thể tìm thấy Code của nó)

Và code của nó tương tự như thế này :

<b:widget id='HTML8' locked='false' title='Form contact' type='HTML'>
<b:includable id='main'>
<!-- only display title if it's non-empty -->
<b:if cond='data:title != &quot;&quot;'>
<h2 class='title'><data:title/></h2>
</b:if>
<div class='widget-content'>
<data:content/>
</div>

<b:include name='quickedit'/>
</b:includable>
</b:widget>

5. Thêm đoạn code được đánh dấu highlight như bên dưới :

<b:widget id='HTML8' locked='false' title='Form contact' type='HTML'>
<b:includable id='main'>

<b:if cond='data:blog.url == &quot;http://www.fandung.com/2009/02/contact-me.html&quot;'>

<!-- only display title if it's non-empty -->
<b:if cond='data:title != &quot;&quot;'>
<h2 class='title'><data:title/></h2>
</b:if>
<div class='widget-content'>
<data:content/>
</div>

<b:include name='quickedit'/>
</b:if>
</b:includable>
</b:widget>

- Thay link (code màu đỏ) lại thành link liên kết tương ứng với trang page của bạn.

6. Save template.

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

Thứ Ba, 27 tháng 4, 2010

Làm nổi bật cho bài viết đầu tiên

Hôm nay mình sẽ giới thiệu cho các bạn cách làm nổi bật bài viết đầu tiên. Mình sẽ giới thiệu 2 cách : cách dùng jQuery và không dùng jQuery. 2 cách đều có điểm chung là thêm code CSS cho bài viết đầu tiên để nó khác với các bài khác, và điểm khác biệt giữa 2 cách là 1 cái phức tạp, nặng nề hơn, còn 1 cách thì dễ hiểu, đơn giản hơn. Tuy vậy mình vẫn sẽ giới thiệu cho các bạn cả 2 cách, để các bạn có thêm nhiều thông tin, kiến thức hơn.


Xem demo trên blogspot : DEMO

Hình ảnh minh họa:
lastest post - mothuthuat.com

A. Cách 1 : dùng Jquery
1. Vào bố cục
2. Vào chỉnh sửa code HTML
3. Chèn đọan code CSS bên dưới vào trước dòng code ]]></b:skin>
.post.first {
background:#efefef url(http://data.fandung.com/img/lastest-post.png) no-repeat top right;
padding:10px;
border:1px solid #ddd;
}
4. Tiếp tục chèn đọan code bên dưới vào trước thẻ đóng </head>
<script src='http://data.fandung.com/blog/demo/jquery-lightbox/js/jquery.js' type='text/javascript'/>
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<script type='text/javascript'>
$(document).ready(function(){
$(".post:first").addClas<script src='http://data.fandung.com/blog/demo/jquery-lightbox/js/jquery.js' type='text/javascript'/>
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<script type='text/javascript'>
$(document).ready(function(){
$(".post:first").addClass("first");
});
</script>
</b:if>s("first");
});
</script>
</b:if>
Ở đây mình có sử dụng điều kiện b:if để thủ thuật chỉ hiển thị ở ngòai trang chủ, nếu như không có lệnh này, thì khi mở ở trang bất kì nào như : bài viết, trang archive, label … thì bài viết đầu tiên đều được làm nổi bật.

5. Sau cùng là save template lại.

B. Cách 2 : Không dùng jQuery (update)
- Cách này mình sẽ chính lệnh b:if của blogger để chọn bài viết đầu tiên.
- Sau đây là cách thực hiện:

a. Vào bố cục > chỉnh sửa code HTML > nhấp chọn mở rộng mẫu tiện ích. tìm đoạn code này:
<b:include data='post' name='post'/>

b. Thay thế nó bằng đoạn code bên dưới :
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<b:if cond='data:post.isFirstPost == "true"'>
<div id='first-post'>
<b:include data='post' name='post'/>
</div>
<b:else/>
<b:include data='post' name='post'/>
</b:if>
<b:else/>
<b:include data='post' name='post'/>
</b:if>
- Với đoạn code trên ta đã dùng div với id là first-post để bao bài viết đầu tiên lại. Nhưng nếu làm tới đây thì ta sẽ chưa thấy được gì, muốn bài viết đầu tiên khác với các bài còn lại thì ta phải thêm code CSS cho nó.
- Code CSS các bạn thêm vào trong code template, trước dòng code ]]></b:skin>, ví dụ như code mẫu bên dưới:
#first-post {
background:#efefef url(http://data.fandung.com/img/lastest-post.png) no-repeat top right;
padding:10px;
border:1px solid #ddd;
}

c. save template lại.

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

Repost from mothuthuat.com
Update from duypham.info

Thứ Sáu, 2 tháng 10, 2009

Hiển thị widget khi xem các bài viết của 1 nhãn nhất định

Bài viết hôm nay mình sẽ giới thiệu cho các bạn việc tùy chỉnh để 1 widget nào đó chỉ được phép hiển thị khi bạn vào xem 1 bài viết của 1 nhãn nào đó. Đây là 1 thủ thuật mà có một số bạn đã có nhờ mình, nhưng khi đó mình chưa trả lời được, nên bây giờ mới cho "ra lò". Mở rộng thủ thuật này ra ta có thể áp dụng cho tác giả của bài viết. Ví dụ tác giả A sẽ hiển thị widget A...


Hình ảnh minh họa :

Khi xem ở 1 trang bài viết
(ở hình minh họa là bài viết thuộc nhãn Love)

Khi xem ở trang chủ


Thủ thuật : các tiện ích được chọn sẽ mặc định được ẩn đi, khi bạn vào xem 1 bài viết nào đó, nếu lệnh lặp nhãn (Label) tìm thấy nhãn đã chỉ định thì tiện ích sẽ được hiển thị.

☼ Các bước thực hiện :
1. Xác định ID của widget cần thực hiện. (các bạn có thể tham khảo cách xem ID ở bài viết này : http://www.fandung.com/2009/09/huong-dan-tao-1-page-cho-blogspot.html)

2.
Sau khi đã xác định được ID của widget cần thực hiện, các bạn làm tiếp theo các bước bên dưới :

a. vào bố cục
b. vào chỉnh sửa code HTML
c. chọn mở rộng mẫu tiện ích
d. chèn đoạn code CSS bên dưới vào trước thẻ đóng </head>

<style type='text/css'>
#HTML3 {display:none;}
</style>

- Với HTML3ID của widget cần thực hiện.
e. tiếp tục tìm đoạn code tương tự như thế này :

<span class='post-labels'>
<b:if cond='data:post.labels'>
<data:postLabelsLabel/>
<b:loop values='data:post.labels' var='label'>
<a expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='data:label.isLast != &quot;true&quot;'>,</b:if>
</b:loop>
</b:if>
</span>

f. và thêm đoạn code được đánh dấu highlight như bên dưới :

<span class='post-labels'>
<b:if cond='data:post.labels'>
<data:postLabelsLabel/>
<b:loop values='data:post.labels' var='label'>
<a expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='data:label.isLast != &quot;true&quot;'>,</b:if>

<b:if cond='data:blog.pageType == &quot;item&quot;'>
<b:if cond='data:label.name == &quot;love&quot;'>
<style type='text/css'>
#HTML3 {display:block;}
</style>
</b:if>
</b:if>


</b:loop>
</b:if>
</span>
- Với love : chính là nhãn của bài viết muốn hiển thị widget
- HTML3 : là ID của widget.
- Code màu đỏ ở trên chính là để loại bỏ các trang có chứa nhãn muốn thực hiện. Ví dụ như trang chủ, trang archive hoặc trang label có các bài viết có nhãn muốn thực hiện, nếu không có lệnh này thì tiện ích vẫn sẽ hiển thị. Do khi bạn xem các trang này thì các nhãn đã được quét, chỉ cần thấy nhãn muốn thực hiện thì tiện ích sẽ hiển thị ngay.

g. Save template.

* Lưu ý :
- Khuyết điểm của thủ thuật này là cho dù tiện ích được ẩn nhưng nó vẫn sẽ được load, chỉ khi bạn tác động trực tiếp vào trong code của widget thì nó mới không load, còn dùng lệnh display:none; thì nó sẽ vẫn load nhưng chỉ không hiển thị mà thôi.
- Điều thứ 2 nữa là khi dùng cách này thì tiện ích sẽ không hiển thị trong phần Bố cục -> Phần tử trang Bảng điều khiển, chính vì thế nếu muốn chỉnh sửa nội dung của nó, bạn phải thực hiển điều này ngay trên giao diện của blog.

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

Thứ Bảy, 19 tháng 9, 2009

Hướng dẫn hiển thị avatar cho comment của Blogger (mở rộng)

[FD BlOg] - Như chúng ta đã biết Blogger đang chuẩn bị kỉ niệm 10 năm ngày blogger ra đời, chính vì thế mà gần đây blogger liên tục tung ra những tiện ích mới cho blogspot. Mới đây nhất là tiện ích hiển thị ảnh avatar cho comment từ các ảnh profile của các tài khoản từ blogger.


Việc hiển thị ảnh avatar này sẽ chỉ cập nhật cho các blog mới được tạo, các blog đã được tạo từ lâu, và qua chỉnh sửa template nhiều (như blog của mình) thì muốn hiển thị avatar cho comment thì các bạn phải chỉnh sửa đôi chút trong code template.


Ở thủ thuật này, ngoài việc chỉnh sửa code để có thể sự dụng chức năng ảnh avatar thì mình còn hướng dẫn thêm cho các bạn tạo avatar mặc định cho comment không có avatar. Do hiện tại tiện ích mà blogger cung cấp chỉ cho phép hiển thị ảnh avatar của các tài khoản blogger, vì thế những comment từ các tài khoảng khác sẽ không hiển thị được ảnh avatar, và avatar mặc định sẽ lấp đầy chỗ thiếu hụt đó.

Và đây là ảnh minh họa avatar cho comment.


☼ Để hiển thi được avatar cho các comment, các bạn thực hiện 2 bước sau:
1. Tùy chỉnh trong phần cài đặt :
- bước này không quan trọng lắm, vì blogger đã mặc định chế độ hiển thị ảnh avatar cho comment rồi, tuy nhiên chúng ta cũng nên kiểm tra lại.
- vào bảng điều khiển
- vào phần cài đặt
- vào phần nhận xét
- ở phần "Hiển thị các hình hồ sơ trên các nhận xét?" nhấp chọn "Có"
- Lưu cài đặt

Ảnh minh họa :


2. Chỉnh sửa trong code template:
- Ở đây mình sẽ dùng 1 cách rất đơn giản để tạo avatar default cho các comment không có avatar, đó chính là việc sử dụng ảnh nền (background), khi các comment có ảnh avatar, ảnh avatar sẽ đè lên hình nền, còn các comment không có avatar thì sẽ hiển thị ảnh nền, và hình nền hiển thị này chính là ảnh avatar thay thế.

☼ Các bước thực hiện :
a. vào phần bố cục
b. vào chỉnh sửa code HTML
c. Chọn mở rộng mẫu tiện ích
d. chèn đoạn code CSS bên dưới vào trước dòng code ]]></b:skin>

.avatar-image-container {
background:url(http://farm3.static.flickr.com/2493/3936605180_5f80a4d847_o.gif); width:35px;
height:35px;
}
.avatar-image-container img { border:none;}

e. Tiếp đến tìm đoạn code sau :

<dl id='comments-block'>

f. và thay thế nó bằng đoạn code bên dưới :

<dl expr:class='data:post.avatarIndentClass' id='comments-block'>

g. tiếp tục tìm đoạn code như bên dưới :

<a expr:name='data:comment.anchorName'/>

h. và thay thế bằng đoạn code bên dưới :

<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'>
<div expr:class='data:comment.avatarContainerClass'>
<data:comment.authorAvatarImage/>
</div>
</b:if>

i. Save template.

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