[TUTS] Tạo file dữ liệu avatar

  Bài viết hay nhất1
Thử nghiệm: [You must be registered and logged in to see this link.]

So với phiên bản trước đây, code đã được tối ưu, rút gọn dữ liệu tối đa.
Nếu như trước đây, do giới hạn kích thước mà code chỉ dùng tốt với forum 3000~5000 thành viên, thì phiên bản này giới hạn đó đã tăng lên 80000~100000 thành viên.

Cụ thể:

  1. Loại bỏ các thành viên không dùng avatar.
  2. Loại bỏ protocol trong URL.
  3. Rút gọn các đường dẫn mặc định.
  4. Rút gọn 4 loại đuôi ảnh thường gặp.


Một số cải tiến:

  1. Thêm bộ đếm thời gian tải.
  2. Cấm thành viên thông thường sử dụng.
  3. Bản ghi hoạt động chi tiết.
  4. Tự tạo tệp dữ liệu khi không tìm thấy.
  5. Tải trang kế tiếp ngay khi trang trước được tải xong.
  6. Dừng tải khi gặp lỗi và tự tải lại sau 2 phút.
  7. Tự cập nhật tệp dữ liệu khi tải xong.


[You must be registered and logged in to see this image.]
Update Avatar - DEVs

[You must be registered and logged in to see this image.]
Update Avatar - Skin4FM


Hướng dẫn:


Bước 1: Tạo trang avatar obj


  • Title * :  avatar obj
  • HTML source * :
    Code:
    [{}]




Bước 2: Tạo trang HTML Update Avatar


  • Title * :  HTML Update Avatar
  • HTML source * :
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" id="min-width" lang="vi" xml:lang="vi">

    <head>
     <title>Update Avatar - version 2 | DEVs.forumvi.com</title>
     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
     <meta http-equiv="content-script-type" content="text/javascript" />
     <meta http-equiv="content-style-type" content="text/css" />
     <link rel="shortcut icon" type="image/x-icon" href="http://dl.dropboxusercontent.com/u/126946313/DEVs/devs.ico" />
     <meta name="author" content="Zzbaivong" />
     <meta name="title" content="Update Avatar - version 2 | DEVs.forumvi.com" />
     <meta name="description" content="Tạo tệp dữ liệu avatar của các thành viên có đăng bài viết" />
     <style type="text/css">
     * {
     margin: 0;
     padding: 0
     }
     body {
     background-attachment: fixed;
     background-color: transparent;
     background-image: url(http://i40.servimg.com/u/f40/17/70/81/78/83512010.jpg);
     background-position: center top;
     background-repeat: no-repeat;
     background-size: 120% auto
     }
     body * {
     -o-box-sizing: border-box;
     -moz-box-sizing: border-box;
     -webkit-box-sizing: border-box
     }
     #devs {
     float: right;
     text-indent: -9999px;
     display: block;
     width: 16px;
     height: 16px;
     background: url(http://i56.servimg.com/u/f56/18/59/49/93/l111.png) no-repeat center transparent;
     }
     .note {
     float: none;
     width: 270px;
     background: url(http://i40.servimg.com/u/f40/17/70/81/78/tip10.png) no-repeat scroll 5px center #FFFBCC;
     border: 1px solid #E6DB55;
     clear: both;
     color: #666452;
     font-size: .9em;
     position: relative;
     margin: 0 auto;
     padding: 5px 5px 5px 25px
     }
     #getavatar {
     background: none repeat scroll 0 0 padding-box #FFF;
     border: 1px solid rgba(0, 0, 0, 0.333);
     box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
     color: #000;
     left: 50%;
     margin-left: -50px;
     margin-top: -210px;
     outline: 0 none;
     position: absolute;
     top: 50%;
     width: 520px;
     padding: 40px
     }
     #getavatar button {
     background: #F5F5F5;
     border: 1px solid rgba(0, 0, 0, 0.1);
     clear: none;
     color: #444;
     cursor: pointer;
     float: none;
     font-size: 11px;
     font-weight: 700;
     height: 29px;
     line-height: 27px;
     margin-top: 10px;
     min-width: 72px;
     outline: 0 none;
     padding: 0 8px
     }
     #getavatar #start {
     background: rgb(203, 255, 207);
     }
     #getavatar #pause {
     background: rgb(255, 228, 229);
     }
     #getavatar button: hover {
     background: #999!important;
     color: #FFF;
     }
     #time,
     #page {
     padding: 0 20px 0 25px;
     width: 168px;
     display: inline-block;
     }
     #page {
     background: url(http://i57.servimg.com/u/f57/17/70/81/78/list_b10.png) no-repeat scroll left center transparent
     }
     #time {
     background: url(http://i40.servimg.com/u/f40/17/70/81/78/14578910.png) no-repeat scroll left center transparent;
     cursor: pointer
     }
     #avatarjson {
     width: 100%;
     height: 100px;
     resize: vertical;
     overflow: auto!important;
     }
     #paging {
     font-size: 12px;
     font-weight: 700;
     margin-top: 10px;
     text-align: center;
     visibility: hidden
     }
     #paging b {
     background-color: #0567AD;
     border: 1px solid #00487A;
     color: #FFF;
     text-shadow: 0 1px 0 #000;
     visibility: visible;
     padding: 3px 5px
     }
     #paging a[href="javascript:Pagination();"] {
     display: none
     }
     #paging a {
     text-decoration: none;
     background-color: #E5E5E5;
     border: 1px solid #D6D6D6;
     text-shadow: 0 1px 0 #FFF;
     visibility: visible;
     margin: 2px;
     padding: 3px 5px
     }
     .warning {
     border: 1px solid rgb(171, 218, 255);
     padding: 10px;
     text-align: justify;
     font: 12px sans-serif;
     background: rgb(239, 247, 255);
     margin: 10px 0;
     }
     .btn,
     .timepage,
     #paging,
     #avatarjson {
     display: none;
     }
     </style>
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
     <script type="text/javascript">
     //<![CDATA[ var _gaq = _gaq || []; _gaq.push(["_setAccount", "UA-26966514-1"]); _gaq.push(["_trackPageview"]); (function () { var ga = document.createElement("script"); ga.type = "text/javascript"; ga.async = true; ga.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") + ".google-analytics.com/ga.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ga, s) })(); //]]>
     </script>
    </head>

    <body>
     <script tyle="text/javascript">
    var page_ID = 0,
     avatar = {}, data = {}, reset = 120,
     second = 0,
     avapage,
     time, refresh, adtid,
     link = "/memberlist?change_temp&mode=posts&order=DESC",
     filter = "",
     imgfast = "";

    $("body").prepend('<div style="width: 100%; height: 100%; background: none repeat scroll 0% 0% rgb(221, 221, 221); position: absolute; top: 0px; left: 0px; opacity: 0.7;"></div><div id="getavatar"><p class="timepage"><a id="devs" target="_blank" href="http://devs.forumvi.com/">DEVs</a><span id="time">0</span><span id="page">0/0</span></p><p class="note">\u00a9 2013 Zzbaivong</p><p class="btn"><button id="reset">Làm lại</button> <button id="start">Bắt đầu</button><button style="display:none" id="pause">Tạm dừng</button></p><textarea id="avatarjson"></textarea><p id="paging"></p></div>');

    function active() {
     $(".note").css({
     "float": "right",
     "margin": "10px 0"
     });
     $(".btn,.timepage,#paging").show();
    }

    function created(a) {
     $.get("/admin/index.forum?part=modules&sub=html&extended_admin=1&tid=" + a, {
     sort_method: "page_time",
     sort_order: "DESC",
     submit: "submit"
     }, function (e) {
     page_ID = $(e).find("#pageListHtml td:contains('avatar obj'):first").next().next().find("a:last").attr("href").replace(/\S+\/h(\d+)-\S+/, "$1");
     active();
     $("#getavatar").append('<p class="warning">Tệp <strong><font color="#339933">avatar obj</font></strong> đã được tạo thành công với <strong><font color="#ff3333">page_ID</font></strong> là <strong><font color="#ff3333">' + page_ID + '</font></strong>.<br><br>Ngay bây giờ bạn có thể nhấn <font color="#333399"><strong>Bắt đầu</strong></font> để cập nhật dữ liệu.<br>Trong lúc chờ tải, bạn cần sửa lại mã <strong><font color="#ff3333">page_ID</font></strong> trong javascript của 2 tệp <font color="#9933ff"><strong>HTML Update Avatar</strong></font> và <font color="#cc6633"><strong>javascript Update Avatar</strong></font>.<br><br><i>Xem hướng dẫn chi tiết tại</i>: <a target="_blank" href="http://devs.forumvi.com/h14-avatar?pageid=' + page_ID + '">http://devs.forumvi.com/h14-avatar?pageid=' + page_ID + '</a></p>');
     console.log("page_ID = " + page_ID);
     });
    }

    function clock() {
     $("#time").text(second++)
    }

    function note(a, b) {
     $(".note").text(a);
     switch (b) {
     case "w":
     console.warn(a)
     break;
     case "e":
     console.error(a)
     break;
     default:
     console.log(a)
     }
    }

    function viTime(a) {
     var a = (new Date(a)).toString().split(/\s/);
     return a[2] + "/" + {
     Jan: "01",
     Feb: "02",
     Mar: "03",
     Apr: "04",
     May: "05",
     Jun: "06",
     Jul: "07",
     Aug: "08",
     Sep: "09",
     Oct: "10",
     Nov: "11",
     Dec: "12"
     }[a[1]] + "/" + a[3] + " " + a[4]
    }

    function getavatar(c) {
     $.get(c).done(function (a) {
     if ($(a).find("a[href^='/admin/index.forum']").length) {
     $("#paging").html($(a).find(".paging:first").html());
     $("#paging img").parent().remove();
     var page = $("#paging b").text(),
     allpage = $("#paging > *:last").text();
     if ("" == page) {
     page = 0
     };
     if ("" == allpage) {
     allpage = 0
     };
     $("#page").text(page + "/" + allpage);
     avapage = 0;
     $(a).find(".tcl.avatar-mini").each(function () {
     var b = $(this).find("img").attr("src");
     if (!new RegExp("^(" + filter + ")$").test(b) && "0" != $(this).siblings(".tc3:last").prev().text()) {
     avapage++;
     var a = $(this).find("a").attr("href").replace(/\/u(\d+)\?change_temp=/,
     "$1"),
     b = b.replace(new RegExp("https?:|//r\\d+.imgfast.net|" + imgfast, "gi"), "").replace("//illiweb.com/fa/i/avatars/", "*").replace("gallery/", "!").replace(".png", "{").replace(".gif", "}").replace(".jpg", "[").replace(".jpeg", "]");
     0 == b.indexOf(a + "-") && (b = b.replace(a + "-", "@"));
     eval("avatar[" + a + "]='" + b + "'")
     }
     });
     avatar.lastUpdate = new Date().getTime();
     $("#avatarjson").val("[" + JSON.stringify(avatar) + "]");
     note("Trang " + page + " có " + avapage + " người dùng avatar.");
     if ($("#paging b").is(":last-child") || $("#pause").is(":hidden") || "0" == $(a).find(".table .tc3:last").prev().text() || $("#paging").is(":empty")) {
     clearInterval(time);
     $("#start, #reset").show();
     $("#pause").hide();
     data = {
     title: "avatar obj",
     mode: "go_edit",
     page: page_ID,
     submit: "submit",
     html: $("#avatarjson").val()
     };
     $.post("/admin/index.forum?part=modules&sub=html&extended_admin=1&tid=" + $(a).find("a[href^='/admin/index.forum']").attr("href").replace(/\S+tid=(\w+)&change_temp=/, "$1"), data, function (b) {
     if ($(b).find(".messagebox:contains('HTML page successfully updated')").length) {
     note("Cập nhật thành công.");
     } else {
     note("Cập nhật thất bại.", "w");
     note("Cập nhật lại lần 2.");
     adtid = $(b).find("#activetab a").attr("href").replace(/\S+&tid=(\w+)/, "$1");
     $.post("/admin/index.forum?part=modules&sub=html&extended_admin=1&tid=" + adtid, data, function (b) {
     if ($(b).find(".messagebox:contains('HTML page successfully updated')").length) {
     note("Cập nhật thành công.");
     } else {
     note("Xảy ra lỗi! Dừng cập nhật tự động.", "e");
     }
     })
     }
     });
     note("Tổng số avatar: " + (Object.keys(avatar).length - 1), "w");
     if ($("#paging b").is(":last-child") || $("#paging").is(":empty")) {
     note("Hoàn thành! Tải toàn bộ avatar.")
     } else if ("0" == $(a).find(".table .tc3:last").prev().text()) {
     note("Kết thúc! Thành viên có 0 bài viết.")
     } else if ($("#pause").is(":hidden")) {
     note("[Tạm dừng] lúc " + viTime(new Date()));
     }
     } else {
     link = $("#paging b").next().attr("href");
     getavatar(link)
     };
     } else {
     note("Bạn cần quyền admin để tiếp tục.", "w");
     $(".btn,.timepage,#paging,#avatarjson").remove();
     $(".note").css({
     "float": "none",
     "margin": "0 auto"
     });
     }
     }).fail(function () {
     clearInterval(time);
     $("#start, #reset").show();
     $("#pause").hide();
     var a = reset;
     $(".note").html("Xảy ra lỗi! Cập nhật lại sau <strong id='refresh'>" + a + "</strong> giây.");
     console.warn("Xảy ra lỗi! Cập nhật lại sau " + a + " giây.");
     refresh = setInterval(function () {
     var b = a--;
     $("#refresh").text(b);
     if (0 >= b) {
     note("Tiếp tục chạy cập nhật");
     $("#start").click()
     }
     }, 1E3)
     })
    }

    $.get("/h" + page_ID + "-avatar", function (a) {
     if (a.indexOf("[") != 0) {
     note("Đường dẫn tệp dữ liệu không đúng.", "w");
     if ($(a).find("a[href^='/admin/index.forum']").length) {
     data = {
     title: "avatar obj",
     mode: "add",
     submit: "submit",
     html: "[{}]"
     };
     adtid = $(a).find("a[href^='/admin/index.forum']").attr("href").replace(/\S+&tid=(\w+)/, "$1");
     $.post("/admin/index.forum?part=modules&sub=html&extended_admin=1&tid=" + adtid, data, function (b) {
     if ($(b).find(".successbox:contains('HTML page successfully created')").length) {
     note("Tạo tệp [avatar obj] thành công");
     created(adtid)
     } else {
     note("Tạo tệp [avatar obj] thất bại", "w");
     note("Tạo lại tệp [avatar obj] lần 2.");
     adtid = $(b).find("#activetab a").attr("href").replace(/\S+&tid=(\w+)/, "$1");
     $.post("/admin/index.forum?part=modules&sub=html&extended_admin=1&tid=" + adtid, data, function (b) {
     if ($(b).find(".successbox:contains('HTML page successfully created')").length) {
     note("Tạo tệp [avatar obj] thành công.");
     created(adtid)
     } else {
     note("Xảy ra lỗi! Dừng tạo tệp [avatar obj].", "e");
     }
     });
     }
     });
     } else {
     note("Bạn cần quyền admin để tiếp tục.", "w");
     }
     } else {
     avatar = $.parseJSON(a)[0];
     if (avatar.lastUpdate != undefined) {
     note("Cập nhật cuối: " + viTime(avatar.lastUpdate));
     } else {
     note("Chưa có dữ liệu");
     }
     active();
     }
    });
    $("#start").click(function () {
     note("[Bắt đầu] lúc " + viTime(new Date()));
     time = setInterval("clock()", 1000);
     getavatar(link);
     $("#start, #reset").hide();
     $("#pause").show();
     $("#avatarjson").slideDown();
     clearInterval(refresh)
    });
    $("#reset").click(function () {
     note("[Làm lại] lúc " + viTime(new Date()));
     $("#avatarjson").slideUp();
     data = {};
     second = 0;
     link = "/memberlist?change_temp&mode=posts&order=DESC";
     $("#avatarjson").val("");
     $("#paging").empty();
     $("#time").text("0");
     $("#page").text("0/0");
     note("\u00a9 2013 Zzbaivong")
    });
    $("#pause").click(function () {
     $(this).hide().siblings().show()
    });
     </script>
    </body>

    </html>



Chỉnh sửa: Tìm trong code trên, phần javascript

page_ID: Thay 0 bằng page id của trang avatar obj tạo ở bước 1. Ví dụ:
Code:
page_ID = 7,

filter: URL avatar mặc định của diễn đàn, nếu có nhiều avatar mặc định dùng dấu gạch đứng để ngăn cách. Ví dụ:
Code:
filter = "http://i56.servimg.com/u/f56/18/59/49/93/noavat10.jpg",
...dùng nhiều avatar mặc định:
Code:
filter = "http://r15.imgfast.net/users/1513/21/33/80/avatars/gallery/defaul10.png|http://r15.imgfast.net/users/1513/21/33/80/avatars/gallery/1-5911.gif",
Xem avatar mặc định tại: ACP >> Display >> Avatars >> Avatar gallery >> Default avatar

imgfast: Đường dẫn thư mục avatar. Mỗi diễn đàn sẽ có một thư mục chứa avatar riêng trên imgfast, bạn có thể dùng bất kỳ URL avatar(được upload), lấy đoạn từ /users/ đến /avatars/. Ví dụ:
URL avatar của mình là [You must be registered and logged in to see this link.] thì nhập code như sau:
Code:
imgfast = "/users/2816/63/36/82/avatars/";

Bước 3: Tạo tệp Javascript Update Avatar


  • Title * :  Javascript Update Avatar
  • Placement : In the home page, In the sub-forums
  • Javascript Code * :
    Code:
    var page_ID = 0,
     noAvatar = "//i56.servimg.com/u/f56/18/59/49/93/noavat10.jpg",
     imgfast = "",
     avatar;

    function imgAva(a) {
     var u = a.replace(/.*\/u(\d+)(\?tt=1)?/, "$1").toString();
     a = avatar[u];
     void 0 == a && (a = noAvatar); - 1 == a.indexOf("/") && (a = imgfast + a);
     a = a.replace("@", u + "-");
     a = a.replace("*", "//illiweb.com/fa/i/avatars/");
     a = a.replace("!", "gallery/");
     a = a.replace(/\{$/, ".png");
     a = a.replace(/\}$/, ".gif");
     a = a.replace(/\[$/, ".jpg");
     a = a.replace(/\]$/, ".jpeg");
     return '<img class="statusAva" src="' + a + '" alt="avatar" onerror="this.src=\'' + noAvatar + '\';" />'
    }

    $(function () {
     $.get("/h" + page_ID + "-avatar", function (data) {
     avatar = $.parseJSON(data)[0];
     /* Viết code ở đây */
     });
    });




Tags: [You must be registered and logged in to see this link.]
  Bài viết hay nhất2
Hướng dẫn tự cập nhật dữ liệu avatar


Tạo file dữ liệu avatar sẽ cho phép truy xuất avatar thành viên nhanh, không bị lỗi Request Limits như những cách khác, tuy nhiên nhược điểm là phải cập nhật thủ công.
Ở hướng dẫn này, thực tế vẫn chưa đạt mức tự động, nhưng cũng sẽ hỗ trợ bạn cập nhật đơn giản hơn, bằng cách kiểm tra thời gian cập nhật gần đây nhất của bạn, nếu quá thời gian chỉ định, sẽ mở popup trang cập nhật dữ liệu và tự chạy, khi cập nhật hoàn tất sẽ tự đóng lại.
Như vậy bạn sẽ vẫn cần tới quyền admin và phải đăng nhập để code có thể chạy.
Bạn có thể tùy chỉnh khoảng thời gian đó tùy theo lượng truy cập ở diễn đàn bạn, tuy nhiên không nên ít hơn 6 giờ (mặc định là 24 giờ).


Hướng dẫn:

Xem bài trước: [You must be registered and logged in to see this link.]

1- Tạo liên kết đến trang HTML Update Avatar trên thanh menu.

ACP >> Display >> Homepage >> Headers & Navigation >> Add a customized menu:
Menu: zzAvatar
Text: zzAvatar
Redirection URL: /hX-avatar
Chú ý: X là số page_ID của trang HTML Update Avatar tạo ở bước 2.
Rights: Quản trị viên
Display: Open in a new window

2- Chỉnh sửa code tạo dữ liệu avatar.

bước 2 trong bài trước, HTML Update Avatar
Tìm dòng 270277:
Code:
note("Cập nhật thành công.");
Sửa thành:
Code:
note("Cập nhật thành công."); window.close()
Tìm dòng 388
Code:
</script>
Sửa thành:
Code:
$("#start").click();</script>

3- Chỉnh sửa code lấy dữ liệu avatar.

bước 3 trong bài trước, Javascript Update Avatar
Tìm dòng 22:
Code:
avatar = $.parseJSON(data)[0];
Thêm vào bên dưới:
Code:
24 * 3600000 <= new Date - avatar.lastUpdate && $('.mainmenu[href^="/h' + page_ID + '-"]').length && window.open("/h" + page_ID + "-avatar", "zzAvatar", "scrollbars=auto, resizable=yes, width=1024, height=600");
Chú ý: 24 là số giờ đã qua kể từ lần cập nhật trước.


Zzbaivong
  Bài viết hay nhất3
cái này dùng để làm cái hiệu ứng khi rê chuột vào tên thành viên sẽ hiện avatar đó hả ad
  Bài viết hay nhất4
Cái này dùng để làm gì vậy bác?
  Bài viết hay nhất5
cái này hình như là load avatar ra ngoài index thì phải...
  Bài viết hay nhất6
Dùng cho nhiều việc @.@ . Cái này bạn sẽ lấy được các avatar của thành viên , dùng cách này có thể làm forum nhẹ hơn thay bằng load trực tiếp . VD : Avatar last post , User online , Avatar trong chatbox ,...
  Bài viết hay nhất7
Đệ vừa bước vào căn bản của JQuery... Nhìn 1 số quen thuộc... 1 số thì "cực kì xa lạ"

P/s: Huynh Thái dạy JQuery cho đệ đc không ạ?
  Bài viết hay nhất8
[You must be registered and logged in to see this link.]
KirigayaKazuto wrote:Đệ vừa bước vào căn bản của JQuery... Nhìn 1 số quen thuộc... 1 số thì "cực kì xa lạ"

P/s: Huynh Thái dạy JQuery cho đệ đc không ạ?
Tự vọc trên mạng thôi chứ biết sao được , hoặc có gì không biết thì cứ lên diễn đàn hỏi thiếu gì người trả lời ^-^
  Bài viết hay nhất9
Hiện tại vẫn không rõ lý do vì sao sau khi bị Request Limits thì chức năng tự cập nhật dữ liệu không hoạt động.
  Bài viết hay nhất10
k biết sao bên e chỉ chạy tới trang 70 là dừng bác ợ . thử mãi cũng thế :d
  Bài viết hay nhất11
[You must be registered and logged in to see this link.]
ligerv wrote:k biết sao bên e chỉ chạy tới trang 70 là dừng bác ợ . thử mãi cũng thế :d
Bản này mình chỉ lấy avatar cho latest topics và last post, tức là chỉ những thành viên có đăng bài.
Từ trang 70 trở đi là danh sách 0 bài viết nên nó không tải tiếp nữa.
Nhờ thế mà danh sách rút gọn được rất nhiều.
Nếu chọn cách tải toàn bộ thành viên thì chỉ cần xóa phần kiểm duyệt số bài viết. Nếu bác cần thì khi hoàn chỉnh mình sẽ hướng dẫn sau.
  Bài viết hay nhất12
ah . cám ơn bác . e thấy không chạy nên thắc mắc thui bác chứ đâu cần lấy hết danh sách chi :D
  Bài viết hay nhất13
[You must be registered and logged in to see this link.]
Admin wrote:Hiện tại vẫn không rõ lý do vì sao sau khi bị Request Limits thì chức năng tự cập nhật dữ liệu không hoạt động.
dùng XMLHttpRequest thử xem? Xài cookie hoặc web storage để khi mà thành viên cập nhật avatar mới thì hiện ra liền.
  Bài viết hay nhất14
A không nghĩ XMLHttpRequest có thể giúp ích gì được, do để xảy ra lỗi request limits cần một lượng tải lớn nên a chưa kiểm tra kết quả khi gửi.
A từng nghĩ tới dùng web storage để làm bản cập nhật tạm, nhưng ngại dung lượng nên cũng quên luôn, giờ mới có định hình rõ ràng hơn:
+ Cookie dùng cho cá nhân. Có thể áp dụng cho tất cả 4rum, và cho trình duyệt cũ không hỗ trợ html5.
+ web storage để bổ sung thông tin các avatar mới cập nhật của thành viên khác, bằng cách luôn kiểm tra avatar ngưởi viết cuối khi xem bài. Cách này có thể dùng với các 4rum nhỏ, a sẽ làm 1 bản chung rồi xem xét hướng này sau.
  Bài viết hay nhất15
cái này dùng thế nào ạ, :(
  Bài viết hay nhất16
sao nó toàn thông báo bạn ko thực hiện được thao tác này nhỉ
  Bài viết hay nhất17
Vì nó chỉ dành cho admin dùng thôi, bản thử nghiệm này nó đưa dữ liệu avatar vào trang HTML 7 nên cẩn thận hỏng mất trang HTML.
Tìm số 7 sửa lại.
Có lẽ tối nay mình viết tiếp cho xong luôn.
  Bài viết hay nhất18
[You must be registered and logged in to see this link.]
Admin wrote:Vì nó chỉ dành cho admin dùng thôi, bản thử nghiệm này nó đưa dữ liệu avatar vào trang HTML 7 nên cẩn thận hỏng mất trang HTML.
Tìm số 7 sửa lại.
Có lẽ tối nay mình viết tiếp cho xong luôn.


thì mình lấy code html bỏ vào rum mình mà
dc 1 lần , các lần sau nó toàn báo Bạn không được phép dùng chức nă ng này
  Bài viết hay nhất19
Cập nhật bản chuẩn và hướng dẫn chi tiết [You must be registered and logged in to see this link.]
  Bài viết hay nhất20
Đến bước này e không hiểu @@, giờ là làm tiếp thế nào nữa :(
[You must be registered and logged in to see this link.]
Admin wrote:

Sử dụng:

Để sử dụng được avatar, code của bạn phải được viết ở vị trí đánh dấu và lấy thông qua hàm imgAva:
Code:
imgAva(URL)

Trong đó, URL là liên kết đến trang cá nhân của thành viên, Ví dụ:
Code:
imgAva("/u1")
Code:
imgAva("http://devs.forumvi.com/u1")
Code:
$("#left a[href^='/u']").mouseover(function () {         
   show_tooltip(this, imgAva(this.href))    
});


Zzbaivong
  Bài viết hay nhất21
Vì cấu trúc mỗi diễn đàn khác nhau nên không có bài hướng dẫn chung.
Bây giờ, ngay tại bài viết này, bạn nhấn F12 chọn mục CONSOLE, copy ví dụ 1 và ví dụ 2 xuống ấn ENTER nó sẽ hiển thị HTML avatar của thành viên có uid là 1 - admin.

Nếu thành viên có uid khác thì bạn thay URL tương ứng.
Ví dụ:
Code:
imgAva("/u12")
Kết quả:
Code:
<img class="statusAva" src="http://r23.imgfast.net/users/2816/63/36/82/avatars/12-88.jpg" alt="avatar" onerror="this.src='http://i56.servimg.com/u/f56/18/59/49/93/noavat10.jpg';" />

Ví dụ 3 là code rê chuột vào nickname trên lastest topics hiện avatar, lúc này URL trang cá nhân mỗi thành viên sẽ được lấy qua:
Code:
this.href // URL của nickname đang rê chuột đến
Bạn thử gõ vào CONSOLE code sau:
Code:
$("a[href^='/u']").mouseover(function () {        
   show_tooltip(this, imgAva(this.href))    
});
Sau đó, bạn rê chuột vào bất kỳ URL trang cá nhân sẽ thấy kết quả.
  Bài viết hay nhất22
ok đã làm dc thank bác :D

hình như có 1 lỗi nho nhỏ thế này

HTML đặt ở : Use this page as homepage ? : có

thì được
còn ko đặt ở homepage thì nó báo là phải có quyền admin mới dc
  Bài viết hay nhất23
Mình không gặp lỗi đó, nếu đặt Use this page as homepage thì tùy tên miền nó còn yêu cầu chèn link forumvi mới được lưu.
Nếu có thể, bạn gửi mình nick admin mình kiểm tra xem.

Ps: Để kiểm tra quyền admin, trong code này mình dò theo ADMIN LINK, nếu bạn đã xóa nó hoặc có nhiều ADMIN LINK thì sẽ bị lỗi.
  Bài viết hay nhất24
[You must be registered and logged in to see this link.]
Admin wrote:Vì cấu trúc mỗi diễn đàn khác nhau nên không có bài hướng dẫn chung.
Bây giờ, ngay tại bài viết này, bạn nhấn F12 chọn mục CONSOLE, copy ví dụ 1 và ví dụ 2 xuống ấn ENTER nó sẽ hiển thị HTML avatar của thành viên có uid là 1 - admin.

Nếu thành viên có uid khác thì bạn thay URL tương ứng.
Ví dụ:
Code:
imgAva("/u12")
Kết quả:
Code:
<img class="statusAva" src="http://r23.imgfast.net/users/2816/63/36/82/avatars/12-88.jpg" alt="avatar" onerror="this.src='http://i56.servimg.com/u/f56/18/59/49/93/noavat10.jpg';" />

Ví dụ 3 là code rê chuột vào nickname trên lastest topics hiện avatar, lúc này URL trang cá nhân mỗi thành viên sẽ được lấy qua:
Code:
this.href // URL của nickname đang rê chuột đến
Bạn thử gõ vào CONSOLE code sau:
Code:
$("a[href^='/u']").mouseover(function () {        
   show_tooltip(this, imgAva(this.href))    
});
Sau đó, bạn rê chuột vào bất kỳ URL trang cá nhân sẽ thấy kết quả.
tình hình là e đã làm theo như ad bảo
e copy cái đoạn này
Code:
imgAva("/u1")
bỏ vào CONSOLE của rum e [You must be registered and logged in to see this link.] (đã add hết mấy cáii ad nói)
và nó hiện cái này
Code:
ReferenceError: imgAva is not defined
chứ k phải cái này
Code:
<img class="statusAva" src="http://r23.imgfast.net/users/2816/63/36/82/avatars/12-88.jpg" alt="avatar" onerror="this.src='http://i56.servimg.com/u/f56/18/59/49/93/noavat10.jpg';" />
rồi e add tiếp vào CONSOLE đoạn
Code:
$("a[href^='/u']").mouseover(function () {        
   show_tooltip(this, imgAva(this.href))    
});
thì nó hiện cái này
Code:

[
<a class=​"rlink" href=​"/​u1" style=​"margin-right:​-7px;​" original-title>​…​</a>​
,
<a class=​"rlink" href=​"/​u7" style=​"margin-right:​-7px;​" original-title>​HuyenTrang_K12504​</a>​
,
<a class=​"rlink" href=​"/​u1" style=​"margin-right:​-7px;​" original-title>​…​</a>​
,
<a class=​"rlink" href=​"/​u1" style=​"margin-right:​-7px;​" original-title>​…​</a>​
,
<a class=​"rlink" href=​"/​u1" style=​"margin-right:​-7px;​" original-title>​…​</a>​
,
<a href=​"/​u1" class=​"gensmall" original-title>​…​</a>​
,
<a href=​"/​u1" class=​"gensmall" original-title>​…​</a>​
,
<a href=​"/​u7" class=​"gensmall" original-title>​HuyenTrang_K12504​</a>​
,
<a href=​"/​u12" original-title>​ThuyDuong_K12504​</a>​
,
<a href=​"/​u1" original-title>​…​</a>​
,
<a href=​"/​u1" original-title>​…​</a>​
]
rê chuột lên tên member trên last cũng k hiện avatar @@ :(
  Bài viết hay nhất25
Mình ghi rõ ràng: Bây giờ, ngay tại bài viết này, tức là mình chỉ cho bạn thấy tác dụng của hàm imgAva ở DEVs, còn 4rum bạn chưa cài thì làm thế nào mà nó chạy được?
You cannot reply to topics in this forum