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

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

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

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

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

在最後一級評論(這裡設定是第三級)關閉回複功能 即時顯示評論總數 二、實現思路及細節 1.資料表設計

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). 展示頁面的整體結構設計


實際效果:

頁面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">    <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);"><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}" alt="">                          </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);">回複</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}" alt="">                                 </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);">回複</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}" alt="">                                          </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);">回複</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}" alt="">      </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);">回複</a>                             </div>      </div>                                                              </div>

對應的效果圖:

對應的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;    
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.