簡單實現(xiàn)網(wǎng)易蓋樓回復(fù)功能
作者:tebato
今天筆者把網(wǎng)易蓋樓回復(fù)的實現(xiàn)原理以及實例Demo貼出,希望能幫助各位的實際開發(fā)。
實現(xiàn)蓋樓回復(fù)大致分三部。
第一步:建數(shù)據(jù)庫表,這個表需要有ID及父ID.
第二步:添加回復(fù),添加回復(fù)的關(guān)鍵代碼如下:
- var comment = StringExtension.ChangeStr(collection["comment"]);
- var bbsId = collection["comment_post_ID"].ToString();
- var comment_parent = collection["comment_parent"].ToString();
- //$引用3樓 測試蓋樓回復(fù)。。。
- if (comment.IndexOf("$引用") >= 0)
- {
- comment = comment.Substring(comment.IndexOf("樓") + 1, comment.Length - comment.IndexOf("樓") - 1);
- }
- else
- {
- comment_parent = "0";
- }
- NetFavCommentModel bbsComment = new NetFavCommentModel
- {
- commentContent = comment,
- NetFavId = Convert.ToInt32(bbsId),
- commentParentId = Convert.ToInt32(comment_parent),
- commentAddTime = DateTime.Now
- };
- netFavCommentRepository.AddNetFavComment(bbsComment);
第三步:查詢回復(fù),并以蓋樓方式顯示。關(guān)鍵代碼如下。
- KeyValuePair<Pagination, IList<NetFavCommentModel>> bbsComment = netFavCommentRepository.NetFavCommentPagination(pagin, condition);
- int i = 1;
- foreach (var item in bbsComment.Value)
- {
- item.louId = i++;
- item.commentContent = GetContent(item, bbsComment.Value.ToList());
- }
- ViewBag.bbsComment = bbsComment.Value;
- ViewBag.bbsCommentCount = bbsComment.Value.Count();
其中GetContent很重要,循環(huán)查詢,將蓋樓內(nèi)容全部顯示出來。
相關(guān)代碼如下:
- #region 蓋樓回復(fù)
- // 根據(jù)當(dāng)前的Comment得到HTML輸出
- protected string GetContent(object objComment, List<NetFavCommentModel> list)
- {
- string output = "";
- NetFavCommentModel cmt = (NetFavCommentModel)objComment; // 獲取當(dāng)前評論
- List<NetFavCommentModel> quoteList = new List<NetFavCommentModel>(); // 創(chuàng)建當(dāng)前評論所引用的評論列表
- AddComment(list, quoteList, cmt); // 為當(dāng)前評論的引用列表添加項目
- //quoteList.Sort(NetFavCommentModel.GetComparer()); // 對列表排序,順序排列
- foreach (NetFavCommentModel quote in quoteList) // 生成引用的評論列表
- {
- output = String.Format(
- "<div>{0}<span>網(wǎng)友 {1}的原貼:</span><br />{2}</div>",
- output, quote.commentAddMan, quote.commentContent);
- }
- // 添加當(dāng)前引用
- output = String.Format(
- "<div class='comment'><p class='title'><span>{0}樓{1} 發(fā)表</span>網(wǎng)友:{2}</p>{3}<p>{4}</p>" +
- "<p style='text-align:right;'><a class='comment-reply-link' href='#comment' " +
- "onclick='addQuote({0},{5});'>回復(fù)</a></p></div>",
- cmt.louId, cmt.commentAddTime, cmt.commentAddMan, output, cmt.commentContent, cmt.commentId);
- return output;
- }
- // 向quoteList中添加 符合條件的Comment
- protected void AddComment(List<NetFavCommentModel> list, List<NetFavCommentModel> quoteList, NetFavCommentModel cmt)
- {
- if (cmt.commentParentId != 0)
- {
- NetFavCommentModel find = list.Where(n => n.commentId == cmt.commentParentId).FirstOrDefault();
- quoteList.Add(find);
- // 遞歸調(diào)用,只要CommentId不為零,就加入到引用評論列表
- AddComment(list, quoteList, find);
- }
- else
- return;
- }
- #endregion
完成后截圖如下:
最后給出Demo示例網(wǎng)址 。本項目的源碼就不提供了,提供一套原生版Demo,有需要請下載。
原文鏈接:http://www.cnblogs.com/ushou/archive/2013/03/08/2948402.html
【編輯推薦】
責(zé)任編輯:彭凡
來源:
博客園