Thứ Năm, 9 tháng 2, 2012

ANCData - Plugin load feed Blogger version 1

Đây là công cụ đặc biệt, có lẽ rất được nhiều người mong đợi. Công cụ này được mình phát triển khi rip blog. Đôi khi bạn thấy các site của pro (HelloXimo) rip chạy rất nhanh và mượt. Tại sao vậy ? Câu hỏi nằm ở function showrecentposts(json) của js mà nhiều blog vẫn đang dùng. Đây là một hàm lọc feed (hay file .xml) của Blogger. Việc sử dụng feed sẽ đem lại tốc độ cao hơn so với dùng biến có sẵn mà mình đã giới thiệu ở một số bài viết trước.





(ViewSource Demo để xem code)

Nhưng đặc điểm bất tiện của hàm này là với mỗi lần callback showrecentposts trong đoạn script ví dụ sau.



<script src="http://www.maphim.net/feeds/posts/default/-/Phim chiếu rạp?max-results=4&amp;orderby=published&amp;alt=json-in-script&amp;callback=showrecentposts ">
</script>



Ta lại phải đổi tên hàm callback để lấy feed cho một tag mới. Nói khác đi, chúng ta lại phải copy y sì một hàm showrecentposts2, showrecentpost3, showrecentposts4 ...v.vv cho các tag mới.

Vậy, ANCData là gì ? Chắc bạn cũng đoán ra từ VD trên. Nó là một plugin load feed. Nhưng nó chỉ là một hàm callback duy nhất : ancdata. Có vẻ với những ai chưa nghe về load feed sẽ rất khó mường tượng. Nhưng bạn chỉ cần sử dụng ANCData sẽ không cần phải vọc nhiều.


* Thuộc tính. 


title : tiêu đề bài viết.
url : link bài viết.
label: nhãn bài viết.
img: ảnh bài viết
       -  img.f : file ảnh đầu tiên của bài viết kich thươc full khổ.
       -  img.i72: file ảnh mặc định của google nếu bạn up lên, hoặc sử dụng các sản phẩm ảnh của       google.
content: nội dung toàn bộ bài viết.
snippet : nội dung tóm tắt gồm 120 ký tự.
date: ngày tháng năm gửi bài
      - date.d : ngày
      - date.m : tháng
      - date.y : năm

author: tác giả gửi bài viết.


* Sử dụng :

B1: Bạn chỉ cần chèn đoạn mã sau vào sau  thẻ <head> hoặc sau <body>

<script src="http://anhnc.googlecode.com/svn/trunk/ANC/data/feed.js"></script> <script>
            anc.home ="domain của bạn"; //  (mặc định là maphim.net)
            anc.post = sô lượng tối đa ;  // (mặc định là 100)
            anc.img.no = "ảnh hiển thị khi bài viết không có ảnh"; // mặc định là ảnh của maphim.net
</script>

B2: Giờ bạn sẽ sử dụng ANCData một cách dễ dàng.


Giả sử mình muốn tạo ra một module có cấu trúc như hình sau.




Mình chỉ cần viết như sau :

<div class="box">
<h3>Phim hành động mới</h3>
<div class="bcontent">
    <script src="http://www.maphim.net/feeds/posts/default/-/Hành động?max-results=4&amp;orderby=published&amp;alt=json-in-script&amp;callback=ancdata">
    </script>
    <script>
       
        for (var i =0; i< anc.max; i++){
            document.write('<li><a href='+anc.url[i]+'>'+anc.title[i]+'</a></li>');
        }
    </script>
</div>
</div>

Không chỉ dừng ở đó, bạn có thể tạo nhiều tag giống nhau ngoài tag Hành động kể trên, chỉ với một hàm callback duy nhất. Đây chỉ là VD đơn giản sử dụng ANCData, bạn có thể tạo riêng cho mình các modum hợp lý từ các thuộc tính mình đã đưa.

Version 1 chưa áp dụng cho comment. Sẽ tiếp tục phát triển trong các phiên bản sau nếu có thời gian.


Note: Để gọi các biến trong thuộc tính, bạn cần thêm trước anc.thuoctinh
          Muốn lấy một tag trong list tag bạn chỉ cần viết. anc.label.split(',')[vitri tag can lay]

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

Chủ Nhật, 5 tháng 2, 2012

Đưa Radio vào Blog của bạn (Yêu cầu)

Đáp ứng yêu cầu của giáo xứ phú giáo, trong nhưng ngày đầu năm này có lẽ anh Dũng cũng bận cho việc ... Va lung tung .. Không có thời gian chăm sóc blog được. Còn riêng mình cũng tung hoành khắp nơi, bận ăn, bận uống bù hết cả đầu. Đọc thấy yêu cầu này phù hợp với khả năng, giúp bạn một chút chút. ..

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



Style CSS :

<style>
    .radio{padding-top: 5px; border: 1px dashed #cccccc; width: 430px; position: fixed; bottom: 20px; right: 0px;}
    li{list-style:none;float:left; margin-left: 10px; padding: 5px;}
    li:hover{background-color: #494949; box-shadow: 1px 0px 3px;}
    li:active{box-shadow: 2px 1px 3px;}
   
    li.p{margin-left:30px; color: green; box-shadow: 2px 0px 3px 1px;}
    li.p:hover{background:none;}
    li.p span{text-decoration:blink;}
   
    a{text-decoration:none; color: #888888; font-size: 12px;}
    #player{margin-top:20px;}
</style>

Đài của mình..
Maphim.Net | Xem phim Online, xem phim han, phim 47, tron bo

<div class="channel">
    <li><a href="javascript:radio('vov1')">VOV1</a></li>
    <li><a href="javascript:radio('vov2')">VOV2</a></li>
    <li><a href="javascript:radio('vov3')">VOV3</a></li>
    <li><a href="javascript:radio('vov4')">VOV4</a></li>
    <li><a href="javascript:radio('vov5')">VOV5</a></li>
    <li id="pl" class="p"></li>
</div>
    <div id="player">Radio23h - Blog Radio, chia sẻ xúc cảm cuộc sống</div>
</div>

JavaScript

<script>
function radio(channel){
    var data = '<embed width="430" height="24" flashvars="&amp;file='+channel+'.flv&amp;streamer=rtmp://123.30.50.46:8080/live&amp;skin=&amp;autostart=true" allowfullscreen="true" allowscriptaccess="always" quality="high" name="mpl" id="mpl" style="undefined" src="http://player.longtailvideo.com/player5.9.swf" type="application/x-shockwave-flash">';
   
    document.getElementById("player").innerHTML = data;
    document.getElementById("pl").innerHTML = channel+" playing<span>...</span>";
    }
radio('vov3');   
</script>


radio('vov3') ==> là đài mặc định bạn chạy đầu tiên.

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

Thứ Ba, 24 tháng 1, 2012

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

Đầ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 !

Thứ Ba, 3 tháng 1, 2012

[Updated] K14 - Pro Menu (với hiệu ứng prodown)

Lấy ý tưởng từ việc thực hiện demo cho bài viết Tạo Menu Thanh menu ngang có sổ dọc xuống mình dự định sẽ updated thủ thuật lên bằng việc tạo các giao diện khác nhau cho menu khi xem ở các trang khác nhau, ví dụ như các trang label. Nhưng sau đó mình nhớ đến kênh14 cũng có menu như vậy (chỉ khác là không có dropdown) mà giao diện lại đẹp nữa, nên mình quyết định Rip menu này. Và ở bài này menu sẽ không có hiệu ứng dropdown, mình dự định sẽ thêm hiệu ứng dropdown trong thời gian tới.


Xem DEMO

Hình ảnh minh họa :

Updated: Đã cập nhật hiệu ứng sổ dọc cho menu, các bạn có thể xem ở bên dưới

Do làm biếng design giao diện cho nó, nên mình lấy hình nên bên kênh 14 về rồi fix lại để giới thiệu cho mọi người. Và sau đây là 1 số tính năng của nó :
- Tự động thay đổi giao diện của menu cho các trang định sẵn.
- có hiệu ứng trang hiện hành (current) trên menu.
- có 6 kiểu giao diện cho các lựa chọn để thay đổi.

Sau đây là các bước thực hiện :
- Tạo 1 widget HTML/javascript ở nơi muốn đặt menu (tốt nhất là trên header của blog), sau đó dán đoạn code bên dưới vào :
<style type="text/css">
#promenu ul li a:hover {text-decoration:none;}
#promenu {
background-repeat: repeat-x;
background-image: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoP45khL8XKsShBgBgC9-jALLlTn2Xe4eLhqiMNWeoTWwKzTYIxWMxroOJp2aq-1CqkHx94QzeqGpgEhdrRZvUZ7OWIFyWCg9Oh-VYN7rJg3nBXlDrqbgq7yIcHBi1VzW21PT_MmsUyz_G/s400/1-6-bg.png);
width: 100%;
height: 32px;
}
.menu {
list-style: none;
width: 100%;
margin: auto!important;
}
.menu li {
float: left;
text-align: center;
padding:0!important;
}
.menu li a {
color: white;
}
.menu .active, .menu li:hover {
background-position: 0 -34px;
float: left;
}
.menu .active span, .menu span:hover {
background-position: 100% -34px;
float: left;
line-height: 30px;
height: 30px;
}
.menu li a span {
font: 12px/31px Tahoma;
font-weight: 700;
display: block;
text-align: center;
padding: 0 8px 0 9px;
}
.menusep {
background-position: 0 0;
height: 32px;
line-height: 32px;
width: 2px;
}
</style>

<script type="text/javascript">
//<![CDATA[
var style1=["0px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrRFYXzkUABokz09sGX3M6iA9NmQIWDZq3rn6X3riA1uHPyL3sTdcaNcAOe7p3YPco8clPe_PWZjFUI0IvbHL_KudRL134nbpsmpOzJI4QEAeEzg_szftzXtY5AVyLdGQbFnINn8aUjHCk/s318/style1-sp.png"];
var style2=["-40px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnj6R3NgnAnEaAsZGcGQVIKAOXBifBCCk12U890zvcaT0ZGJjUU_WYH854wTHgzNVdIX2H07MrzwJtFDyQTjD2rxFv2XI7jE_t4jeTSY6rbrqzSYCBM5-Rv8WFNkYcSEkC4kxp9zYfz04m/s318/style2-sp.png"];
var style3=["-80px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDt4TcQwrsp8nUStJL7Ue-DKzXfeVcpXcoP0sS8uqZo01fFePChzm1-MuWIR48t3ITO6_l3EnY-wr-7pG_QVtsHpGpi7VZ7AtGawcsNk5FtlseTkr8FywQ3UNuzEv66x5F9gF6eQOMdUvE/s318/style3-sp.png"];
var style4=["-120px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVxiHRY4GgSxB-pQuC3a5LqBRrjSr_4B0F994JR9IWkMQ5FkmYbPzQ0DgKOEh3RWePGPYcbxB25u4pySz7YkcbWn70HwEs7oOVSUtj8c-YRRFzMD21zEDvk-JaTffNtCtioc1P8psx16Or/s318/style4-sp.png"];
var style5=["-160px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyY3-mYBDneOEupOaTm8TkP37YAdoScJDjk2-c64eMW85JapQ65Cqus108gXyNlIt3K-I8akoIPfjRx2DeYuhXuSMlZHyn2qKgemtgngd-Zwqu8sGhyO0R27R2u5op-uEVyV_QP1E7WeJr/s318/style5-sp.png"];
var style6=["-200px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6DUvIeffVVmIvOh3MDrMobl30Ld1PLkHmd66FF1jYI_VKoI5gNdlWm9ctI5MNvc9pbjgdl04M0a_ZKeKf5kQw68lrWyux4DitVBESsT2JknvFkNxpK_cBeCOLCnOhMOR7aG67hbBQVBx9/s318/style6-sp.png"];

var m0=["http://demo.fandung.com","Home","home_id"];
var m1=["link_menu1","Menu1","m_id1"];
var m2=["link_menu2","Menu2","m_id2"];
var m3=["link_menu3","Menu3","m_id3"];
var m4=["link_menu4","Menu4","m_id4"];
var m5=["link_menu5","Menu5","m_id5"];
var m6=["link_menu6","Menu6","m_id6"];

var ttmenu = [m0,m1,m2,m3,m4,m5,m6];

var n=ttmenu.length;
var list_menu=[];
var list_active=[];
var c_menu='';
var m_homepage='http://demo.fandung.com';
var h_cond=m_homepage+'/search';

var active_cond = location.href;
var home_cond=active_cond.split("?")[0];

var bg_pos='';
var sp_img='';

if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else if (active_cond.indexOf(ttmenu[2][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
else if (active_cond.indexOf(ttmenu[3][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}
else if (active_cond.indexOf(ttmenu[4][0])!=-1) {bg_pos=style5[0];sp_img=style5[1];}
else if (active_cond.indexOf(ttmenu[5][0])!=-1) {bg_pos=style6[0];sp_img=style6[1];}
else if (active_cond.indexOf(ttmenu[6][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else {bg_pos=style1[0];sp_img=style1[1];}

var mcss = document.createElement('style');
mcss.type = 'text/css';
mcss.innerHTML = '#promenu {background-position: 0 '+bg_pos+'} .menu li:hover, .menu .active, .menu .active span, .menusep, .menu span:hover {background-image: url('+sp_img+')}';
document.body.appendChild(mcss);

c_menu +='<div id="promenu"><ul class="menu">';

for (var i=0;i<n;i++) {

if ((home_cond==m_homepage)||(home_cond==h_cond)) {list_active[0]='class="active"';}
else if (active_cond.indexOf(ttmenu[i][0])!=-1) {list_active[i]='class="active"';} else {list_active[i]='';}

list_menu[i]='<li><a href="'+ttmenu[i][0]+'" '+list_active[i]+' id="'+ttmenu[i][2]+'"><span>'+ttmenu[i][1]+'</span></a></li>';
c_menu +=list_menu[i];
if (i<n-1) {c_menu +='<li class="menusep"> </li>';}
}
c_menu +='</ul></div>';
document.write(c_menu);

//]]>
</script>

Một vài hướng dẫn :
- Việc đầu tiên là thay http://demo.fandung.com thành tên miền của blog bạn, nhớ là không có dấu (/) theo sau tên miền.
- Để thêm menu, bớt menu, thay đổi tên hiển thị của menu, thay đổi link liên kết của menu,... các bạn chỉnh sửa ở đoạn code như bên dưới :
...
...
var m0=["http://demo.fandung.com","Home","home_id"];
var m1=["link_menu1","Menu1","m_id1"];
var m2=["link_menu2","Menu2","m_id2"];
var m3=["link_menu3","Menu3","m_id3"];
var m4=["link_menu4","Menu4","m_id4"];
var m5=["link_menu5","Menu5","m_id5"];
var m6=["link_menu6","Menu6","m_id6"];

var ttmenu = [m0,m1,m2,m3,m4,m5,m6];
...
...
- http://demo.fandung.com thay bằng địa chỉ trang chủ của blog bạn
- link_menu1, link_menu2, ... là đia chỉ liên kết của các menu.
- Menu1, Menu2, ... là tên hiển thị của các menu.
- nếu muốn thêm nhiều menu nữa thì các bạn thêm code tương tự như bên dưới :
...
...
var m0=["http://demo.fandung.com","Home","home_id"];
var m1=["link_menu1","Menu1","m_id1"];
var m2=["link_menu2","Menu2","m_id2"];
var m3=["link_menu3","Menu3","m_id3"];
var m4=["link_menu4","Menu4","m_id4"];
var m5=["link_menu5","Menu5","m_id5"];
var m6=["link_menu6","Menu6","m_id6"];
var m7=["link_menu7","Menu7","m_id7"];
var m8=["link_menu8","Menu8","m_id8"];


var ttmenu = [m0,m1,m2,m3,m4,m5,m6,m7,m8];
...
...
- để tùy chọn style cho menu ở mỗi trang, các bạn chỉnh sửa ở đoạn code bên dưới :
...
...
if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else if (active_cond.indexOf(ttmenu[2][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
else if (active_cond.indexOf(ttmenu[3][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}
else if (active_cond.indexOf(ttmenu[4][0])!=-1) {bg_pos=style5[0];sp_img=style5[1];}
else if (active_cond.indexOf(ttmenu[5][0])!=-1) {bg_pos=style6[0];sp_img=style6[1];}
else if (active_cond.indexOf(ttmenu[6][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else {bg_pos=style1[0];sp_img=style1[1];}
...
...
- ttmenu[1][0], ttmenu[2][0], ..., ttmenu[6][0] ; đây là các phần tử trong mảng 2 chiều ttmenu, tương ứng với địa chỉ liên kết của các menu : Menu1, Menu2, ..., Menu6
- ở trên menu0, tức là menu HOME mình cho style mặc định là style1. cùng style với các trang liên kết không có trong menu (ví dụ các trang archive hoặc trang bài viết, ...) , hoặc các liên kết không được chọn style để hiển thị.
- code trên sẽ được hình dung như bên dưới :
Menu0 ------ style1
Menu1 ------ style2
Menu2 ------ style3
Menu3 ------ style4
Menu4 ------ style5
Menu5 ------ style6
Menu6 ------ style2
Trang khác ------ style1
- Nếu muốn thay đổi style cho các trang, các bạn chỉ cần đổi tên style1, style2,... thành các style khác là được. tức là các vị trí trong code bên dưới :
...
...
if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else if (active_cond.indexOf(ttmenu[2][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
else if (active_cond.indexOf(ttmenu[3][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}
else if (active_cond.indexOf(ttmenu[4][0])!=-1) {bg_pos=style5[0];sp_img=style5[1];}
else if (active_cond.indexOf(ttmenu[5][0])!=-1) {bg_pos=style6[0];sp_img=style6[1];}
else if (active_cond.indexOf(ttmenu[6][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else {bg_pos=style1[0];sp_img=style1[1];}
...
...

- Nếu như có nhiều menu thì các bạn cứ thêm code như bên dưới để chọn style cho nó :
...
...
if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else if (active_cond.indexOf(ttmenu[2][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
else if (active_cond.indexOf(ttmenu[3][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}
else if (active_cond.indexOf(ttmenu[4][0])!=-1) {bg_pos=style5[0];sp_img=style5[1];}
else if (active_cond.indexOf(ttmenu[5][0])!=-1) {bg_pos=style6[0];sp_img=style6[1];}
else if (active_cond.indexOf(ttmenu[6][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else if (active_cond.indexOf(ttmenu[7][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
else if (active_cond.indexOf(ttmenu[8][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}

else {bg_pos=style1[0];sp_img=style1[1];}
...
...
- lưu ý : ttmenu[7][0], và ttmenu[8][0] là liên kết của các Menu7, và Menu8.
- nếu muốn chỉ 1 trang nào đó có giao diện đặc biệt khác với các trang còn lại (ở đây mình ví dụ là trang Menu1) thì đoạn code ở trên sẽ chỉ còn như bên dưới :
...
...
if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else {bg_pos=style1[0];sp_img=style1[1];}
...
...
- Đoạn code trên có nghĩa là chỉ có trang Menu1 là có giao diện riêng biệt là Style2, còn các trang khác sẽ có giao diện Style1.

Như vậy mình hướng dẫn đã xong. các bạn cứ test thử, nếu có trục trặc gì mình sẽ fix lại bài viết và cập nhật thêm hướng dẫn.

----- UPDATED -----
K14 - Promenu (với hiệu ứng sổ dọc)
- ở bản update này, mình sẽ cập nhật thêm tính năng thêm submenu cho menu chính. Tính năng này mình kết hợp từ bài viết "Tạo menu nằm ngang với hiệu ứng sổ dọc".
- Để thực hiện việc cập nhật này, các bạn phải xem lại bài viết Tạo Menu Thanh menu ngang có sổ dọc xuống

Xem DEMO

Hình ảnh minh họa :

- Sau đây là code mẫu của thủ thuật đã updated, các bạn thực hiện theo hướng dẫn của bài này và bài Tạo Menu Thanh menu ngang có sổ dọc xuống để có thể chỉnh sửa lại từ code mẫu :
<script src="http://fandung.googlecode.com/svn/trunk/js/dropdown2.js" type="text/javascript"></script>

<style type="text/css">
#promenu ul li a:hover {text-decoration:none;}
#promenu {
background-repeat: repeat-x;
background-image: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoP45khL8XKsShBgBgC9-jALLlTn2Xe4eLhqiMNWeoTWwKzTYIxWMxroOJp2aq-1CqkHx94QzeqGpgEhdrRZvUZ7OWIFyWCg9Oh-VYN7rJg3nBXlDrqbgq7yIcHBi1VzW21PT_MmsUyz_G/s400/1-6-bg.png);
width: 100%;
height: 32px;
}
.menu {
list-style: none;
width: 100%;
margin: auto!important;
}
.menu li {
float: left;
text-align: center;
padding:0!important;
}
.menu li a {
color: white;
height:30px;
display:block;
}
.menu .active, .menu li:hover {
background-position: 0 -34px;
float: left;
}

.menu .active span, .menu span:hover {
background-position: 100% -34px;
float: left;
line-height: 30px;
height: 30px;
}

.menu li a span {
font: 12px/31px Tahoma;
font-weight: 700;
display: block;
text-align: center;
padding: 0 8px 0 9px;
}
.menusep {
background-position: 0 0;
height: 32px;
line-height: 32px;
width: 2px;
}
.promenu_sub {
background-repeat: repeat-x;
background-image: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJZbaK6D1jJqW59xnjAHIfmiRDPeIJ9M13S0pIKvhHUO6shIIEhW8x5I_TujnQGSB4BKJIjKqA3ckc7wwGDQYk3oYfuJs737ZuvopfVjz9qzmxx8PJhp_t7uCj3uI6aVvq7dW4WucEWm-H/s240/1-6-bg_sub2.png);
margin-top:1px;
padding:1px;
color: #fff;;
margin: 1 1px;
padding: 7px 12px;
font-weight:bold;
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
cursor:pointer;
border-top:1px solid #ededed;
}
</style>

<script type="text/javascript">
//<![CDATA[
var style1=["0px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrRFYXzkUABokz09sGX3M6iA9NmQIWDZq3rn6X3riA1uHPyL3sTdcaNcAOe7p3YPco8clPe_PWZjFUI0IvbHL_KudRL134nbpsmpOzJI4QEAeEzg_szftzXtY5AVyLdGQbFnINn8aUjHCk/s318/style1-sp.png"];

var style2=["-40px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnj6R3NgnAnEaAsZGcGQVIKAOXBifBCCk12U890zvcaT0ZGJjUU_WYH854wTHgzNVdIX2H07MrzwJtFDyQTjD2rxFv2XI7jE_t4jeTSY6rbrqzSYCBM5-Rv8WFNkYcSEkC4kxp9zYfz04m/s318/style2-sp.png"];

var style3=["-80px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDt4TcQwrsp8nUStJL7Ue-DKzXfeVcpXcoP0sS8uqZo01fFePChzm1-MuWIR48t3ITO6_l3EnY-wr-7pG_QVtsHpGpi7VZ7AtGawcsNk5FtlseTkr8FywQ3UNuzEv66x5F9gF6eQOMdUvE/s318/style3-sp.png"];

var style4=["-120px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVxiHRY4GgSxB-pQuC3a5LqBRrjSr_4B0F994JR9IWkMQ5FkmYbPzQ0DgKOEh3RWePGPYcbxB25u4pySz7YkcbWn70HwEs7oOVSUtj8c-YRRFzMD21zEDvk-JaTffNtCtioc1P8psx16Or/s318/style4-sp.png"];

var style5=["-160px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyY3-mYBDneOEupOaTm8TkP37YAdoScJDjk2-c64eMW85JapQ65Cqus108gXyNlIt3K-I8akoIPfjRx2DeYuhXuSMlZHyn2qKgemtgngd-Zwqu8sGhyO0R27R2u5op-uEVyV_QP1E7WeJr/s318/style5-sp.png"];

var style6=["-200px","https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6DUvIeffVVmIvOh3MDrMobl30Ld1PLkHmd66FF1jYI_VKoI5gNdlWm9ctI5MNvc9pbjgdl04M0a_ZKeKf5kQw68lrWyux4DitVBESsT2JknvFkNxpK_cBeCOLCnOhMOR7aG67hbBQVBx9/s318/style6-sp.png"];

var m0=["http://demo.fandung.com","Home","home_id"];
var m1=["/search/label/Label1","Label1","id1"];
var m2=["/search/label/Label2","Label2","id2"];
var m3=["/search/label/Label3","Label3","id3"];
var m4=["/search/label/Label4","Label4","id4"];
var m5=["/search/label/Label5","Label5","id5"];
var m6=["/search/label/Label6","Label6","id6"];
var m7=["/search/label/Label7","Label7","id7"];
var m8=["/search/label/Label8","Label8","id8"];
var m9=["/search/label/Label9","Label9","id9"];

var ttmenu = [m0,m1,m2,m3,m4,m5,m6,m7,m8,m9];
var n=ttmenu.length;
var list_menu=[];
var list_active=[];
var c_menu='';
var m_homepage='http://demo.fandung.com/';
var h_cond=m_homepage+'search';

var active_cond = location.href;
var home_cond=active_cond.split("?")[0];

var bg_pos='';
var sp_img='';

if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else if (active_cond.indexOf(ttmenu[2][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
else if (active_cond.indexOf(ttmenu[3][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}
else if (active_cond.indexOf(ttmenu[4][0])!=-1) {bg_pos=style5[0];sp_img=style5[1];}
else if (active_cond.indexOf(ttmenu[5][0])!=-1) {bg_pos=style6[0];sp_img=style6[1];}
else if (active_cond.indexOf(ttmenu[6][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
else if (active_cond.indexOf(ttmenu[7][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
else {bg_pos=style1[0];sp_img=style1[1];}

var mcss = document.createElement('style');
mcss.type = 'text/css';
mcss.innerHTML = '#promenu, .promenu_sub {background-position: 0 '+bg_pos+'} .menu li:hover, .menu .active, .menu .active span, .menusep, .menu span:hover {background-image: url('+sp_img+')}';
document.body.appendChild(mcss);

// submenu
function otab(){document.write('<table border="0" bordercolor="#999" style="background-color: #FFF" cellspacing="0" cellpadding="0">');}

function submn(submn_link,submn_text){ document.write('<tr><td onmouseover="this.style.background=\'url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoP45khL8XKsShBgBgC9-jALLlTn2Xe4eLhqiMNWeoTWwKzTYIxWMxroOJp2aq-1CqkHx94QzeqGpgEhdrRZvUZ7OWIFyWCg9Oh-VYN7rJg3nBXlDrqbgq7yIcHBi1VzW21PT_MmsUyz_G/s400/1-6-bg.png) repeat-x 0 '+bg_pos+'\'" onmouseout="this.style.background=\'url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJZbaK6D1jJqW59xnjAHIfmiRDPeIJ9M13S0pIKvhHUO6shIIEhW8x5I_TujnQGSB4BKJIjKqA3ckc7wwGDQYk3oYfuJs737ZuvopfVjz9qzmxx8PJhp_t7uCj3uI6aVvq7dW4WucEWm-H/s240/1-6-bg_sub2.png) repeat-x 0 '+bg_pos+'\'" class="promenu_sub" onclick="window.location.href=\''+submn_link+'\'">'+submn_text+'</td></tr>');}

function ctab(){document.write('<\/table>');}

function otab(child_id){document.write('<table id="' + child_id +'" border="0" bordercolor="#999" style="background-color: #FFF" cellspacing="0" cellpadding="0">');}

//submenu

c_menu +='<div id="promenu"><ul class="menu">';

for (var i=0;i<n;i++) {

if ((home_cond==m_homepage)||(home_cond==h_cond)) {list_active[0]='class="active"';}
else if (active_cond.indexOf(ttmenu[i][0])!=-1) {list_active[i]='class="active"';} else {list_active[i]='';}

list_menu[i]='<li><a href="'+ttmenu[i][0]+'" '+list_active[i]+' id="'+ttmenu[i][2]+'"><span>'+ttmenu[i][1]+'</span></a></li>';
c_menu +=list_menu[i];
if (i<n-1) {c_menu +='<li class="menusep"> </li>';}
}
c_menu +='</ul></div>';
document.write(c_menu);

//]]>
</script>

<script type="text/javascript">
otab("id1_child");
submn('link_submenu1.1','Submenu 1.1');
submn('link_submenu1.2','Submenu 1.2');
ctab();
at_attach("id1", "id1_child", "hover", "y", "pointer");

otab("id2_child");
submn('link_submenu2.1','Submenu 2.1');
ctab();
at_attach("id2", "id2_child", "hover", "y", "pointer");

otab("id3_child");
submn('link_submenu3.1','Submenu 3.1');
ctab();
at_attach("id3", "id3_child", "hover", "y", "pointer");

otab("id4_child");
submn('link_submenu4.1','Submenu 4.1');
submn('link_submenu4.2','Submenu 4.2');
submn('link_submenu4.3','Submenu 4.3');
submn('link_submenu4.4','Submenu 4.4');
submn('link_submenu4.5','Submenu 4.5');
submn('link_submenu4.6','Submenu 4.6');
ctab();
at_attach("id4", "id4_child", "hover", "y", "pointer");

otab("id5_child");
submn('link_submenu5.1','Submenu 5.1');
submn('link_submenu5.2','Submenu 5.2');
ctab();
at_attach("id5", "id5_child", "hover", "y", "pointer");

otab("id6_child");
submn('link_submenu6.1','Submenu 6.1');
ctab();
at_attach("id6", "id6_child", "hover", "y", "pointer");

otab("id7_child");
submn('link_submenu7.1','Submenu 7.1');
submn('link_submenu7.2','Submenu 7.2');
submn('link_submenu7.3','Submenu 7.3');
ctab();
at_attach("id7", "id7_child", "hover", "y", "pointer");

otab("id8_child");
submn('link_submenu8.1','Submenu 8.1');
submn('link_submenu8.2','Submenu 8.2');
submn('link_submenu8.3','Submenu 8.3');
submn('link_submenu8.4','Submenu 8.4');
submn('link_submenu8.5','Submenu 8.5');
submn('link_submenu8.6','Submenu 8.6');
submn('link_submenu8.7','Submenu 8.7');
ctab();
at_attach("id8", "id8_child", "hover", "y", "pointer");
</script>
- bản updated vẫn chưa hoàn thiện ở phần hiện hiệu ứng thay đổi style cho menu ở các trang submenu, mình sẽ fix sớm khi có thể.

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

Chèn Chabox Gtalk vào BlogSpot.

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 !

[Thông báo] V/v VNPT chặn BlogSpot.

Chia buồn với cộng đồng Blogger tại Việt Nam. VNPT chính thức đưa BlogSpot vào danh sách đen của mình.... Được biết thì họ không chặn luôn trang blogspot.com mà chặn các subdomain là *.blogspot.com.

Do vậy khi vào fandung load lâu không có gì là lạ. Trên site chưa rất nhiều backlink domain *.blogspot.com


Bá đạo !


Ảnh hưởng tới các domain sau:


*.googleusercontent.com - Nghĩa là khỏi dịch, khỏi xem cache Google luôn.
  (P/s : Hiện tại VNPT đã thả Google Translate).

Picasa cũng dạng *.googleusercontent.com nên chịu chung số phận.
  (P/s : Có lẽ cũng sẽ được thả sớm).

Thêm thông tin là IP của *.blogspot.com và *.googleusercontent.com đều là 74.125.71.132. Vậy là các bạn đã hiểu tại sao cả Blogspot và Google Dịch, Google Cache đều không vào được rồi đấy.






Chung số phận với facebook, blogger.com chính thực lĩnh án chung thân.

Mình theo dõi và phỏng đoán, nguyên nhân về việc chặn subdomain blogspot.com do hiện tại rất nhiều web đen chưa nội dung xấu (xxx, phản động...). Đã được đưa vào tầm ngắm của bộ thông tin. Không lâu nữa, rất có thể em Google + của chúng ta sẽ tiếp tục lên đường vào thăm anh Luyện.


Cộng đồng nghĩ gì, bạn hãy đọc:



http://www.phamen.com/bloggerr-wordpress-tai-sao-vnpt/

Các site có domain riêng không bị chặn là bới dùng faceIP. Do vậy hiện tại để vào được BlogSpot sẽ có 2 cách khắc phục sau.

1. Sử dụng domain riêng...

2. Hướng dẫn bạn bè dùng faceIp ngay trên máy. (cách này sẽ giúp các admin đi ngủ sớm hơn, vì blogger cũng không mặn mà cho lắm với nhiều người xem :| )



Cách này có vẻ không hiệu quả.

==> Dùng UltraSuft

==> BlOg... " Bỗng dưng bị ấy...!!! " - Blogspot bị chăn, khắc phục sao???    (Anh Dũng viết =)) )

Khung giờ bị chặn bắt đầu từ 0h = > 6h sáng. Mình không rõ có phải là 6h sáng không. Bây giờ thì vui rồi. Facebook thì chặn cả ngày, tối mở. Blogger chặn cả đêm ngày mở. :(( Hết cả các sân chơi thật rồi..




Chưa có danh sách chình thức, nhưng thế này cũng đủ hiểu.

Kết luận lại vụ việc này sẽ làm nhiều người buồn hơn bao giờ hết. Nhưng nếu để cái văn hoá phản động ngấm vào thân còn buồn hơn...Mình bắt đầu ghét chúng rồi đấy.


P/s: Anh em sử dụng VNPT để lại comments  cho biết thêm khu vực nhé. Để mọi người biết được khu vực nào không bị dính vào thảm sát.

Jquery Slider Tin Tức - News Slider


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 !