Cara melaksanakan fungsi balasan ulasan dalam PHP: 1. Reka bentuk jadual data 2. Dapatkan senarai ulasan melalui rekursi 3. Paparkan tindakan halaman ulasan; halaman; 5. Buat satu kod struktur p maklumat Komen 6. Tetapkan gaya butang label untuk membalas komen.
Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3
Bagaimanakah php melaksanakan fungsi balasan komen?
pengkelasan tanpa had php untuk melaksanakan fungsi ulasan dan balasan
Anda sering melihat fungsi ulasan di bawah halaman butiran forum utama atau bahagian berita, sudah tentu tidak Hanya Ia semudah menghantar komen secara langsung Anda boleh membalas komen orang lain, dan orang lain boleh mengulas atau membalas balasan anda sekali lagi. Ini berulang, secara teori, ia boleh dikatakan tidak berkesudahan mudah untuk difikirkan menggunakan teknologi klasifikasi tak terhingga Simpan data, gunakan rekursi untuk mendapatkan data struktur hierarki komen, dan gunakan ajax untuk merealisasikan interaksi halaman komen Di sini saya menggunakan rangka kerja thinkphp untuk membuat demo yang mudah proses, komen peringkat ketiga mula berhenti membalas Sudah tentu, selagi anda melakukan sedikit kerja atas dasar ini Fungsi balasan tidak terhingga boleh direalisasikan dengan mengubahnya Sebab utama ialah mengubah gaya lapisan pandangan adalah menyusahkan dan mengambil sedikit masa.
1. Analisis permintaan kesan:
1 Anda boleh menerbitkan ulasan peringkat pertama secara langsung dalam pengepala, dan ulasan terkini dipaparkan di bahagian atas, seperti yang ditunjukkan dalam pemaparan berikut
2 Anda boleh membalas ulasan yang disiarkan, dan balasan dipaparkan di bawah ulasan yang lebih tinggi, membentuk perhubungan hierarki, seperti yang ditunjukkan dalam pemaparan berikut<.>
3 Butiran operasi halaman: Apabila butang balas ulasan diklik, kotak input teks balasan dipaparkan dan kotak input teks balasan ulasan lain hilang butang balas diklik sekali lagi, kotak teks hilang 4. Matikan fungsi balasan pada peringkat terakhir ulasan (tetapan di sini ialah tahap ketiga) 5. Masa nyata paparan jumlah bilangan ulasan2. Idea dan butiran pelaksanaan
1. Reka bentuk jadual data
2 (1). Dapatkan senarai ulasan(2). Paparkan tindakan halaman ulasan
(3)./** *递归获取评论列表 */ 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; }
public function index(){ $num = M('comment')->count(); //获取评论总数 $this->assign('num',$num); $data=array(); $data=$this->getCommlist();//获取评论列表 $this->assign("commlist",$data); $this->display('index'); }
3. Lihat pelaksanaan lapisan
/** *添加评论 */ 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); }
(1) Tunjukkan keseluruhan reka bentuk struktur halaman
Kesan sebenar:
Kod html halaman:
(2).
pemaparan yang sepadan:<!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> <p class="comment-filed"> <!--发表评论区begin--> <p> <p class="comment-num"> <span>{$num}条评论</span> </p> <p> <p> <textarea class="txt-commit" replyid="0"></textarea> </p> <p class="p-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> </p> </p> </p> <!--发表评论区end--> <!--评论列表显示区begin--> <!-- {$commentlist} --> <p class="comment-filed-list" > <p><span>全部评论</span></p> <p class="comment-list" > <!--一级评论列表begin--> <ul class="comment-ul"> <volist name="commlist" id="data"> <li comment_id="{$data.id}"> <p > <p> <img class="head-pic" src="{$data.head_pic}" alt=""> </p> <p class="cm"> <p class="cm-header"> <span>{$data.nickname}</span> <span>{$data.create_time}</span> </p> <p class="cm-content"> <p> {$data.content} </p> </p> <p 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> </p> </p> </p> <!--二级评论begin--> <ul class="children"> <volist name="data.children" id="child" > <li comment_id="{$child.id}"> <p > <p> <img class="head-pic" src="{$child.head_pic}" alt=""> </p> <p class="children-cm"> <p class="cm-header"> <span>{$child.nickname}</span> <span>{$child.create_time}</span> </p> <p class="cm-content"> <p> {$child.content} </p> </p> <p 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> </p> </p> </p> <!--三级评论begin--> <ul class="children"> <volist name="child.children" id="grandson" > <li comment_id="{$grandson.id}"> <p > <p> <img class="head-pic" src="{$grandson.head_pic}" alt=""> </p> <p class="children-cm"> <p class="cm-header"> <span>{$grandson.nickname}</span> <span>{$grandson.create_time}</span> </p> <p class="cm-content"> <p> {$grandson.content} </p> </p> <p 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> --> </p> </p> </p> </li> </volist> </ul> <!--三级评论end--> </li> </volist> </ul> <!--二级评论end--> </li> </volist> </ul> <!--一级评论列表end--> </p> </p> <!--评论列表显示区end--> </p> </body> </html>
<p > <p> <img class="head-pic" src="{$data.head_pic}" alt=""> </p> <p class="cm"> <p class="cm-header"> <span>{$data.nickname}</span> <span>{$data.create_time}</span> </p> <p class="cm-content"> <p> {$data.content} </p> </p> <p 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> </p> </p> </p>
Kod css yang sepadan:
4
.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; }
(1) Serahkan ulasan: Butang teg yang menyerahkan ulasan merujuk kepada ulasan gaya -serahkan, lakukan operasi ajax dalam acara kliknya (2). Balas kepada ulasan: Butang label ulasan balasan merujuk kepada gaya ulasan-balas, dan memaparkan atau menyembunyikan ulasan dalam acara kliknya Operasi kotak input
Pembelajaran yang disyorkan: "$('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();//删除已存在的所有回复p //更新评论总数 $(".comment-num").children("span").html(data.num+"条评论"); //显示新增评论 var newli = ""; if(cmdata.parent_id == "0"){ //发表的是一级评论时,添加到一级ul列表中 newli = "<li comment_id='"+data.id+"'><p ><p><img class='head-pic' src='"+data.head_pic+"' alt=''></p><p class='cm'><p class='cm-header'><span>"+data.nickname+"</span><span>"+data.create_time+"</span></p><p class='cm-content'><p>"+data.content+"</p></p><p class='cm-footer'><a class='comment-reply' comment_id='"+data.id+"' href='javascript:void(0);'>回复</a></p></p></p><ul class='children'></ul></li>"; $(".comment-ul").prepend(newli); }else{ //否则添加到对应的孩子ul列表中 if('off'==replyswitch){//检验出回复关闭锁存在,即三级评论不再提供回复功能 newli = "<li comment_id='"+data.id+"'><p ><p><img class='head-pic' src='"+data.head_pic+"' alt=''></p><p class='children-cm'><p class='cm-header'><span>"+data.nickname+"</span><span>"+data.create_time+"</span></p><p class='cm-content'><p>"+data.content+"</p></p><p class='cm-footer'></p></p></p><ul class='children'></ul></li>"; }else{//二级评论的回复按钮要添加回复关闭锁属性 newli = "<li comment_id='"+data.id+"'><p ><p><img class='head-pic' src='"+data.head_pic+"' alt=''></p><p class='children-cm'><p class='cm-header'><span>"+data.nickname+"</span><span>"+data.create_time+"</span></p><p class='cm-content'><p>"+data.content+"</p></p><p class='cm-footer'><a class='comment-reply' comment_id='"+data.id+"' href='javascript:void(0);' replyswitch='off' >回复</a></p></p></p><ul class='children'></ul></li>"; } $("li[comment_id='"+data.parent_id+"']").children("ul").prepend(newli); } }else{ //有错误信息 alert(data.error); } } }); } });
"
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan fungsi balasan komen dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!