亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php無限級分類實現評論及回復功能

2024-05-05 00:06:46
字體:
來源:轉載
供稿:網友

經常在各大論壇或新聞板塊詳情頁面下邊看到評論功能,當然不單單是直接發表評論內容那么簡單,可以對別人的評論進行回復,別人又可以對你的回復再次評論或回復,如此反復,理論上可以說是沒有休止,從技術角度分析很容易想到運用無限級分類技術存儲數據,運用遞歸獲取評論層級結構數據,運用ajax實現評論頁面交互,這里用thinkphp框架做個簡單的demo練練手,為了簡化流程這里第三級評論開始停止回復,當然只要在這個基礎上稍作修改就可以實現無限回復功能,主要是view層樣式修改較麻煩,需花些時間。

一、效果需求分析:

1.在頭部可以直接發布一級評論,最新發表的評論顯示在最上面,如下效果圖

php,無限級分類,評論,回復

2.對發表的評論可以回復,回復顯示在上級評論下邊,形成層級關系,如下效果圖

php,無限級分類,評論,回復

3.頁面操作細節:點擊某個評論的回復按鈕時,顯示回復文本輸入框,同時其他評論的回復文本輸入框消失,當再次點擊該回復按鈕時,該文本框消失

4.在最后一級評論(這里設置是第三級)關閉回復功能

5.即時顯示評論總數

二、實現思路及細節

1.數據表設計

php,無限級分類,評論,回復

2.controller層關鍵函數:

(1). 遞歸獲取評論列表

/***遞歸獲取評論列表 */ protected function getCommlist($parent_id = 0,&$result = array()){  $arr = M('comment')->where("parent_id = '".$parent_id."'")->order("create_time desc")->select();  if(empty($arr)){ return array(); } foreach ($arr as $cm) {  $thisArr=&$result[]; $cm["children"] = $this->getCommlist($cm["id"],$thisArr);  $thisArr = $cm;      } return $result; }

(2). 展示評論頁面的action

public function index(){  $num = M('comment')->count(); //獲取評論總數 $this->assign('num',$num); $data=array(); $data=$this->getCommlist();//獲取評論列表 $this->assign("commlist",$data); $this->display('index'); }

(3).評論頁面ajax訪問添加評論的action

/***添加評論 */ public function addComment(){   $data=array(); if((isset($_POST["comment"]))&&(!empty($_POST["comment"]))){ $cm = json_decode($_POST["comment"],true);//通過第二個參數true,將json字符串轉化為鍵值對數組 $cm['create_time']=date('Y-m-d H:i:s',time()); $newcm = M('comment'); $id = $newcm->add($cm); $cm["id"] = $id; $data = $cm; $num = M('comment')->count();//統計評論總數 $data['num']= $num; }else{ $data["error"] = "0"; } echo json_encode($data); }

3.view層實現

(1). 展示頁面的整體結構設計

php,無限級分類,評論,回復

實際效果:

php,無限級分類,評論,回復

頁面html代碼:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html lang="en"><head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>php無限級分類實戰————評論及回復功能</title> <link rel="stylesheet" type="text/css" href="/Public/css/comment.css" rel="external nofollow" > <script type="text/javascript" src="/Public/js/jquery-1.11.3.min.js" ></script> <script type="text/javascript" src="/Public/js/comment.js" ></script></head><body><div class="comment-filed"> <!--發表評論區begin--> <div> <div class="comment-num"> <span>{$num}條評論</span> </div> <div> <div> <textarea class="txt-commit" replyid="0"></textarea> </div> <div class="div-txt-submit">  <a class="comment-submit" parent_id="0" style="" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><span style=''>發表評論</span></a> </div>  </div> </div> <!--發表評論區end--> <!--評論列表顯示區begin--> <!-- {$commentlist} --> <div class="comment-filed-list" > <div><span>全部評論</span></div> <div class="comment-list" >  <!--一級評論列表begin-->  <ul class="comment-ul">   <volist name="commlist" id="data">      <li comment_id="{$data.id}">      <div >   <div>    <img class="head-pic" src="{$data.head_pic}"   </div>   <div class="cm">    <div class="cm-header">    <span>{$data.nickname}</span>    <span>{$data.create_time}</span>    </div>    <div class="cm-content">    <p>     {$data.content}    </p>    </div>    <div class="cm-footer">    <a class="comment-reply" comment_id="{$data.id}" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >回復</a>       </div>    </div>           </div>   <!--二級評論begin-->   <ul class="children">   <volist name="data.children" id="child" >       <li comment_id="{$child.id}">       <div >    <div>     <img class="head-pic" src="{$child.head_pic}"    </div>    <div class="children-cm">     <div class="cm-header">     <span>{$child.nickname}</span>     <span>{$child.create_time}</span>     </div>     <div class="cm-content">     <p>      {$child.content}     </p>     </div>     <div class="cm-footer">         <a class="comment-reply" replyswitch="off" comment_id="{$child.id}" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >回復</a>     </div>     </div>            </div>    <!--三級評論begin-->    <ul class="children">    <volist name="child.children" id="grandson" >     <li comment_id="{$grandson.id}">        <div >     <div>      <img class="head-pic" src="{$grandson.head_pic}"     </div>     <div class="children-cm">      <div class="cm-header">      <span>{$grandson.nickname}</span>      <span>{$grandson.create_time}</span>      </div>      <div class="cm-content">      <p>       {$grandson.content}      </p>      </div>      <div class="cm-footer">          <!-- <a class="comment-reply" comment_id="1" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >回復</a> -->      </div>      </div>             </div>    </li>    </volist>    </ul>     <!--三級評論end-->   </li>   </volist>   </ul>    <!--二級評論end-->  </li>  </volist>           </ul>  <!--一級評論列表end--> </div>  </div> <!--評論列表顯示區end--></div> </body></html>

(2). 單個評論信息div結構代碼

<div > <div> <img class="head-pic" src="{$data.head_pic}" </div> <div class="cm"> <div class="cm-header">  <span>{$data.nickname}</span>  <span>{$data.create_time}</span>  </div> <div class="cm-content">   <p>   {$data.content}   </p> </div> <div class="cm-footer">  <a class="comment-reply" comment_id="{$data.id}" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >回復</a>    </div>  </div>        </div>

對應的效果圖:

php,無限級分類,評論,回復

對應的css代碼:

.head-pic{ width:40px; height:40px; }.cm{ position:relative; top:0px; left:40px; top:-40px; width:600px;}.cm-header{ padding-left:5px;}.cm-content{ padding-left:5px;}.cm-footer{ padding-bottom:15px; text-align:right; border-bottom: 1px dotted #CCC;}.comment-reply{ text-decoration:none; color:gray; font-size: 14px;}

4. JS代碼

(1). 提交評論:提交評論的a標簽按鈕引用了樣式comment-submit,在其點擊事件中進行ajax操作

$('body').delegate('.comment-submit','click',function(){  var content = $.trim($(this).parent().prev().children("textarea").val());//根據布局結構獲取當前評論內容 $(this).parent().prev().children("textarea").val("");//獲取完內容后清空輸入框 if(""==content){  alert("評論內容不能為空!");  }else{  var cmdata = new Object();  cmdata.parent_id = $(this).attr("parent_id");//上級評論id  cmdata.content = content;  cmdata.nickname = "游客";//測試用數據  cmdata.head_pic = "/Public/images/default.jpg";//測試用數據    var replyswitch = $(this).attr("replyswitch");//獲取回復開關鎖屬性  $.ajax({  type:"POST",  url:"/index.php/home/index/addComment",  data:{   comment:JSON.stringify(cmdata)    },  dataType:"json",    success:function(data){   if(typeof(data.error)=="undefined"){   $(".comment-reply").next().remove();//刪除已存在的所有回復div    //更新評論總數      $(".comment-num").children("span").html(data.num+"條評論");   //顯示新增評論   var newli = "";      if(cmdata.parent_id == "0"){    //發表的是一級評論時,添加到一級ul列表中       newli = "<li comment_id='"+data.id+"'><div ><div><img class='head-pic' src='"+data.head_pic+"'       $(".comment-ul").prepend(newli);   }else{    //否則添加到對應的孩子ul列表中        if('off'==replyswitch){//檢驗出回復關閉鎖存在,即三級評論不再提供回復功能        newli = "<li comment_id='"+data.id+"'><div ><div><img class='head-pic' src='"+data.head_pic+"'    }else{//二級評論的回復按鈕要添加回復關閉鎖屬性       newli = "<li comment_id='"+data.id+"'><div ><div><img class='head-pic' src='"+data.head_pic+"'    }        $("li[comment_id='"+data.parent_id+"']").children("ul").prepend(newli);   }   }else{   //有錯誤信息   alert(data.error);   }  }  }); } });

(2).回復評論:回復評論的a標簽按鈕引用了樣式comment-reply,在其點擊事件中進行顯示或隱藏評論輸入框的操作

//點擊"回復"按鈕顯示或隱藏回復輸入框 $("body").delegate(".comment-reply","click",function(){ if($(this).next().length>0){//判斷出回復div已經存在,去除掉  $(this).next().remove();  }else{//添加回復div  $(".comment-reply").next().remove();//刪除已存在的所有回復div   //添加當前回復div  var parent_id = $(this).attr("comment_id");//要回復的評論id  var divhtml = "";  if('off'==$(this).attr("replyswitch")){//二級評論回復后三級評論不再提供回復功能,將關閉屬性附加到"提交回復"按鈕"  divhtml = "<div class='div-reply-txt' style='width:98%;padding:3px;' replyid='2'><div><textarea class='txt-reply' replyid='2' style='width: 100%; height: 60px;'></textarea></div><div style='margin-top:5px;text-align:right;'><a class='comment-submit' parent_id='"+parent_id+"' style='font-size:14px;text-decoration:none;background-color:#63B8FF;' href='javascript:void(0);' replyswitch='off' >提交回復</a></div></div>";  }else{  divhtml = "<div class='div-reply-txt' style='width:98%;padding:3px;' replyid='2'><div><textarea class='txt-reply' replyid='2' style='width: 100%; height: 60px;'></textarea></div><div style='margin-top:5px;text-align:right;'><a class='comment-submit' parent_id='"+parent_id+"' style='font-size:14px;text-decoration:none;background-color:#63B8FF;' href='javascript:void(0);'>提交回復</a></div></div>";  }    $(this).after(divhtml);  } });

三、完整代碼免費下載

php無限級分類實現評論及回復

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久91精品国产91久久跳| 日韩专区中文字幕| 91精品国产成人www| 国产精品直播网红| 欧美另类高清videos| 国产精品久久久久久亚洲影视| 国产香蕉一区二区三区在线视频| 久久久久久国产三级电影| 亚洲精品欧美日韩专区| 亚洲精品www| 日韩欧美在线看| 国内精品久久久久久久| 亚洲精品电影在线| 亚洲一区二区三区毛片| 日韩欧美一区二区三区久久| 欧美在线视频在线播放完整版免费观看| 精品久久久一区二区| 欧美亚洲视频在线观看| 中文字幕国产精品| 青草青草久热精品视频在线观看| 久久五月天色综合| 欧美在线视频免费观看| 日韩欧亚中文在线| 日本午夜人人精品| 精品一区电影国产| 国产精品99久久久久久白浆小说| 色青青草原桃花久久综合| 亚洲女人天堂成人av在线| 亚洲最大的网站| 国产精品99导航| 国产精欧美一区二区三区| 亚洲男人天堂手机在线| 亚洲丁香久久久| 日韩久久免费电影| 在线免费看av不卡| 日韩欧美在线观看| 精品日本美女福利在线观看| 国产精品高潮呻吟久久av黑人| 91免费国产网站| 国产一区香蕉久久| 中文精品99久久国产香蕉| 日韩欧美在线第一页| 国产亚洲美女精品久久久| 9.1国产丝袜在线观看| 亚洲桃花岛网站| 97在线观看免费| 日韩福利伦理影院免费| 91久久精品日日躁夜夜躁国产| 国产97在线|日韩| 亚洲精品久久久久久久久久久久久| 久久九九亚洲综合| 都市激情亚洲色图| 丝袜美腿精品国产二区| 亚洲欧洲国产伦综合| 久久91亚洲精品中文字幕奶水| 97精品国产aⅴ7777| 欧美精品一区二区三区国产精品| 久久久久99精品久久久久| 欧美视频在线视频| 欧美激情aaaa| 久久99热这里只有精品国产| 日韩精品免费电影| 日韩国产在线看| 中文字幕亚洲综合| 国产精品欧美一区二区三区奶水| 2019亚洲日韩新视频| 91精品久久久久久久久中文字幕| 色偷偷av一区二区三区乱| 一本一道久久a久久精品逆3p| 欧美精品www| 久久久久久美女| 久久国产加勒比精品无码| 中日韩午夜理伦电影免费| 亚洲精品久久久久久久久久久| 中文欧美日本在线资源| 国产视频亚洲精品| 91九色国产视频| 久久精品国产亚洲7777| 国产国产精品人在线视| 成人疯狂猛交xxx| 欧美成人激情视频免费观看| 亚洲va国产va天堂va久久| 国产精品视频自在线| 亚洲色图欧美制服丝袜另类第一页| 国产亚洲精品综合一区91| 欧美色视频日本高清在线观看| 秋霞av国产精品一区| 992tv在线成人免费观看| 狠狠躁夜夜躁人人爽天天天天97| 日韩精品视频在线免费观看| 色香阁99久久精品久久久| 欧美日韩综合视频| 丝袜情趣国产精品| 亚洲bt欧美bt日本bt| 久久久久久久久爱| 国产精品久久久久久搜索| 欧美激情综合色综合啪啪五月| 97久久精品人搡人人玩| 国产成人精品最新| 欧美性xxxxx极品娇小| 欧美日韩一区免费| 精品色蜜蜜精品视频在线观看| 久久男人资源视频| 成人国产精品久久久| 日本免费久久高清视频| 国产一区二区三区网站| 欧美日韩在线观看视频小说| 国产亚洲激情视频在线| 久久久久久久97| 国产精品高潮在线| 国产欧美在线播放| 久久成人免费视频| xvideos成人免费中文版| 国产不卡av在线免费观看| 久久精品久久久久久| 亚洲国产日韩欧美综合久久| 伊人久久久久久久久久久| 日韩中文字幕国产| 精品久久久精品| 国产精品久久久久久久久久三级| 精品欧美一区二区三区| 亚洲国产精品久久精品怡红院| 亚洲精品99久久久久| 日本sm极度另类视频| 欧美大片欧美激情性色a∨久久| 欧美最猛性xxxxx亚洲精品| 亚洲精品日韩丝袜精品| 国产精品自拍小视频| 亚洲有声小说3d| 亚洲影视九九影院在线观看| 在线精品视频视频中文字幕| 亚洲xxxx做受欧美| 欧美日韩一区二区免费视频| 色综合天天狠天天透天天伊人| 国产日韩中文字幕| 色老头一区二区三区在线观看| 热久久美女精品天天吊色| 欧美激情一级二级| 美女黄色丝袜一区| 精品动漫一区二区三区| 国产综合在线看| 久久av红桃一区二区小说| 久久午夜a级毛片| 亚洲91精品在线观看| 色播久久人人爽人人爽人人片视av| 欧美亚洲成人免费| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲视频电影图片偷拍一区| 91干在线观看| 欧美性猛交xxxxx免费看| 日韩电视剧免费观看网站| 欧美激情在线播放| 欧美日韩激情小视频| 丝袜情趣国产精品| 97国产成人精品视频| 国产精品美女免费| 日韩电影在线观看免费| 日本久久久久亚洲中字幕| 91国自产精品中文字幕亚洲| 亚洲精品视频久久| 亚洲欧美国产日韩天堂区| 欧美日韩人人澡狠狠躁视频| 亚洲欧美日韩精品| 久久综合亚洲社区|