Rumah > pembangunan bahagian belakang > masalah PHP > Bagaimana untuk melaksanakan fungsi balasan komen dalam php

Bagaimana untuk melaksanakan fungsi balasan komen dalam php

藏色散人
Lepaskan: 2023-03-12 13:22:01
asal
7136 orang telah melayarinya

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.

Bagaimana untuk melaksanakan fungsi balasan komen dalam php

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 ulasan

2. 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(&#39;comment&#39;)->where("parent_id = &#39;".$parent_id."&#39;")->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;
 }
Salin selepas log masuk

public function index(){ 
 $num = M(&#39;comment&#39;)->count(); //获取评论总数
 $this->assign(&#39;num&#39;,$num);
 $data=array();
 $data=$this->getCommlist();//获取评论列表
 $this->assign("commlist",$data);
 $this->display(&#39;index&#39;);
 }
Salin selepas log masuk

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[&#39;create_time&#39;]=date(&#39;Y-m-d H:i:s&#39;,time());
 $newcm = M(&#39;comment&#39;);
 $id = $newcm->add($cm);

 $cm["id"] = $id;
 $data = $cm;

 $num = M(&#39;comment&#39;)->count();//统计评论总数
 $data[&#39;num&#39;]= $num;

 }else{
 $data["error"] = "0";
 }


 echo json_encode($data);
 }
Salin selepas log masuk

(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=&#39;&#39;>发表评论</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>
Salin selepas log masuk

<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>
Salin selepas log masuk

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;
}
Salin selepas log masuk

(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: "
$(&#39;body&#39;).delegate(&#39;.comment-submit&#39;,&#39;click&#39;,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=&#39;"+data.id+"&#39;><p ><p><img class=&#39;head-pic&#39; src=&#39;"+data.head_pic+"&#39; alt=&#39;&#39;></p><p class=&#39;cm&#39;><p class=&#39;cm-header&#39;><span>"+data.nickname+"</span><span>"+data.create_time+"</span></p><p class=&#39;cm-content&#39;><p>"+data.content+"</p></p><p class=&#39;cm-footer&#39;><a class=&#39;comment-reply&#39; comment_id=&#39;"+data.id+"&#39; href=&#39;javascript:void(0);&#39;>回复</a></p></p></p><ul class=&#39;children&#39;></ul></li>";    
    $(".comment-ul").prepend(newli);
   }else{
    //否则添加到对应的孩子ul列表中    
    if(&#39;off&#39;==replyswitch){//检验出回复关闭锁存在,即三级评论不再提供回复功能    
    newli = "<li comment_id=&#39;"+data.id+"&#39;><p ><p><img class=&#39;head-pic&#39; src=&#39;"+data.head_pic+"&#39; alt=&#39;&#39;></p><p class=&#39;children-cm&#39;><p class=&#39;cm-header&#39;><span>"+data.nickname+"</span><span>"+data.create_time+"</span></p><p class=&#39;cm-content&#39;><p>"+data.content+"</p></p><p class=&#39;cm-footer&#39;></p></p></p><ul class=&#39;children&#39;></ul></li>";
    }else{//二级评论的回复按钮要添加回复关闭锁属性   
    newli = "<li comment_id=&#39;"+data.id+"&#39;><p ><p><img class=&#39;head-pic&#39; src=&#39;"+data.head_pic+"&#39; alt=&#39;&#39;></p><p class=&#39;children-cm&#39;><p class=&#39;cm-header&#39;><span>"+data.nickname+"</span><span>"+data.create_time+"</span></p><p class=&#39;cm-content&#39;><p>"+data.content+"</p></p><p class=&#39;cm-footer&#39;><a class=&#39;comment-reply&#39; comment_id=&#39;"+data.id+"&#39; href=&#39;javascript:void(0);&#39; replyswitch=&#39;off&#39; >回复</a></p></p></p><ul class=&#39;children&#39;></ul></li>";
    }    
    $("li[comment_id=&#39;"+data.parent_id+"&#39;]").children("ul").prepend(newli);
   }

   }else{
   //有错误信息
   alert(data.error);
   }

  }
  });
 }


 });
Salin selepas log masuk
Tutorial Video PHP

"

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan