网易盖楼 java_网易盖楼回复的简易实现

本文介绍了如何实现类似网易盖楼的回复功能,包括数据库表结构设计、添加回复的关键代码以及查询回复并以盖楼方式显示的方法。通过示例代码详细展示了如何处理引用回复,提供了一个改进博客园现有回复体验的方案。
摘要由CSDN通过智能技术生成

前些日子写了篇博客,网友给予了很多的评论,在查看及回复评论的过程中,也是发现博客园现有回复的不太好,举例如下,现有的回复如下图所示:

b7c93fbf0679b5b598348cf745cdcd7c.png,这里根本看不出来tony_ontheway说了什么,还要我一个一个找,哦,原来他是在第N页第N行说了这个,所以非常的不方便。

所以今天我把网易盖楼回复的实现原理以及实例Demo贴出,望博友们顶起来,让博客园整改一下,必竟,博客园是我们的大本营,是我们学习知识的地方。这里高手如云,精英荟萃,我们的大本营也不能太差,是吧。我们让博客园改进,也是为自己创建良好的环境,所以,博友们,顶起来,吼起来,一起唤起博客园的注意。

实现盖楼回复大致分三部。

第一步:建数据库表,这个表需要有ID及父ID.

第二步:添加回复,添加回复的关键代码如下:

var comment = StringExtension.ChangeStr(collection["comment"]);var bbsId = collection["comment_post_ID"].ToString();var comment_parent = collection["comment_parent"].ToString();//$引用3楼 测试盖楼回复。。。

if (comment.IndexOf("$引用") >= 0)

{

comment= comment.Substring(comment.IndexOf("楼") + 1, comment.Length - comment.IndexOf("楼") - 1);

}else{

comment_parent= "0";

}

NetFavCommentModel bbsComment= newNetFavCommentModel

{commentContent=comment,

NetFavId=Convert.ToInt32(bbsId),

commentParentId=Convert.ToInt32(comment_parent),

commentAddTime=DateTime.Now

};

netFavCommentRepository.AddNetFavComment(bbsComment);

第三步:查询回复,并以盖楼方式显示。关键代码如下。

KeyValuePair> bbsComment =netFavCommentRepository.NetFavCommentPagination(pagin, condition);int i = 1;foreach (var item inbbsComment.Value)

{

item.louId= i++;

item.commentContent=GetContent(item, bbsComment.Value.ToList());

}

ViewBag.bbsComment=bbsComment.Value;

ViewBag.bbsCommentCount= bbsComment.Value.Count();

其中GetContent很重要,循环查询,将盖楼内容全部显示出来。

相关代码如下:

#region 盖楼回复

//根据当前的Comment得到HTML输出

protected string GetContent(object objComment, Listlist)

{string output = "";

NetFavCommentModel cmt= (NetFavCommentModel)objComment; //获取当前评论

List quoteList = new List(); //创建当前评论所引用的评论列表

AddComment(list, quoteList, cmt);//为当前评论的引用列表添加项目//quoteList.Sort(NetFavCommentModel.GetComparer());//对列表排序,顺序排列

foreach (NetFavCommentModel quote in quoteList) //生成引用的评论列表

{

output=String.Format("

{0} 网友 {1}的原贴:
{2}
",

output, quote.commentAddMan, quote.commentContent);

}//添加当前引用

output =String.Format("

{0}楼{1} 发表网友:{2}

{3}

{4}

" +

"

"οnclick='addQuote({0},{5});'>回复

",

cmt.louId, cmt.commentAddTime, cmt.commentAddMan, output, cmt.commentContent, cmt.commentId);returnoutput;

}//向quoteList中添加 符合条件的Comment

protected void AddComment(List list, ListquoteList, NetFavCommentModel cmt)

{if (cmt.commentParentId != 0)

{

NetFavCommentModel find= list.Where(n => n.commentId ==cmt.commentParentId).FirstOrDefault();

quoteList.Add(find);//递归调用,只要CommentId不为零,就加入到引用评论列表

AddComment(list, quoteList, find);

}else

return;

}#endregion

完成后截图如下:

7989c1acce8d82538e72ccf9bea1e825.png

最后给出Demo示例网址 。本项目的源码就不提供了,提供一套原生版Demo,有需要请下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值