Làm theo hướng dẫn nha. Code An vừa hoàn thành trong chiều nay nên có thể còn lỗi. Nếu có lỗi thì thông báo cho An sau.
Chỉ làm like thôi, thêm unlike tốn tài nguyên nên An bỏ rồi..
Có phần mã hóa idcmt và uid, bạn nào dùng có thể sửa đổi mã hóa đề phòng hack like.
+ Thêm Mã Twig
{%set sdata=''%} {{_self.env.addGlobal('sdata',sdata)}}
+ Thêm shoutbox history, đây là data like
Ô 1:
{%set msg=message_list|split('[-msS-]')%} {%set sdata=_self.env.getGlobals()['sdata']%} {%set sdata=sdata~message_list%}{{_self.env.addGlobal('sdata',sdata)}} {%set surl=_self.env.getGlobals()['surl']%} {%if msg|length>=99%} {%if surl is empty%} {%set url=''%} {%else%} {%set url=surl%} {%endif%} {%else%} {%if surl is not empty%} {%set url=surl%} {%else%} {%set url=form_url%} {%endif%} {%endif%} {{_self.env.addGlobal('surl',url)}}
Ô 2:
{{message}}[-msS-]
+ Thêm Twig
{%macro mahoa(b)%}{%set k=".abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"%}{%for i in 0..b|length-1%}{{k|slice(b|slice(i,1)*1,1)}}{%endfor%}{%endmacro%} {%macro giaima(f)%}{%set k=".abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"%}{%for i in 0..f|length-1%}{{k|split(f|slice(i,1))[0]|length}}{%endfor%}{%endmacro%} {%macro like(idcmt,type='button')%} {%set uid=api.user_id%}{%set count=0%}{%set list=''%}{%set suid=like.mahoa(uid)%}{%set key=idcmt~'['~suid%}{%set sdata=_self.env.getGlobals()['sdata']|split('[-msS-]')%}{%set surl=_self.env.getGlobals()['surl']%}{%set form%}<form action="{{surl}}" method="post" style="display: inline-block;"><input type="hidden" name="text" value="{{key}}"/><input type="submit" value="Thích" style="background-color: transparent; border: none; color: #3b5998; padding: 0px;"/></form>{%endset%} {%if type=='button'%} {%if key not in ('<msS>'~sdata|join('</msS>'))%}{{form}}{%else%}{%endif%} {%endif%} {%for i in 0..sdata|length%} {%if sdata[i] is not empty%} {%if idcmt==sdata[i]|split('[')[0]%} {%set count=count+1%} {%set nick=like.giaima(sdata[i]|split('[')[1])%} {%if nick not in ('!'~list)%} {%set list=list~nick~'[-like-]'%} {%endif%} {%endif%} {%endif%} {%endfor%} {%if type=='count'%} <span style="display:inline-block">{{count}}</span> {%endif%} {%if type=='list'%}{%set list=list|split('[-like-]')%} <span style="display:inline-block">{%set user_like%}{%for i in 0..list|length-1%}{%if list[i] is not empty%}{{api.u.get(list[i]).nick}} {%endif%}{%endfor%}{%endset%}{{user_like}}</span> {%endif%} {%endmacro%} {%macro like_all(idcmt)%} {%set idcmt=like.mahoa((idcmt|date('YmdHis')))%} <img src="/files/1049801/slike.png" style="display:inline-block"/> {{like.like(idcmt,'count')}}{%if api.user_id is not empty%}{{like.like(idcmt,'button')}}{%endif%} {{like.like(idcmt,'list')}} {%endmacro%} {%import _self as like%} {{_self.env.addGlobal('like',like)}}
macro like_all như là Template like sửa lại cho phù hợp theo ý bạn
+ button là hiện nút thích
+ count là hiện số like
+ list là danh sách uid hay người like, nó xử lí ở phía trên có thể sửa theo ý bạn
+ Nếu muốn hiện Bạn và bao nhiêu người thích thì thêm điều kiện {%if api.user_id in ('~'~list|join(''))%} để kiểm tra
----------------------------------------------------------------------
Cuối cùng là Thêm shoutbox chat, nơi hiện like
Ô 1: mặc định
<div class="shoutbox"> {% if loged %} <form action="{{form_url}}" method="post"> <textarea rows="3" cols="20" name="text" style="width:auto"></textarea><br/> <input type="submit" value="Thêm tin nhắn"/></form> {% else %} Bạn phải đăng nhập để đăng tin nhắn {% endif %} <div class="shoutbox_message">{{message_list}}</div> {{paging_def}} </div>
Ô 2:
<div style="border:1px solid#eee;padding:2px;text-align:left"> {{userphoto}} {{nick}}: {{message}}<br/> {{like.like_all(message_date|date('U'))}} </div>
![[OFF]](/assets/images/off.gif)
![[ON]](/assets/images/on.gif)