立即注册 登录
彼岸网 返回首页

天香公主的个人空间 http://www.bian-wang.com/discuz/?10005 [收藏] [复制] [分享] [RSS] txgz999@yahoo.com

日志

给微博添加收藏功能

热度 2已有 1002 次阅读2016-5-21 06:57 PM |个人分类:Discuz| 浏览器, 数据库, 文章, 微博, 记录

Discuz提供了一个收藏功能,类似于浏览器里的收藏夹。它可以用来收藏版块,帖子,日志,相册和文章。用户可以在相关内容的网页里看到'收藏'按钮或超链点击后来将内容加入收藏,并在快捷导航里点击'收藏'图标来进入收藏网页里看到所有加入收藏的内容(网站要在管理中心的界面->导航设置->快捷导航里将'收藏'设为可用)。网友sesemule希望能收藏微博/记录,所以写本文讨论下如何实现这个功能。所有代码都是效仿现有的其它内容收藏的相关代码。


1)在记录页里给每个记录(不包括回复)加收藏链接
在文件 template/default/home/space_doing.htm 里的下面这句 < a href="javascript:;" onclick="docomment_form($doid, 0, '$key');">{lang reply}</a><span class="pipe">|</span> 后加入 < a href="home.php?mod=spacecp&ac=favorite&type=doing&id=$doid&spaceuid=$dv[uid]&handlekey=favoritedoinghk_{$doid}" id="a_favorite_{$doid}" onclick="showWindow(this.id, this.href, 'get', 0);">{lang favorite}</a><span class="pipe">|</span>
2)将用户决定收藏的记录存入数据库。 所有的收藏都存在数表 home_favorite 里,其中的表列 idtype 记载了收藏内容的类型, id记载了在该类型内的内容的primary key的值。
2a)将文件 source/include/spacecp/spacecp_favorite.php 里的下面这句 $_GET['type'] = in_array($_GET['type'], array("thread", "forum", "group", "blog", "album", "article", "all")) ? $_GET['type'] : 'all'; 改为 $_GET['type'] = in_array($_GET['type'], array("thread", "forum", "group", "blog", "album", "doing", "article", "all")) ? $_GET['type'] : 'all'; 2b)并在同一文件里的下面这段 case 'album': $idtype = 'albumid'; $result = C::t('home_album')->fetch($id, $spaceuid); $title = $result['albumname']; $icon = '<img src="static/image/feed/album.gif" alt="album" class="vm" /> '; break; 后加入 case 'doing': $idtype = 'doid'; $doinginfo = C::t('home_doing')->fetch($id); $title = ($doinginfo['uid'] == $spaceuid) ? $doinginfo['message'] : ''; $icon = '<img src="static/image/feed/doing.gif" alt="doing" class="vm" /> '; break;
3)显示用户收藏的记录
3a)在文件 source/language/home/lang_template.php 里加入 'favorite_doing' => '记录', 3b)将文件 source/include/space/space_favorite.php 里的下面这句 $idtypes = array('thread'=>'tid', 'forum'=>'fid', 'blog'=>'blogid', 'group'=>'gid', 'album'=>'albumid', 'space'=>'uid', 'article'=>'aid'); 改为 $idtypes = array('thread'=>'tid', 'forum'=>'fid', 'blog'=>'blogid', 'group'=>'gid', 'album'=>'albumid', 'doing'=>'doid', 'space'=>'uid', 'article'=>'aid'); 3c)并在同一文件里的下面这句 'albumid'=>'<img src="static/image/feed/album.gif" alt="album" class="t" /> ', 后加入 'doid'=>'<img src="static/image/feed/doing.gif" alt="doing" class="t" /> ', 3d)再在同一文件里的下面这段 case 'albumid': $url = 'home.php?mod=space&uid='.$spaceuid.'&do=album&id='.$id; break; 后加入 case 'doid': $url = 'home.php?mod=space&uid='.$spaceuid.'&do=doing&doid='.$id; break; 3e)在文件 template/default/home/space_favorite.htm 里的下面这句 <!--{elseif $_GET[type] == "album"}-->{lang favorite_album} 后加入 <!--{elseif $_GET[type] == "doing"}-->{lang favorite_doing} 3f)并在同一文件里的下面这句 <!--{if helper_access::check_module('album')}--><li$actives[album]>< a href="home.php?mod=space&do=favorite&type=album">{lang favorite_album}</a></li><!--{/if}--> 后加入 <!--{if helper_access::check_module('doing')}--><li$actives[doing]>< a href="home.php?mod=space&do=favorite&type=doing">{lang favorite_doing}</a></li><!--{/if}-->
5/27/2016补充:答网友问如何象论坛主题贴那样在日志,相册和记录收藏按钮/链接处显示收藏次数。

1)在显示相关网页时在脚本文件里要从数据库里找出收藏次数
1a)日志: 在文件 source/include/space/space_blog.php 里的下面这段 if(!empty($_G['setting']['antitheft']['allow']) && empty($_G['setting']['antitheft']['disable']['blog'])) { helper_antitheft::check($id, 'bid'); } 后加上 $fav_count = C::t('home_favorite')->count_by_id_idtype($id, 'blogid'); 1b)相册: 在文件 source/include/space/space_album.php 里的下面这段 if(empty($count) && !$space['self']) { C::t('home_album')->delete($id); showmessage('to_view_the_photo_does_not_exist', "home.php?mod=space&uid=$album[uid]&do=album&view=me"); } 后加上 $fav_count = C::t('home_favorite')->count_by_id_idtype($id, 'albumid'); 1c)记录: 在文件 source/include/space/space_doing.php 里的下面这段 $query = C::t('home_doing')->fetch_all_search($start, $perpage, 1, $uids, '', $searchkey, '', '' ,'', 1, $doid, $f_index); foreach($query as $value) { if($value['status'] == 0 || $value['uid'] == $_G['uid'] || $_G['adminid'] == 1) { $doids[] = $value['doid']; 后加上 $value['fav_count'] = C::t('home_favorite')->count_by_id_idtype($value['doid'], 'doid');
2)在显示网页的模板文件里加上显示收藏次数的地方
2a)日志: 将文件 template/default/home/space_blog_view.htm 里的下面这行 < a href="home.php?mod=spacecp&ac=favorite&type=blog&id=$blog[blogid]&spaceuid=$blog[uid]&handlekey=favoritebloghk_{$blog[blogid]}" id="a_favorite" onclick="showWindow(this.id, this.href, 'get', 0);" class="oshr ofav">{lang favorite}</a> 改为 < a href="home.php?mod=spacecp&ac=favorite&type=blog&id=$blog[blogid]&spaceuid=$blog[uid]&handlekey=favoritebloghk_{$blog[blogid]}" id="a_favorite" onclick="showWindow(this.id, this.href, 'get', 0);" class="oshr ofav">{lang favorite}<span id="favoritenumber"{if !$fav_count} style="display:none"{/if}>$fav_count</span></a> 2b)相册: 将文件 template/default/home/space_album_view.htm 里的下面这行 < a href="home.php?mod=spacecp&ac=favorite&type=album&id=$album[albumid]&spaceuid=$space[uid]&handlekey=sharealbumhk_{$album[albumid]}" id="a_favorite" onclick="showWindow(this.id, this.href, 'get', 0);" class="oshr ofav">{lang favorite}</a> 改为 < a href="home.php?mod=spacecp&ac=favorite&type=album&id=$album[albumid]&spaceuid=$space[uid]&handlekey=sharealbumhk_{$album[albumid]}" id="a_favorite" onclick="showWindow(this.id, this.href, 'get', 0);" class="oshr ofav">{lang favorite}<span id="favoritenumber" {if !$fav_count} style="display:none" {/if}>$fav_count</span></a> 2c)记录: 将文件 template/default/home/space_doing.htm 里的下面这行 < a href="home.php?mod=spacecp&ac=favorite&type=doing&id=$doid&&spaceuid=$dv[uid]&handlekey=favoritedoinghk_{$doid}" id="a_favorite_{$doid}" onclick="showWindow(this.id, this.href, 'get', 0);">{lang favorite}</a><span class="pipe">|</span> 改为 < a href="home.php?mod=spacecp&ac=favorite&type=doing&id=$doid&&spaceuid=$dv[uid]&handlekey=favoritedoinghk_{$doid}" id="a_favorite_{$doid}" onclick="showWindow(this.id, this.href, 'get', 0);">{lang favorite}<span id="favoritenumber_{$doid}" {if !$dv[fav_count]} style="display:none" {/if}>$dv[fav_count]</span></a><span class="pipe">|</span>
3)在用户确认要收藏后要实时更新收藏次数
3a)将文件 template/default/home/spacecp_favorite.htm 里的下面这行 <form method="post" autocomplete="off" id="favoriteform_{$id}" name="favoriteform_{$id}" action="home.php?mod=spacecp&ac=favorite&type=$type&id=$id&spaceuid=$spaceuid" {if $_G[inajax]}onsubmit="ajaxpost(this.id, 'return_$_GET[handlekey]'{if $type == 'thread'}, null, null, null, 'favoriteupdate()'{/if});"{/if}> 改为 <form method="post" autocomplete="off" id="favoriteform_{$id}" name="favoriteform_{$id}" action="home.php?mod=spacecp&ac=favorite&type=$type&id=$id&spaceuid=$spaceuid" {if $_G[inajax]}onsubmit="ajaxpost(this.id, 'return_$_GET[handlekey]'{if $type == 'thread' || $type == 'album' || $type == 'blog' || $type == 'doing'}, null, null, null, 'favoriteupdate($id)'{/if});"{/if}> 3b) 在文件 static/js/home.js 里添加下面的函数: function favoriteupdate(id) { var obj = $('favoritenumber'); if (!obj) obj = $('favoritenumber_' + id); if (obj) { obj.style.display = ''; obj.innerHTML = parseInt(obj.innerHTML) + 1; } }

注:本文中的代码里的<符号后和a相连时加了一个不应该有的空格,以避免Discuz在保存日志时自动改变日志内容。

发表评论 评论 (19 个评论)

回复 天香公主 2017-5-24 09:29 PM
sesemule: 天香,能不能给收藏夹添加一个“置顶”功能?可以把最近一直在关注的日志置顶,方便从收藏夹进入查看。
http://www.bian-wang.com/discuz/home.php?mod=space&uid=10005&do=blog&id=1745
回复 sesemule 2017-4-28 11:30 PM
天香,能不能给收藏夹添加一个“置顶”功能?可以把最近一直在关注的日志置顶,方便从收藏夹进入查看。
回复 天香公主 2016-5-28 11:49 AM
sesemule: 您说的问题是DISCUZ本来就有的BUG。

但是我之前提及的问题是,点击删除收藏的按钮后,弹出的对话框不显示“确认”,而是“内部错误无法显示”。我怀疑是不是跟 ...
哦,明白了,你说的不是在收藏页里的删除
回复 sesemule 2016-5-28 11:45 AM
天香公主: 你说的对,我在开发站里试了试,在收藏页删掉收藏后,网页里的内容没有更新,要重新进入这个tab才看到被删掉的收藏是消失了。不知这是原有的现象,还是因为我的 ...
您说的问题是DISCUZ本来就有的BUG。

但是我之前提及的问题是,点击删除收藏的按钮后,弹出的对话框不显示“确认”,而是“内部错误无法显示”。我怀疑是不是跟我以前做过的改动冲突了(我以前改动实现了这样的效果:在日志、帖子页面,如果未收藏就显示收藏按钮,如果已收藏就显示取消收藏按钮,点击取消收藏按钮就删除收藏,不用特意进入收藏页面再删除,方便了许多),等明天才能调试了,家里宽带故障,本来在噌邻居的网,他们好像睡觉关闭WIFI了……然后,我也就只好去睡觉了
回复 天香公主 2016-5-28 11:39 AM
sesemule: 呃,但是我好像又发现,——不能删除收藏了? 我再看看哈,是不是我自己的问题。
试了试没改过的网站,在收藏页里删收藏没有立刻更新,要重新进入这个tab才能看到删掉的收藏消失了。和我在开发站里的观察是一样的。
回复 天香公主 2016-5-28 11:27 AM
sesemule: 呃,但是我好像又发现,——不能删除收藏了? 我再看看哈,是不是我自己的问题。
你说的对,我在开发站里试了试,在收藏页删掉收藏后,网页里的内容没有更新,要重新进入这个tab才看到被删掉的收藏是消失了。不知这是原有的现象,还是因为我的改动。我得在个新站里试试。
回复 sesemule 2016-5-28 11:19 AM
天香公主:   
呃,但是我好像又发现,——不能删除收藏了? 我再看看哈,是不是我自己的问题。
回复 天香公主 2016-5-28 11:07 AM
sesemule:    确实是因为没有更新缓存……现在已经好了。没有问题了,不好意思哈,当时测试的时候确实是太匆忙了。
  
回复 sesemule 2016-5-28 11:06 AM
天香公主: 是日志,相册和记录都有问题?会不会是没更新缓存,或者3b)里的新函数放的位置不对?我等会去你网站看看
   确实是因为没有更新缓存……现在已经好了。没有问题了,不好意思哈,当时测试的时候确实是太匆忙了。
回复 天香公主 2016-5-28 10:59 AM
sesemule: 嗯,当时测试是记录有问题。一直没有时间详细测试。稍后再给你反馈。
我刚安装了个新站测试了下日志收藏记数成功,在安装的文件基础上按文中补充里的1a, 2a, 3a, 3b改的。所以应该没有额外的改动了。你如果更新缓存后,记录那还是不工作,请试试日志那看。
回复 sesemule 2016-5-28 09:18 AM
天香公主: 是日志,相册和记录都有问题?会不会是没更新缓存,或者3b)里的新函数放的位置不对?我等会去你网站看看
嗯,当时测试是记录有问题。一直没有时间详细测试。稍后再给你反馈。
回复 天香公主 2016-5-28 09:08 AM
sesemule: 3 a)似乎有点问题,这条改过之后会导致点击收藏的确认按钮之后,收藏框不会自动关闭并提示收藏成功(但事实上已经收藏成功)。 ...
是日志,相册和记录都有问题?会不会是没更新缓存,或者3b)里的新函数放的位置不对?我等会去你网站看看
回复 sesemule 2016-5-27 08:07 PM
天香公主: 我在文末加了个补充回答了你的第二个问题
3 a)似乎有点问题,这条改过之后会导致点击收藏的确认按钮之后,收藏框不会自动关闭并提示收藏成功(但事实上已经收藏成功)。
回复 天香公主 2016-5-27 04:29 PM
sesemule: 有两个问题:
第一,1)中添加的语句中,“spaceuid=$dv[uid]”前面有两个“&&”,这个是否影响代码?
第二,添加了收藏功能之后,我注意到论坛帖子页面是可以显 ...
我在文末加了个补充回答了你的第二个问题
回复 carry0987 2016-5-22 09:59 AM
支持!!功能增強了好多
回复 天香公主 2016-5-22 09:16 AM
sesemule:    很棒!已成功!感觉非常不可思议,天香无所不能!
哈,依样画葫芦
回复 天香公主 2016-5-22 09:09 AM
sesemule: 有两个问题:
第一,1)中添加的语句中,“spaceuid=$dv[uid]”前面有两个“&&”,这个是否影响代码?
第二,添加了收藏功能之后,我注意到论坛帖子页面是可以显 ...
1)是我的疏忽,去掉一个&吧
回复 sesemule 2016-5-22 08:49 AM
有两个问题:
第一,1)中添加的语句中,“spaceuid=$dv[uid]”前面有两个“&&”,这个是否影响代码?
第二,添加了收藏功能之后,我注意到论坛帖子页面是可以显示收藏数量的,但是包括我们刚刚添加的记录还有日志、相册等却不显示收藏数量;请问这个收藏数量能否加上,“收藏”就等于“喜爱”,有了这个数字就可以代替“赞”功能了。
回复 sesemule 2016-5-22 08:21 AM
   很棒!已成功!感觉非常不可思议,天香无所不能!

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

小黑屋|Archiver|彼岸网  

Powered by Discuz! X3.1 © 2001-2014 Comsenz Inc.
GMT-4, 2017-9-21 06:57 PM , Processed in 0.061084 second(s), 19 queries.

返回顶部