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:
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:
Spaltenname | Spaltentyp | SpalteAttribut
|
Beschreibung | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
comm_id | INT | UNSIGNED PRIMARY KEY AUTO_INCREMENT | Primärschlüssel | ||||||||||||||||||||||||||||
user_id | INT | UNSIGNED NOT NULL DEFAULT 0 | userid | ||||||||||||||||||||||||||||
parent_id | INT | UNSIGNED NOT NULL DEFAULT 0Übergeordnetes Element des Kommentars | |||||||||||||||||||||||||||||
artcile_id | INT | UNSIGNED NOT NULL STANDARD 0 | Kommentierte Artikel-ID | ||||||||||||||||||||||||||||
comm_cont | TEXT | Kommentarinhalt | |||||||||||||||||||||||||||||
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.
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:
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:
Kommentare der Stufe 2
Dann ist die Leistung in der Datenbank wie folgt:// 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:
Nach einer solchen Klassifizierung ändert sich die Datenstruktur ungefähr wie folgt:
/** * @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:
snipaste20170105_204906 .png
<?php foreach($tree as $key=>$val) ?> <p> </p><h2><?php echo $val['user_name'];?></h2> <p><?php echo $val['comm_cont'] ?></p> <!-- 其他信息 --> <p> <?php if(!empty($val['child'])) { ?> <?php foreach($val['child'] as $k=>$v) ?> </p><p> </p><h2><?php echo $v['user_name'];?></h2> <p><?php echo $v['comm_cont'] ?></p> <!-- 其他信息 --> <?php }}?> <?php } ?>Auf diese Weise wird die Infinitus-Antwort mit einer ähnlichen Kommentarstruktur vervollständigt.
PS
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.
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!

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

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.

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


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion