suchen
HeimBackend-EntwicklungPHP-TutorialPHP: Erstellen Sie ein Infinitus-Kommentarmodul

Das Kommentarmodul meiner Abschlussarbeit wurde ursprünglich mit dem Duoshuo-Plug-in fertiggestellt, aber jetzt hoffe ich, den Kommentarinhalt selbst verwalten zu können, also habe ich angefangen, das Kommentarmodul selbst zu schreiben. Die spezifische Vorbereitung besteht darin, eine ähnliche Struktur wie der nächste Kommentar anzunehmen, d. h. die Kommentare der ersten Ebene werden direkt unter dem Artikel angezeigt, während die Kommentare der zweiten und dritten Ebene unter den Kommentaren der ersten Ebene angezeigt werden, wie in gezeigt die folgende Abbildung:

PHP: Erstellen Sie ein Infinitus-Kommentarmodul

Kommentarstruktur

Ich denke, dass dies eine Anwendung mit unendlicher Klassifizierung ist die Anwendung des Nachkommenbaums, Schleife Geben Sie den Inhalt aus und bilden Sie einen Kommentar (Freunde, die die Infinitus-Klassifizierung nicht verstehen, können meinen Artikel „Prinzipien und Implementierung der Infinitus-Klassifizierung“ lesen).

Natürlich gibt es noch weitere wichtige Punkte, um die Funktion von Infinitus, auf Kommentare zu antworten, wirklich zu vervollständigen.

Datenbankdesign

Zuallererst ist es das Design der Datentabelle. Wenn es sich um ein Forensystem handelt, können die Kommentardaten in zwei Tabellen unterteilt werden. Eine Tabelle speichert die Kommentarinformationen, einschließlich der Benutzer-ID des Beitrags oder der Benutzer-ID der Antwort, des Beitrags ID der Antwort, Zeitpunkt der Antwort usw.; eine weitere Tabelle speichert den Inhalt von Kommentaren, einschließlich des Themas des Beitrags und des Inhalts der Antwort.

Was ich fertiggestellt habe, ist das Kommentarmodul des Artikels. Es ist nicht in zwei Tabellen unterteilt. Ich habe den Inhalt und die Informationen des Kommentars wie folgt zusammengestellt:

UNSIGNED NOT NULL DEFAULT 0Kommentarinhalt
Spaltenname Spaltentyp SpalteAttribut
列名 列类型 属性 说明
comm_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT 主键
user_id INT UNSIGNED NOT NULL DEFAULT 0 用户id
parent_id INT UNSIGNED NOT NULL DEFAULT 0 评论的父级
artcile_id INT UNSIGNED NOT NULL DEFAULT 0 评论的文章id
comm_cont TEXT
评论的内容
comm_time INT UNSIGNED NOT NULL DEFAULT 0 评论发布的时间
Beschreibung
comm_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT Primärschlüssel
user_id INT UNSIGNED NOT NULL DEFAULT 0 userid
parent_id INTÜbergeordnetes Element des Kommentars
artcile_id INT UNSIGNED NOT NULL STANDARD 0 Kommentierte Artikel-ID
comm_cont TEXT
comm_Zeit INT UNSIGNED NOT NULL DEFAULT 0 Der Zeitpunkt, zu dem der Kommentar gepostet wurde

SQL-Anweisung:

CREATE TABLE comment (
    comm_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    user_id INT UNSIGNED NOT NULL DEFAULT 0 ,
    parent_id INT UNSIGNED NOT NULL DEFAULT 0 ,
    article_id INT UNSIGNED NOT NULL DEFAULT 0 ,
    comm_cont TEXT,
    comm_time INT UNSIGNED NOT NULL DEFAULT 0 
) ENGINE=MYISAM CHARSET=UTF8 ;

Diese Struktur ist die Grundlage für die Vervollständigung der Infinitus-Antwort. Es ist auch deutlich zu erkennen, dass die abgerufenen Daten von Infinitus gut klassifiziert werden können.

Strukturanalyse von Kommentaren

Es ist sehr einfach, einen Kommentar in die Datenbank einzufügen, ihn dann abzurufen und in HTML zu platzieren. Allerdings ist diese Struktur sehr chaotisch und ungeordnet. Wenn Sie ein Kommentarmodul wie einen Kommentar vervollständigen möchten, müssen Sie eine spezielle Methode verwenden.

Dann müssen wir uns die Struktur der Kommentare genauer ansehen.

PHP: Erstellen Sie ein Infinitus-Kommentarmodul

Kommentarstruktur

In Kombination mit der obigen Datentabellenstruktur kann gefolgert werden, dass die Daten aus der Datentabelle entnommen und nach klassifiziert werden Infinitus, seine Struktur sollte so sein:

array (
    array(一级评论,
        child=>array(
            二级评论,
            三级评论
            )
        ),
    array (
        一级评论 ,
        child=>array(
            )
    ……

Warum sagen Sie das? Sie können deutlich erkennen, dass die Kommentare der zweiten und dritten Ebene in die Kommentare der ersten Ebene eingeschlossen sind und die Kommentare der zweiten und dritten Ebene parallele Beziehungen sind. Daher sind die Kommentare der zweiten und dritten Ebene die Nachkommenknoten von Die Kommentare der ersten Ebene sowie die Kommentare der zweiten und dritten Ebene sind parallele Knoten, und es besteht keine Eltern-Kind-Beziehung.

Daraus kann geschlossen werden, dass die klassifizierten Daten nur einen Nachkommenknoten haben. Unabhängig davon, ob ein mehrstufiger Kommentar eine Antwort auf einen Kommentar der ersten Ebene ist oder nicht, solange er innerhalb des Gültigkeitsbereichs liegt eines Kommentars der ersten Ebene, dann dessen übergeordneter Knoten. Es muss sich um eine Rezension der ersten Ebene handeln.

Wie wird also das @某某某 in den Antworten der zweiten und dritten Ebene implementiert? Eigentlich hatte ich hier schon lange Probleme. Ich hatte erwartet, zur Vervollständigung einen Self-Join mit der Tabelle zu verwenden, aber das funktioniert nicht und zerstört die oben beschriebene Struktur. Schließlich habe ich die Antwort aus den angeforderten json-Daten erhalten, siehe bitte die kommentierten JSON-Daten:

PHP: Erstellen Sie ein Infinitus-Kommentarmodul

JSON-Daten

ist nach dem Hochladen etwas verschwommen . Schüler können das Plug-in in Firefox oder Google Chrome verwenden, um die JSON-Daten zu beobachten.

Konzentrieren Sie sich auf das Feld compiled_content und Sie können daraus schließen, dass es @某某某 direkt in der Datenbank speichert. Auf diese Weise wird das Problem gelöst. Durch Beobachtung der JSON-Daten kann auch überprüft werden, ob die oben erwähnte Struktur korrekt ist.

Spezifische Implementierung

Nachdem wir die Struktur analysiert haben, sprechen wir darüber, wie die Infinitus-Antwort vervollständigt wird. Der erste Schritt besteht darin, einen Kommentar der ersten Ebene zu erstellen. Dies ist einfach: Speichern Sie den Kommentar direkt Wenn Sie mit js auf einen Kommentar klicken, rufen Sie den Benutzernamen des Kommentars der ersten Ebene ab und speichern Sie ihn. Achten Sie beim Posten einer Antwort darauf, ihn mit dem Inhalt des Kommentars zu kombinieren der Hintergrund:

PHP: Erstellen Sie ein Infinitus-Kommentarmodul

Kommentare der Stufe 2

Dann ist die Leistung in der Datenbank wie folgt:

PHP: Erstellen Sie ein Infinitus-Kommentarmodul

Inhalt der Datentabelle
// replyUser 即 被回复的用户名 @xxxx
var content = $('#reply').val.split(replyUser)[1];
var userlink = '<a>' + replyUser + '</a>';
var comm_cont = encodeURIComponent(userlink+content);

Der nächste Schritt ist ein wichtiger Punkt. Die Klassifizierungsfunktion

lautet wie folgt:

PHP: Erstellen Sie ein Infinitus-Kommentarmodul
Nach einer solchen Klassifizierung ändert sich die Datenstruktur ungefähr wie folgt:

Klassifizierte Daten

/**
 * @param $data array  数据
 * @param $parent  string 父级元素的名称 如 parent_id
 * @param $son     string 子级元素的名称 如 comm_id
 * @param $pid     int    父级元素的id 实际上传递元素的主键
 * @return array 
 */
function getSubTree($data , $parent , $son , $pid = 0) {
    $tmp = array();
    foreach ($data as $key => $value) {
        if($value[$parent] == $pid) {
            $value['child'] =  getSubTree($data , $parent , $son , $value[$son]);
            $tmp[] = $value;            
        }
    }
    return $tmp;
}
Mit dieser Struktur Sie können Kommentare ganz einfach wie folgt vervollständigen

Gleichzeitig wird der Antwortstil wie unten gezeigt gebildet: PHP: Erstellen Sie ein Infinitus-Kommentarmodul

snipaste20170105_204906 .png

<?php  foreach($tree as $key=>$val) ?>
<p>
    </p><h2><?php  echo $val[&#39;user_name&#39;];?></h2>
    <p><?php  echo $val[&#39;comm_cont&#39;] ?></p>
    <!-- 其他信息 -->
    <p>
        <?php  if(!empty($val[&#39;child&#39;])) { ?>
        <?php  foreach($val[&#39;child&#39;] as $k=>$v) ?>
        </p><p>
            </p><h2><?php  echo $v[&#39;user_name&#39;];?></h2>
            <p><?php  echo $v[&#39;comm_cont&#39;] ?></p>
            <!-- 其他信息 -->
        
        <?php  }}?>
    

<?php  } ?>
Auf diese Weise wird die Infinitus-Antwort mit einer ähnlichen Kommentarstruktur vervollständigt.

PSPHP: Erstellen Sie ein Infinitus-Kommentarmodul

Dies ist nur eine Form des Kommentars. Wenn eine treppenartige Struktur vorliegt, ist diese Implementierung einfacher, wie unten gezeigt:

Treppenhaus-Kommentarstruktur

Diese Struktur ist einfach zu vervollständigen, solange die parent_id in der Speicherdatenbank vollständig mit der comm_id übereinstimmt, auf die Sie geantwortet haben Der Prozess der Infinitus-Klassifizierung kann abgeschlossen werden.

Diese Art der unendlichen Nachkommenbaumklassifizierung unterscheidet sich von der zuvor angegebenen Nachkommenbaumklassifizierung. Nach der Klassifizierung werden die Unterklassen nicht in untergeordnete Klassen eingebunden, sondern bilden eine Hierarchie. Die höchste Ebene ist 0. und sie werden nach unten gehen. PHP: Erstellen Sie ein Infinitus-Kommentarmodul
Zum Beispiel: Wenn der Kommentar der ersten Ebene „comm_id=1“ und „parent_id=0“ hat, dann hat der Kommentar der zweiten Ebene „comm_id=2“, „parent_id=1“, wenn der Kommentar der dritten Ebene „comm_id=3“ hat. parent_id=2;

Die Klassifizierung bildet schließlich die folgende Struktur

array(
array('comm_id'=>1,parent_id=>0,art_id=>1,'lev'=>0) ,
array('comm_id'=>2,parent_id=>1,art_id=>1,'lev'=>1),
array('comm_id'=>3,parent_id=>2,art_id=>1,'lev'=>2),
array('comm_id'=>4,parent_id=>3,art_id=>1,'lev'=>3),
array('comm_id'=>5,parent_id=>2,art_id=>1,'lev'=>2)
);

然后直接循环输出,并将lev作为属性打印在html中,最后利用js读取lev,并根据不同的等级分配不同的margin-left即可,它会随着margin的不同而排列在不同的位置,如下:

// html中
<?php  foreach($tree as $key=>$val) {?>
<p>">
……
</p>
<?php  } ?>

// js中
$('p.comm_list').css('margin-left' , 20 * lev);


Das obige ist der detaillierte Inhalt vonPHP: Erstellen Sie ein Infinitus-Kommentarmodul. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
PHP in Aktion: Beispiele und Anwendungen in realer WeltPHP in Aktion: Beispiele und Anwendungen in realer WeltApr 14, 2025 am 12:19 AM

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.

PHP: Erstellen interaktiver Webinhalte mühelosPHP: Erstellen interaktiver Webinhalte mühelosApr 14, 2025 am 12:15 AM

PHP erleichtert es einfach, interaktive Webinhalte zu erstellen. 1) Generieren Sie Inhalte dynamisch, indem Sie HTML einbetten und in Echtzeit basierend auf Benutzereingaben oder Datenbankdaten anzeigen. 2) Verarbeitungsformularübermittlung und dynamische Ausgabe erzeugen, um sicherzustellen, dass HTMLSpecialChars zur Vorbeugung von XSS verwendet wird. 3) Verwenden Sie MySQL, um ein Benutzerregistrierungssystem zu erstellen und Anweisungen von Password_hash und Preprocessing vorzubereiten, um die Sicherheit zu verbessern. Durch die Beherrschung dieser Techniken wird die Effizienz der Webentwicklung verbessert.

PHP und Python: Vergleich von zwei beliebten ProgrammiersprachenPHP und Python: Vergleich von zwei beliebten ProgrammiersprachenApr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

Die dauerhafte Relevanz von PHP: Ist es noch am Leben?Die dauerhafte Relevanz von PHP: Ist es noch am Leben?Apr 14, 2025 am 12:12 AM

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

Der aktuelle Status von PHP: Ein Blick auf WebentwicklungstrendsDer aktuelle Status von PHP: Ein Blick auf WebentwicklungstrendsApr 13, 2025 am 12:20 AM

PHP bleibt in der modernen Webentwicklung wichtig, insbesondere in Content-Management- und E-Commerce-Plattformen. 1) PHP hat ein reichhaltiges Ökosystem und eine starke Rahmenunterstützung wie Laravel und Symfony. 2) Die Leistungsoptimierung kann durch OPCACHE und NGINX erreicht werden. 3) Php8.0 führt den JIT -Compiler ein, um die Leistung zu verbessern. 4) Cloud-native Anwendungen werden über Docker und Kubernetes bereitgestellt, um die Flexibilität und Skalierbarkeit zu verbessern.

Php gegen andere Sprachen: Ein VergleichPhp gegen andere Sprachen: Ein VergleichApr 13, 2025 am 12:19 AM

PHP eignet sich für die Webentwicklung, insbesondere für die schnelle Entwicklung und Verarbeitung dynamischer Inhalte, ist jedoch nicht gut in Anwendungen auf Datenwissenschaft und Unternehmensebene. Im Vergleich zu Python hat PHP mehr Vorteile in der Webentwicklung, ist aber nicht so gut wie Python im Bereich der Datenwissenschaft. Im Vergleich zu Java wird PHP in Anwendungen auf Unternehmensebene schlechter, ist jedoch flexibler in der Webentwicklung. Im Vergleich zu JavaScript ist PHP in der Back-End-Entwicklung präziser, ist jedoch in der Front-End-Entwicklung nicht so gut wie JavaScript.

PHP vs. Python: Kernmerkmale und FunktionenPHP vs. Python: Kernmerkmale und FunktionenApr 13, 2025 am 12:16 AM

PHP und Python haben jeweils ihre eigenen Vorteile und eignen sich für verschiedene Szenarien. 1.PHP ist für die Webentwicklung geeignet und bietet integrierte Webserver und reichhaltige Funktionsbibliotheken. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit prägnanter Syntax und einer leistungsstarken Standardbibliothek. Bei der Auswahl sollte anhand der Projektanforderungen festgelegt werden.

PHP: Eine Schlüsselsprache für die WebentwicklungPHP: Eine Schlüsselsprache für die WebentwicklungApr 13, 2025 am 12:08 AM

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion