[TUTs] fb_Vote đánh giá bài viết và thông báo lên tường

  Bài viết hay nhất1
First topic message reminder :

fb_Vote đánh giá bài viết và thông báo lên tường


fb_Vote sẽ thay đổi giao diện nút #vote mặc định thành giao diện nút like của #facebook().

Chức năng


  1. Vote plus chuyển thành nút Thích, có thể gửi một lời khen lên tường người viết. (nếu họ cho phép)
  2. Vote minus chuyển thành nút Báo xấu, có thể gửi một báo cáo đến Ban quản trị diễn đàn.
  3. Các thông số hiển thị ngay bên cạnh nút bấm.
  4. Cả 2 nút đều có thể gửi thông điệp trực tiếp.
  5. Thông điệp không được gửi nếu người dùng không nhấn Gửi.
  6. Có một thông điệp mặc định nếu người dùng không nhập nội dung.


Demo


fb_Vote chưa nhấn


Sau khi nhấn có thể gửi tin


Hướng dẫn


Bước 1

Tắt kiểm duyệt và kích hoạt chức năng Vote, Report của diễn đàn.

ACP >> QLTT >> Forum >> Security
Unauthorize unofficial forms to post messages and private messages on the forum : Không

ACP >> Modules >> Points and reputation >> Points system
Activate points system :
Display average points per message :

ACP >> QLTT >> Reports >> Report Post Hack - Configuration
Report status : Members
Allows users to report their own posts. Self-Reports :
Allows your users to edit their own reports. Report edit by users :


Bước 2

ACP >> Display >> Pictures and Colors >> Colors >> CSS Stylesheet

Code:
/* fb_Vote - DEVs.forumvi.com */
.vote-Zzbaivong, .vote-Zzbaivong *,.vote-Zzbaivong *:before,.vote-Zzbaivong *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
.vote-Zzbaivong{margin-left:13em} /* 13em là khoảng cách đến mép trái, sửa nó về 0 hoặc số khác nếu bị lệch */
.vote-Zzbaivong{float:left;height:26px;line-height:24px;position:relative;text-align:left;white-space:nowrap}
.vote-plus-post,.vote-minus-post{z-index:10;position:absolute;top:32px;left:0;display:none;width:250px;background:#FFF;border:1px solid #F2F2F2;box-shadow:4px 4px 7px 0 #999;padding:5px}
.vote-minus-post{left:120px}
.vote-note{height:20px;line-height:20px;font-size:11px;background:#ffffd3;border:1px solid #F7EB93;margin-bottom:2px;padding:0 5px}
.vote-mess{width:200px;resize:vertical;min-height:40px;height:40px}
.vote-Zzbaivong .vote-send{width:36px;margin-top:0!important;margin-left:2px;cursor:pointer;text-align:center;vertical-align:top;height:40px;background:#0085FF;border:1px #87CEEB;color:#FFF}
.vote-plus-post:before,.vote-minus-post:before{content:'';display:inline-block;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #E2E2E2;position:absolute;left:10px;width:10px;right:-10px;top:-10px}
.vote-plus-post:after,.vote-minus-post:after{content:'';display:inline-block;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:9px solid #fff;position:absolute;left:11px;right:-9px;width:9px;top:-9px}
.vote-plus{background:url(http://i57.servimg.com/u/f57/17/05/17/70/like10.png) no-repeat 5px 2px #deeaf7;height:24px;border:1px solid #C8D7EC;color:#5089BE!important;font-family:sans-serif;border-radius:2px;display:inline-block;padding:0 5px 0 25px}
.vote-plus:hover{border-color:#6A9AD6}
.vote-plus[href="javascript:;"]{color:#666!important;background-color:#DDD;cursor:no-drop;background-image:url(http://i57.servimg.com/u/f57/17/05/17/70/gpqbxh10.png);border-color:#CCC}
.vote-time{position:relative;border-radius:2px;display:inline-block;height:24px;line-height:22px;border:1px solid #D8D7D7;margin:auto 5px;padding:0 5px}
.vote-time:before{content:'';display:inline-block;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #CCC;position:absolute;left:-6px;width:6px;top:5px}
.vote-time:after{content:'';display:inline-block;border-bottom:5px solid transparent;border-top:5px solid transparent;border-right:5px solid #fff;position:absolute;left:-5px;width:5px;top:6px}
.vote-minus{margin-left:20px;color:#666!important}
.vote-minus:hover{color:red!important}
.vote-minus[href="javascript:;"]{color:#C5C5C5!important;cursor:no-drop}

Bước 3

ACP >> Display >> QLTT >> Templates >> viewtopic_body

Tìm và xóa đoạn sau:
Code:
<!-- BEGIN switch_vote_active -->
...
<!-- END switch_vote_active -->
Tìm:
Code:
<div class="post-options profile_{postrow.displayed.PROFILE_POSITION}">
hoặc:
Code:
<div class="post-options">
Và thêm vào bên dưới nó code sau:
Code:
<div class="vote-Zzbaivong">
   <!-- BEGIN switch_vote_active -->
   <a class="vote-plus" href="<!-- BEGIN switch_vote -->{postrow.displayed.switch_vote_active.switch_vote.U_VOTE_PLUS}<!-- END switch_vote -->">
    Thích
    </a>
   <span class="vote-time plus-time">0</span>
   <a class="vote-minus" href="<!-- BEGIN switch_vote -->{postrow.displayed.switch_vote_active.switch_vote.U_VOTE_MINUS}<!-- END switch_vote -->">
    Báo xấu
    </a>
   <span class="vote-time minus-time">0</span>
   <div class="vote-plus-post vote-cmt">
      <p class="vote-note">Gửi một tin nhắn lên tường.</p>
      <textarea class="vote-mess"></textarea>
      <input class="vote-send" tyle="button" value="Gửi" />
   </div>
   <div class="vote-minus-post vote-cmt">
      <p class="vote-note">Gửi báo cáo lỗi về bài viết này.</p>
      <textarea class="vote-mess"></textarea>
      <input class="vote-send" tyle="button" value="Gửi" />
   </div>
   <input class="vote-tip" type="hidden" value="<!-- BEGIN switch_bar -->{postrow.displayed.switch_vote_active.L_VOTE_TITLE}<!-- END switch_bar --><!-- BEGIN switch_no_bar -->{postrow.displayed.switch_vote_active.L_VOTE_TITLE}<!-- END switch_no_bar -->" />
   <!-- END switch_vote_active -->
</div>
Thêm script dưới đây vào cuối temp viewtopic_body:
Code:
<script type="text/javascript">
 //<![CDATA[
 $(".vote-Zzbaivong").each(function() {
   var b = $(this);
   if (b.is(":empty")) b.html('<a class="vote-plus" href="">Thích</a><span class="vote-time plus-time">0</span><a class="vote-minus" href="">Báo xấu</a><span class="vote-time minus-time">0</span>');
   else {
      var a = b.find(".vote-tip").val(),
         c;
      /Message\sreputation\s:/.test(a) ? (c = a.split(/\W/), a = Math.round(parseInt(c[4], 10) / 100 * parseInt(c[7], 10)), c = parseInt(c[7], 10) - a) : a = c = 0;
      b.find(".plus-time").text(a);
      b.find(".minus-time").text(c)
   }
});
$(document).click(function(b) {
   $(".vote-cmt").fadeOut()
});
$(".vote-Zzbaivong").click(function(b) {
   b.stopPropagation()
});
$(".vote-plus, .vote-minus").one("click", function(b) {
   b.preventDefault();
   var a = $(this);
   b = a.attr("href");
   /us\&p_vote\=/.test(this.href) && (a.parent().children(".vote-plus, .vote-minus").attr("href", "javascript:;"), a.next(".vote-time").text(function() {
      return parseInt($(this).text(), 10) + 1
   }), a.parent().find(".vote-plus").css("background-image", "url(http://i57.servimg.com/u/f57/17/05/17/70/preloa10.gif)"), $.get(b, function() {
      a.parent().children(".vote-plus").removeAttr("style")
   }), a.siblings("." + a.attr("class") +
      "-post").fadeIn().children(".vote-mess").focus())
});
$(".vote-send").one("click", function() {
   var b = $(this),
      a = b.closest(".post"),
      c = a.find("a[href^='/report']").attr("href"),
      d = b.parent().children(".vote-mess").val(),
      f = b.parent().children(".vote-note");
   f.text("Đang xử lý...");
   if ("vote-plus-post vote-cmt" == b.parent().attr("class")) {
      var e = "http://" + location.host + location.pathname + "#" + c.replace(/.*p=(\d+).*/, "$1"),
         c = $.trim(a.find(".user a[href^='/u']:not(:has(img)):first").text()),
         a = a.find(".user a[href^='/u']:first").attr("href").replace(/.*\/u(\d+).*/, "$1"),
         e = "Mình thích bài viết của bạn tại [url=" +
         e + "]" + document.title + "[/url]";
      d.replace(/\s/g, "").length && (e = e + "[quote]" + d + "[/quote]");
      $.post("/privmsg", {
         subject: "Bài viết hay",
         message: e,
         username: c,
         u: a,
         mode: "post_profile",
         folder: "profile",
         post: "Send"
      }, function() {
         f.text("Tin nhắn đã được gửi");
         b.closest(".vote-cmt").delay(300).fadeOut()
      })
   } else 3 >= d.replace(/\s/g, "").length && (d = "Bài viết vi phạm nội quy diễn đàn."), $.post(c, {
      message: d,
      post: "Save"
   }, function() {
      f.text("Báo cáo đã được gửi");
      b.closest(".vote-cmt").delay(300).fadeOut()
   })
});
$(".vote-Zzbaivong > a[href='']").attr("href", "javascript:;");
 //]]>
</script>


Cách dùng khác


  1. Không viết lên tường: http://devs.forumvi.com/t15p45-code-fb_vote-danh-gia-bai-viet-va-thong-bao-len-tuong#2170
  2. Tự động viết lên tường: http://devs.forumvi.com/t15p60-code-fb_vote-danh-gia-bai-viet-va-thong-bao-len-tuong#2195


Tác giả

Zzbaivong (devs.forumvi.com)
  Bài viết hay nhất61
Anh baivong, xin chỉ em cách khi nhấn thích sẽ tự động gửi lời cảm ơn lên tường được không ạ.
  Bài viết hay nhất62
CSS
Code:
/* fb_Vote - DEVs.forumvi.com */
.vote-Zzbaivong, .vote-Zzbaivong *,.vote-Zzbaivong *:before,.vote-Zzbaivong *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
.vote-Zzbaivong{margin-left:2em;float:left;height:26px;line-height:24px;position:relative;text-align:left;white-space:nowrap}
.vote-plus-post,.vote-minus-post{z-index:10;position:absolute;top:32px;left:0;display:none;width:250px;background:#FFF;border:1px solid #F2F2F2;box-shadow:4px 4px 7px 0 #999;padding:5px}
.vote-plus{background:url(http://i57.servimg.com/u/f57/17/05/17/70/like10.png) no-repeat 5px 2px #deeaf7;height:24px;border:1px solid #C8D7EC;color:#5089BE!important;font-family:sans-serif;border-radius:2px;display:inline-block;padding:0 5px 0 25px}
.vote-plus:hover{border-color:#6A9AD6}
.vote-plus[href="javascript:;"]{color:#666!important;background-color:#DDD;cursor:no-drop;background-image:url(http://i57.servimg.com/u/f57/17/05/17/70/gpqbxh10.png);border-color:#CCC}
.vote-time{background:#FFF;position:relative;border-radius:2px;display:inline-block;height:24px;line-height:22px;border:1px solid #D8D7D7;margin:auto 5px;padding:0 5px}
.vote-time:before{content:'';display:inline-block;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #CCC;position:absolute;left:-6px;width:6px;top:5px}
.vote-time:after{content:'';display:inline-block;border-bottom:5px solid transparent;border-top:5px solid transparent;border-right:5px solid #fff;position:absolute;left:-5px;width:5px;top:6px}
.vote-minus{margin-left:20px;color:#666!important}
.vote-minus:hover{color:red!important}
.vote-minus[href="javascript:;"]{color:#C5C5C5!important;cursor:no-drop}


Temp
Code:
<div class="vote-Zzbaivong">
   <!-- BEGIN switch_vote_active -->
   <a class="vote-plus" href="<!-- BEGIN switch_vote -->{postrow.displayed.switch_vote_active.switch_vote.U_VOTE_PLUS}<!-- END switch_vote -->">
      Thích
   </a>
   <span class="vote-time plus-time">0</span>
   <a class="vote-minus" href="<!-- BEGIN switch_vote -->{postrow.displayed.switch_vote_active.switch_vote.U_VOTE_MINUS}<!-- END switch_vote -->">
      Báo xấu
   </a>
   <span class="vote-time minus-time">0</span>
   <input class="vote-tip" type="hidden" value="<!-- BEGIN switch_bar -->{postrow.displayed.switch_vote_active.L_VOTE_TITLE}<!-- END switch_bar --><!-- BEGIN switch_no_bar -->{postrow.displayed.switch_vote_active.L_VOTE_TITLE}<!-- END switch_no_bar -->" />
   <!-- END switch_vote_active -->
</div>


javascript
Code:
<script type="text/javascript">
   //<![CDATA[
   $(".vote-Zzbaivong").each(function() {
      var a = $(this);
      if (a.is(":empty")) a.html('<a class="vote-plus" href="">Thích</a><span class="vote-time plus-time">0</span><a class="vote-minus" href="">Báo xấu</a><span class="vote-time minus-time">0</span>');
      else {
         var b = a.find(".vote-tip").val(),
            c;
         /Message\sreputation\s:/.test(b) ? (c = b.split(/\W/), b = Math.round(parseInt(c[4], 10) / 100 * parseInt(c[7], 10)), c = parseInt(c[7], 10) - b) : b = c = 0;
         a.find(".plus-time").text(b);
         a.find(".minus-time").text(c)
      }
   });
   $(document).click(function(a) {
      $(".vote-cmt").fadeOut()
   });
   $(".vote-Zzbaivong").click(function(a) {
      a.stopPropagation()
   });
   $(".vote-plus, .vote-minus").one("click", function(a) {
      a.preventDefault();
      var b = $(this);
      a = b.attr("href");
      /us\&p_vote\=/.test(this.href) && (b.parent().children(".vote-plus, .vote-minus").attr("href", "javascript:;"), b.next(".vote-time").text(function() {
         return parseInt($(this).text(), 10) + 1
      }), b.parent().find(".vote-plus").css("background-image", "url(http://i57.servimg.com/u/f57/17/05/17/70/preloa10.gif)"), $.get(a, function() {
         b.parent().children(".vote-plus").removeAttr("style")
      }));
      a = $(this);
      var b = a.closest(".post"),
         c = b.find("a[href^='/report']").attr("href");
      a.hasClass("vote-plus") ? (a = "http://" + location.host + location.pathname + "#" + c.replace(/.*p=(\d+).*/, "$1"), c = $.trim(b.find(".user a[href^='/u']:not(:has(img)):first").text()), b = b.find(".user a[href^='/u']:first").attr("href").replace(/.*\/u(\d+).*/, "$1"), a = "Mình thích bài viết của bạn tại [url=" + a + "]" + document.title + "[/url]", $.post("/privmsg", {
         subject: "Bài viết hay",
         message: a,
         username: c,
         u: b,
         mode: "post_profile",
         folder: "profile",
         post: "Send"
      })) : $.post(c, {
         message: "Bài viết vi phạm nội quy diễn đàn.",
         post: "Save"
      })
   });
   $(".vote-Zzbaivong > a[href='']").attr("href", "javascript:;");
   //]]>
</script>
  Bài viết hay nhất63
cám ơn anh rất nhiều.
  Bài viết hay nhất64
Em làm như hướng dẫn nhưng sao nút thích và báo xấu không hoạt động vậy?
Demo: http://thegioi-tinhoc.forumvi.com/t6-topic#10
  Bài viết hay nhất65
nick test?
  Bài viết hay nhất66
alo
The author of this message was banned from the forum - See the message
  Bài viết hay nhất68
@tinhcoanhgapem wrote:Em làm như hướng dẫn nhưng sao nút thích và báo xấu không hoạt động vậy?
Demo: http://thegioi-tinhoc.forumvi.com/t6-topic#10
Chưa kích hoạt Points system, xem bước 1

@Gang wrote:giờ em thấy chỉ dùng đc cách ko viết hay tự động viết lên tường thôi, dùng cách chính như trên ko đc (khi bấm gửi nó xử lý hoài và load liên miên ko thành công)
Đã sửa viewtopic_body, mất những thành phần chính thì làm muôn đời cũng thế.
  Bài viết hay nhất69
Thanks Anh Zzbaivong! Đã thành công!
  Bài viết hay nhất70
tình trạng này mình bị lâu rùi hôm nay mới xem lại
DEMO
http://toilait.forumvi.com/t1161p60-topic#9300

tình trạng là khi mình gửi thông điêp nó cứ dứng yên ở đó mà hok chịu đi..! bác nào biết giúp mình với
nick test :
NAME: user123
pass: user123456


  Bài viết hay nhất71
đã làm như này chưa bước 1 ở topic này chưa thế bạn http://devs.forumvi.com/t15-code-fb_vote-danh-gia-bai-viet-va-thong-bao-len-tuong
  Bài viết hay nhất72
Chưa kích hoạt Reports
Xem lại Bước 1

Nếu đã kích hoạt thì xem trong viewtopic_body còn {postrow.displayed.REPORT_IMG} hay không, nếu thiếu thì bổ sung vào.
  Bài viết hay nhất73
ok thanh 2 bác nhìu nha đã làm dc
  Bài viết hay nhất74
Ad, em gặp lỗi như thế này, giờ em muốn xóa cái này, để đưa về mặc định phải làm sao ạ, em cảm ơn trc :D
  Bài viết hay nhất75
@nghiahungdn2000 wrote:Ad, em gặp lỗi như thế này, giờ em muốn xóa cái này, để đưa về mặc định phải làm sao ạ, em cảm ơn trc :D
Lỗi như thế này là lỗi như thế nào?
Muốn đưa về mặc định thì làm ngược lại các bước là xong
The author of this message was banned from the forum - See the message
  Bài viết hay nhất77
@ZuniThoang wrote:k thấy hiện chô để viết và gửi, chỉ có Thích và báo sấu thôi ad ui :3
đã nhấn vào thích chưa bạn
để hiện khung textarea đó thì phải nhấn vào thích thì mới hiện nha
hoặc bạn có thể quăng demo onl + acc test lên đây để mọi người xem lỗi nha :)
  Bài viết hay nhất78
Bee dùng cái code không tự thông báo lên wall, thì xài ngon lành, like, báo cáo tốt. Nhưng lâu lâu đăng 1 topic thì kéo xuống xem thì thấy nó tự like 1 cái, nhiều khi thì tự báo cáo 1 cái :( khó hiểu lắm huynh :((
  Bài viết hay nhất79

dtpn wrote:Bee dùng cái code không tự thông báo lên wall, thì xài ngon lành, like, báo cáo tốt. Nhưng lâu lâu đăng 1 topic thì kéo xuống xem thì thấy nó tự like 1 cái, nhiều khi thì tự báo cáo 1 cái :( khó hiểu lắm huynh :((

Có thể là do bạn xóa bài đã like do đó các bài viết mới tiếp theo nó sẽ cộng lại.
  Bài viết hay nhất80

@markai30 wrote:
dtpn wrote:Bee dùng cái code không tự thông báo lên wall, thì xài ngon lành, like, báo cáo tốt. Nhưng lâu lâu đăng 1 topic thì kéo xuống xem thì thấy nó tự like 1 cái, nhiều khi thì tự báo cáo 1 cái :( khó hiểu lắm huynh :((

Có thể là do bạn xóa bài đã like do đó các bài viết mới tiếp theo nó sẽ cộng lại.
Ô chắc đúng vậy rồi, vì Bee có xóa vài topic test ấy :D cảm ơn markai30 :D
  Bài viết hay nhất81
Mình cho thẻ <span class="vote-time plus-time">Số like</span> vào trong <a class="vote-plus votez" href="javascript:;"></a> với cấu trúc như sau

Code:
<a class="vote-plus votez" href="javascript:;"> <i class="fa suki fa-2"></i>Suki<span class="vote-time plus-time">1</span></a>

Vậy phải chỉnh sửa script như thế nào để nó load số like mới vậy BaiVong?
  Bài viết hay nhất82
Bạn giữ nguyên cấu trúc rồi dùng css sửa lại giao diện sẽ dễ hơn.
The author of this message was banned from the forum - See the message
  Bài viết hay nhất84
Nếu nó báo đang xử lý tức là lỗi không tìm thấy 1 thành phần nào đó, ví dụ như thông tin người viết.
FM có thể sửa được temp, lại có 4 phiên bản khác nhau nên khó có thể viết 1 code chuẩn cho tất cả được.
The author of this message was banned from the forum - See the message
You cannot reply to topics in this forum