天天看點

php評論jquery回複功能,thinkPHP實作基于ajax的評論回複功能

本文執行個體講述了thinkPHP實作基于ajax的評論回複功能。分享給大家供大家參考,具體如下:

控制器代碼:

namespace Home\Controller;

use Think\Controller;

class IndexController extends Controller {

public function index(){

$num = M('comment')->count(); //擷取評論總數

$this->assign('num',$num);

$data=array();

$data=$this->getCommlist();//擷取評論清單

$this->assign("commlist",$data);

$this->display('index');

}

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);

}

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;

}

}

JavaScript代碼:

$(function(){

//點選送出評論内容

$('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 = "

php評論jquery回複功能,thinkPHP實作基于ajax的評論回複功能

"+data.nickname+" "+data.create_time+"

"+data.content+"

回複 ";

$(".comment-ul").prepend(newli);

}else{

//否則添加到對應的孩子ul清單中

if('off'==replyswitch){//檢驗出回複關閉鎖存在,即三級評論不再提供回複功能

newli = "

php評論jquery回複功能,thinkPHP實作基于ajax的評論回複功能

"+data.nickname+" "+data.create_time+"

"+data.content+"

";

}else{//二級評論的回複按鈕要添加回複關閉鎖屬性

newli = "

php評論jquery回複功能,thinkPHP實作基于ajax的評論回複功能

"+data.nickname+" "+data.create_time+"

"+data.content+"

回複 ";

}

$("li[comment_id='"+data.parent_id+"']").children("ul").prepend(newli);

}

}else{

//有錯誤資訊

alert(data.error);

}

}

});

}

});

//點選"回複"按鈕顯示或隐藏回複輸入框

$("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 = "

送出回複 ";

}else{

divhtml = "

送出回複 ";

}

$(this).after(divhtml);

}

});

})

頁面樣式代碼:

.comment-filed{

width:640px;

margin:0 auto;

}

.comment-num{

text-align: right;

font-size:14px;

}

.div-txt-submit{

text-align:right;

margin-top:8px;

}

.comment-submit{

background-color:#63B8FF;

margin-top:15px;

text-decoration:none;

color:#fff;

padding:5px;

font-size:14px;

}

.txt-commit{

border:1px solid blue;

width:620px;

height: 60px;

padding: 10px;

}

.txt-reply{

width: 100%;

height: 60px;

}

.comment-filed-list{

margin-top:20px;

}

.comment-list{

margin-top:2px;

width:herit;

height:50px;

border-top:1px solid gray;

}

.comment-ul{

list-style:none;

padding-left:0;

}

.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;

}

.children{

list-style:none;

background-color:#FAFAFA;

padding-left:0;

margin-left:40px;

}

.children-cm{

position:relative;

left:40px;

top:-40px;

width:90%;

}

頁面布局代碼:

php評論及回複功能

{$num}條評論

發表評論

全部評論

  • php評論jquery回複功能,thinkPHP實作基于ajax的評論回複功能

    {$data.nickname}

    {$data.create_time}

    {$data.content}

    回複

    • php評論jquery回複功能,thinkPHP實作基于ajax的評論回複功能

      {$child.nickname}

      {$child.create_time}

      {$child.content}

      回複

      • php評論jquery回複功能,thinkPHP實作基于ajax的評論回複功能

        {$grandson.nickname}

        {$grandson.create_time}

        {$grandson.content}

sql語句:

DROP TABLE IF EXISTS `t_comment`;

CREATE TABLE `t_comment` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',

`parent_id` int(11) NOT NULL COMMENT '上級評論id,若是一級評論則為0',

`nickname` varchar(100) DEFAULT NULL COMMENT '評論人昵稱',

`head_pic` varchar(400) DEFAULT NULL COMMENT '評論人頭像',

`content` text COMMENT '評論内容',

`create_time` datetime DEFAULT NULL COMMENT '評論或回複發表時間',

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=148 DEFAULT CHARSET=utf8;

頁面布局少一個jquery.js請自行加上。

希望本文所述對大家基于ThinkPHP架構的PHP程式設計有所幫助。