php无限级分类实战评论及回复功能
php无限级分类实战——评论及回复功能
经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是没有休止,从技术角度分析很容易想到运用无限级分类技术存储数据,运用递归获取评论层级结构数据,运用ajax实现评论页面交互,这里用thinkphp框架做个简单的demo练练手,为了简化流程这里第三级评论不再提供回复功能,当然只要在这个基础上稍作修改就可以实现无限回复功能,主要是view层样式修改较麻烦,需花些时间。一、效果需求分析:
在头部可以直接发布一级评论,最新发表的评论显示在最上面,如下效果图
对发表的评论可以回复,回复显示在上级评论下边,形成层级关系,如下效果图
页面操作细节:点击某个评论的回复按钮时,显示回复文本输入框,同时其他评论的回复文本输入框消失,当再次点击该回复按钮时,该文本框消失
在最后一级评论(这里设置是第三级)关闭回复功能
即时显示评论总数二、实现思路及细节
1.数据表设计
2.controller层关键函数:
(1). 递归获取评论列表
<code class="hljs" php="">/** *递归获取评论列表 */ 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; }</code>
(2). 展示评论页面的action
<code class="hljs" lasso="">public function index(){ $num = M('comment')->count(); //获取评论总数 $this->assign('num',$num); $data=array(); $data=$this->getCommlist();//获取评论列表 $this->assign(commlist,$data); $this->display('index'); }</code>
(3).评论页面ajax访问添加评论的action
<code class="hljs" php="">/** *添加评论 */ 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); }</code>
3.view层实现
(1). 展示页面的整体结构设计
实际效果:
页面html代码:
<code class="hljs" xml=""> </code>
<!--发表评论区begin-->
<span>{$num}条评论</span>
<textarea class="txt-commit" replyid="0"></textarea>
<span >发表评论</span>
<!--发表评论区end--><!--评论列表显示区begin--><!-- {$commentlist} -->
<span>全部评论</span>
<!--一级评论列表begin-->
<!--一级评论列表end-->
<!--评论列表显示区end-->
(2). 单个评论信息div结构代码
<span>{$data.nickname}</span> <span>{$data.create_time}</span>
{$data.content}
对应的效果图:
对应的css代码:
<code class="hljs" 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; }</code>
4. JS代码
(1). 提交评论:提交评论的a标签按钮引用了样式comment-submit,在其点击事件中进行ajax操作
<code class="hljs" xml="">$('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 = </code>
-
<span>+data.nickname+</span><span>+data.create_time+</span>
+data.content+
-
; $(.comment-ul).prepend(newli); }else{ //否则添加到对应的孩子ul列表中 if('off'==replyswitch){//检验出回复关闭锁存在,即三级评论不再提供回复功能 newli =
-
<span>+data.nickname+</span><span>+data.create_time+</span>
+data.content+
-
; }else{//二级评论的回复按钮要添加回复关闭锁属性 newli =
-
<span>+data.nickname+</span><span>+data.create_time+</span>
+data.content+
-
; } $(li[comment_id='+data.parent_id+']).children(ul).prepend(newli); } }else{ //有错误信息 alert(data.error); } } }); } });
(2).回复评论:回复评论的a标签按钮引用了样式comment-reply,在其点击事件中进行显示或隐藏评论输入框的操作
<code class="hljs" scilab="">//点击回复按钮显示或隐藏回复输入框 $(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 = </code>
Copier après la connexion<textarea class="txt-reply" replyid="2" style="width: 100%; height: 60px;"></textarea>
提交回复
; }else{ divhtml =
<textarea class="txt-reply" replyid="2" style="width: 100%; height: 60px;"></textarea>
提交回复
; } $(this).after(divhtml); } });
<code> </code>
Copier après la connexion
-
-

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Il y aura de nombreuses fonctions de création d'IA dans l'application Doubao, alors quelles sont les fonctions de l'application Doubao ? Les utilisateurs peuvent utiliser ce logiciel pour créer des peintures, discuter avec l'IA, générer des articles pour les utilisateurs, aider tout le monde à rechercher des chansons, etc. Cette introduction aux fonctions de l'application Doubao peut vous indiquer la méthode de fonctionnement spécifique. Le contenu spécifique est ci-dessous, alors jetez-y un œil ! Quelles sont les fonctions de l'application Doubao ? Réponse : Vous pouvez dessiner, discuter, écrire des articles et trouver des chansons. Introduction de la fonction : 1. Requête de questions : vous pouvez utiliser l'IA pour trouver des réponses aux questions plus rapidement et vous pouvez poser tout type de questions. 2. Génération d’images : l’IA peut être utilisée pour créer des images différentes pour tout le monde. Il vous suffit d’indiquer à chacun les exigences générales. 3. Chat AI : peut créer une IA capable de discuter avec les utilisateurs,

Les téléphones mobiles vivox100 et x100 sont des modèles représentatifs de la gamme de produits de téléphonie mobile de Vivo. Ils représentent respectivement les niveaux de technologie haut de gamme de Vivo à différentes périodes. Par conséquent, ces deux téléphones mobiles présentent certaines différences en termes de conception, de performances et de fonctions. Cet article procédera à une comparaison détaillée entre ces deux téléphones mobiles en termes de comparaison des performances et d'analyse des fonctions pour aider les consommateurs à mieux choisir le téléphone mobile qui leur convient. Tout d’abord, examinons la comparaison des performances entre les vivox100 et x100. vivox100s est équipé des dernières

Avec le développement rapide d'Internet, le concept d'auto-média est devenu profondément ancré dans le cœur des gens. Alors, qu’est-ce que l’auto-média exactement ? Quelles sont ses principales caractéristiques et fonctions ? Ensuite, nous explorerons ces questions une par une. 1. Qu’est-ce que l’auto-média exactement ? Nous-médias, comme son nom l’indique, signifie que vous êtes les médias. Il fait référence à un support d'informations grâce auquel des individus ou des équipes peuvent créer, éditer, publier et diffuser de manière indépendante du contenu via la plateforme Internet. Différent des médias traditionnels, tels que les journaux, la télévision, la radio, etc., les automédias sont plus interactifs et personnalisés, permettant à chacun de devenir producteur et diffuseur d'informations. 2. Quelles sont les principales caractéristiques et fonctions du self-média ? 1. Seuil bas : L’essor des médias autonomes a abaissé le seuil d’entrée dans l’industrie des médias. Des équipements encombrants et des équipes professionnelles ne sont plus nécessaires.

À mesure que Xiaohongshu devient populaire parmi les jeunes, de plus en plus de personnes commencent à utiliser cette plateforme pour partager divers aspects de leurs expériences et de leurs idées de vie. Comment gérer efficacement plusieurs comptes Xiaohongshu est devenu une question clé. Dans cet article, nous aborderons certaines des fonctionnalités du logiciel de gestion de compte Xiaohongshu et explorerons comment mieux gérer votre compte Xiaohongshu. À mesure que les médias sociaux se développent, de nombreuses personnes doivent gérer plusieurs comptes sociaux. C'est également un défi pour les utilisateurs de Xiaohongshu. Certains logiciels de gestion de compte Xiaohongshu peuvent aider les utilisateurs à gérer plusieurs comptes plus facilement, notamment la publication automatique de contenu, la publication programmée, l'analyse des données et d'autres fonctions. Grâce à ces outils, les utilisateurs peuvent gérer leurs comptes plus efficacement et accroître l'exposition et l'attention de leur compte. De plus, le logiciel de gestion de compte Xiaohongshu a

"Explorer Discuz : définition, fonctions et exemples de code" Avec le développement rapide d'Internet, les forums communautaires sont devenus une plate-forme importante permettant aux gens d'obtenir des informations et d'échanger des opinions. Parmi les nombreux systèmes de forum communautaire, Discuz, en tant que logiciel de forum open source bien connu en Chine, est favorisé par la majorité des développeurs et administrateurs de sites Web. Alors, qu’est-ce que Discuz ? Quelles fonctions a-t-il et comment peut-il aider notre site Web ? Cet article présentera Discuz en détail et joindra des exemples de code spécifiques pour aider les lecteurs à en savoir plus.

Astuces PHP : Implémentez rapidement la fonction de retour à la page précédente. Dans le développement web, nous rencontrons souvent le besoin d'implémenter la fonction de retour à la page précédente. De telles opérations peuvent améliorer l’expérience utilisateur et faciliter la navigation des utilisateurs entre les pages Web. En PHP, nous pouvons réaliser cette fonction grâce à un code simple. Cet article présentera comment implémenter rapidement la fonction de retour à la page précédente et fournira des exemples de code PHP spécifiques. En PHP, on peut utiliser $_SERVER['HTTP_REFERER'] pour récupérer l'URL de la page précédente

Pratique PHP : Exemple de code pour implémenter rapidement la séquence de Fibonacci La séquence de Fibonacci est une séquence très intéressante et courante en mathématiques. Elle est définie comme suit : le premier et le deuxième nombres sont 0 et 1, et à partir du troisième, en commençant par les nombres, chaque nombre. est la somme des deux nombres précédents. Les premiers nombres de la séquence de Fibonacci sont 0,1,1,2,3,5,8,13,21,... et ainsi de suite. En PHP, nous pouvons générer la séquence de Fibonacci par récursion et itération. Ci-dessous, nous montrerons ces deux

Explication détaillée des fonctions et fonctions de GDM sous Linux Dans le système d'exploitation Linux, GDM (GNOMEDisplayManager) est un gestionnaire de connexion graphique qui fournit une interface permettant aux utilisateurs de se connecter et de se déconnecter du système. GDM fait généralement partie de l'environnement de bureau GNOME, mais peut également être utilisé par d'autres environnements de bureau. Le rôle de GDM n'est pas seulement de fournir une interface de connexion, mais inclut également la gestion des sessions utilisateur, l'économiseur d'écran, la connexion automatique et d'autres fonctions. Les fonctions de GDM comprennent principalement les aspects suivants :

<span>{$data.nickname}</span> <span>{$data.create_time}</span>
{$data.content}
回复
<!--二级评论begin-->
<span>{$child.nickname}</span> <span>{$child.create_time}</span>
{$child.content}
回复
<!--三级评论begin-->
<span>{$grandson.nickname}</span> <span>{$grandson.create_time}</span>
{$grandson.content}
<!-- 回复 -->
<!--三级评论end-->
<!--二级评论end-->