Discuz! Forum verfügt über zahlreiche Konfigurationsoptionen im Hintergrund und viele Funktionen können über diese Konfigurationsoptionen erreicht werden. Während der sekundären Entwicklung des Discuz!-Forums müssen wir auch häufig einige Konfigurationen hinzufügen und dann basierend auf den Konfigurationen verschiedene Vorgänge ausführen. Als Nächstes stelle ich vor, wie man im Discuz!-Forum Konfigurationsoptionen hinzufügt. Nehmen wir Discuz! 6.0 als Beispiel. Werfen wir zunächst einen Blick auf die Konfigurationsoberfläche des Discuz!-Forum-Backends. Melden Sie sich als Administrator beim Forum-Backend an, wählen Sie „Grundeinstellungen“ -> „Grundeinstellungen“ und die folgende Oberfläche wird angezeigt: ![]() Abbildung 1 Diese Seite verwendet einen Frame. Wir klicken mit der rechten Maustaste auf die Seite in der unteren rechten Ecke und wählen „Eigenschaften“. Im Popup-Fenster finden wir, dass die URL dieser Seite „/admincp.php?action=settings&do=basic“ lautet. Das von dieser Seite verwendete Programm ist admincp.php. Lassen Sie uns zuerst diese Datei analysieren. Der Inhalt der Zeilen 172-290 dieser Datei ist wie folgt: Der Code lautet wie folgt: $cpscript = ''; wenn($adminid == 1) { wenn($action == 'home') { $cpscript = "Startseite"; } elseif($action == 'runwizard' && isfounder()) { $cpscript = "Ausführender Assistent"; } sonst … } sonstwenn($adminid == 2 || $adminid == 3) { wenn($action == 'home') { $cpscript = "Startseite"; } elseif((($allowedituser || $allowbanuser) && ($action == 'editmember' || $action == 'banmember')) || ($allowbanip && $action == 'ipban')) { $cpscript = "Mitglieder"; } sonst wenn…… } wenn($cpscript) { } sonst wenn…… } wenn($cpscript) { require_once DISCUZ_ROOT.'./admin/'.$cpscript.'.inc.php'; } … Dieses Programm weist $cpscript hauptsächlich basierend auf der Variable $action einen Wert zu und importiert dann basierend auf dem Wert von $cpscript die Programmdatei in das Administratorverzeichnis. Wenn wir auf die Beurteilung des $action-Werts auf der linken Seite von Zeile 179 achten, werden wir feststellen, dass der Wert von $cpscript „settings“ ist, was bedeutet, dass die in Zeile 283 eingeführte Programmdatei „admin/settings.inc.php“ ist. Öffnen Sie dann die Datei settings.inc.php und Sie werden feststellen, dass der Inhalt sehr lang ist. Lassen Sie sich davon nicht abschrecken, analysieren Sie ihn einfach sorgfältig. Zeile 14: Der Code lautet wie folgt: $operation = $operation ? $operation : (!empty($do) ? $do : ''); Hier wird $operation ein Wert basierend auf dem von GET empfangenen $do-Wert zugewiesen. In diesem Beispiel ist sein Wert „basic“. Zeile 17: Der Code lautet wie folgt: $query = $db->query("AUSWÄHLEN * AUS {$tablepre}Einstellungen"); während($setting = $db->fetch_array($query)) { $einstellungen[$einstellung['Variable']] = $einstellung['Wert']; } Diese Programmabschnitte lesen Daten aus der Datenbank und speichern diese im Array $settings für spätere Aufrufe. Der folgende Programmaufbau sieht wie folgt aus: Der Code lautet wie folgt: if(!submitcheck('settingssubmit')) { wenn($operation == 'Zugriff') { … } elseif($operation == 'Stile') { … } sonst … } anders { //Datenverarbeitung nach Absenden des Formulars … } Mit der Funktion „Submitcheck“ im Programm wird geprüft, ob ein Formular übermittelt wurde. Wenn das Formular nicht übermittelt wurde, wird das Formular gemäß der zuvor verarbeiteten $operation angezeigt. Hier ist der Wert von $operation basic, der Folgendes ausführt: Der Code lautet wie folgt: $operation = "grundlegend"; showtype('allgemeine_einstellungen', 'oben'); showsetting('settings_bbname', 'einstellungenneu[bbname]', $settings['bbname'], 'text'); showsetting('Einstellungen_Sitename', 'Einstellungenneu[Sitename]', $settings['Sitename'], 'Text'); showsetting('settings_siteurl', 'einstellungenneu[siteurl]', $settings['siteurl'], 'text'); showsetting('settings_index_name', 'einstellungenneu[indexname]', $settings['indexname'], 'text'); showsetting('settings_icp', 'Einstellungenneu[icp]', $settings['icp'], 'Text'); showsetting('Einstellungen_Boardlizenziert', 'Einstellungenneu[Boardlizenziert]', $settings['Boardlizenziert'], 'Radio'); showsetting('Einstellungen_bbclosed', 'Einstellungenneu[bbclosed]', $settings['bbclosed'], 'Radio'); showsetting('Einstellungen_geschlossenerGrund', 'Einstellungenneu[geschlossenerGrund]', $settings['geschlossenerGrund'], 'Textbereich'); Hier wird eine benutzerdefinierte Funktion showsetting verwendet. Ihr erster Parameter ist der Name der Konfigurationsoption. Der zweite Parameter ist der Namenswert der Eingabe bei der Anzeige in HTML. Der dritte Parameter ist der Wert der aktuellen Konfigurationsoption, der ein Wert im Array $settings ist, das aus der obigen Datenbank gefunden wurde. Der vierte Parameter ist der Typ der Eingabe. Wir fügen unsere eigene Konfigurationsoption mytest hinzu. Fügen Sie am Ende des obigen Codes den folgenden Code hinzu: Der Code lautet wie folgt: showsetting('Einstellungen_mytest', 'Einstellungenneu[mytest]', $settings['mytest'], 'Radio'); Speichern und aktualisieren Sie die Seite, um unten auf der Seite eine weitere Option zu finden: Wenn wir jedoch feststellen, dass settings_mytest auf Englisch ist, können wir das Sprachpaket ändern. Fügen Sie in der Datei templates/default/admincp.lang.php den folgenden Code unterhalb von Zeile 450 „settings_closedreason_comment“ => „Eingabeaufforderung, die angezeigt wird, wenn das Forum geschlossen wird“ hinzu: Der Code lautet wie folgt: 'settings_mytest' => 'Testoptionen:', 'settings_mytest_comment' => 'Eingabeaufforderung für Testoptionen', Aktualisieren Sie nach dem Speichern die Seite und Sie sehen chinesische Eingabeaufforderungen. Bisher wurde die Anzeige auf der Benutzeroberfläche verarbeitet. Lassen Sie uns nun darüber sprechen, wie die Daten nach dem Absenden des Formulars verarbeitet werden. In der Datei /admin/settings.inc.php entspricht im Abschnitt if(!submitcheck('settingsubmit')) {} die else-Anweisung der else-Anweisung. Dieser Teil des Codes verarbeitet zuerst die übermittelten Daten und fügt sie dann alle in das Array $settingsnew ein, das die per POST gesendeten Daten tatsächlich überprüft. In dieser Datei findet sich in etwa Zeile 1140 der folgende Code: Der Code lautet wie folgt: foreach($settingsnew AS $key => $val) { wenn(isset($settings[$key]) && $settings[$key] != $val) { $$Schlüssel = $Wert; $updatecache = TRUE; if(in_array($key, array('newbiespan', 'ThemaproSeite', 'BeitragproSeite', 'MitgliedproSeite', 'heißes Thema', 'startthreshold', 'delayviewcount', 'visitedforums', 'maxsigrows', 'timeoffset', 'statscachelife', 'pvfrequence', 'oltimespan', 'seccodestatus', 'maxprice', 'rssttl', 'rewritestatus', 'bdaystatus', 'maxonlines', 'loadctrl', 'floodctrl', 'regctrl', 'regfloodctrl', 'searchctrl', 'extcredits1', 'extcredits2', 'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8', 'transfermincredits', 'exchangemincredits', 'maxincperthread', 'maxchargespan', 'maxspm', 'maxsearchresults', 'maxsmilies', 'threadmaxpages', 'membermaxpages', 'maxpostsize', 'minpostsize', 'maxavatarsize', 'maxavatarpixel', 'maxpolloptions', 'karmaratelimit', 'losslessdel', 'edittimelimit', 'smcols', 'watermarktrans', 'watermarkquality', 'jscachelife', 'waptpp', 'wapppp', 'wapmps', 'maxmodworksmonths', 'frameon', 'maxonlinelist'))) { $val = (Float)$val; } $db->query("REPLACE INTO {$tablepre}Einstellungen (Variable, Wert) VALUES ('$key', '$val')"); } } Der Zweck dieses Codes besteht darin, zu prüfen, ob im Array $settingsnew eine entsprechende Option vorhanden ist. Wenn dies der Fall ist und es sich um eine numerische Option handelt, wird sie in Float konvertiert und dann wird alles durch REPLACE INTO in die Datentabelleneinstellungen ersetzt. Die Option mytest wurde von uns neu hinzugefügt und es gibt keine solche Option in der Datentabelle. Ich muss zuerst die folgende SQL-Anweisung in der Datenbank ausführen: REPLACE INTO cdb_settings(variable, value) VALUES('mytest', '0'). Achten Sie darauf, das Tabellenpräfix zu ändern. Die mytest-Optionen werden jetzt in der Datenbank gespeichert. Um Zeile 1160 herum wird der Code updatecache('settings') ausgeführt, um die Daten automatisch im Settingsnew-Array zwischenzuspeichern. Freunde, die sich für die spezifische Implementierungsmethode interessieren, können sich genauer ansehen, wie die Datei /include/cache.func.php implementiert wird. Nachdem die Daten zwischengespeichert wurden, befindet sich ein Mytest-Element im Array $_DCACHE['settings'] in der Datei /forumdata/cache/cache_settings.php. Anschließend können wir diese Option verwenden, um einige Vorgänge auszuführen. Ungefähr in Zeile 93 der Datei /include/common.inc.php befindet sich der folgende Code: Der Code lautet wie folgt: $cachelost = (@include DISCUZ_ROOT.'./forumdata/cache/cache_settings.php') ? '' : 'Einstellungen'; @extract($_DCACHE['Einstellungen']); Durch den obigen Code wird der Wert der mytest-Konfigurationsoption direkt in der Variable $mytest gespeichert, und wir können $mytest direkt beurteilen, um Vorgänge auszuführen. Fügen Sie den folgenden Code in Zeile 17 der Datei index.php ein: Der Code lautet wie folgt: wenn($meintest) { echo 'Hallo, dies ist Test'; } Nach dem Ausführen ist der Effekt wie folgt: ![]() Abbildung 2 Bisher wurde dem Discuz!-Forum erfolgreich eine Option hinzugefügt. Natürlich gibt es im Forum noch viele weitere Optionen. Die Grundidee ist dieselbe und Sie können sie je nach spezifischer Situation hinzufügen. |
<<: Methode zur Optimierung von MySQL-Gruppenabfragen
>>: Erstellen Sie eine Bildschirmaufzeichnungsfunktion mit JS
Voraussetzungen Um Container auf Windows Server a...
html <div Klasse="nach oben" v-show=...
Verzeichnisstruktur . │ .env │ docker-compose.yml...
Inhaltsverzeichnis 1: Handschriftliche Seitennumm...
XML/HTML-CodeInhalt in die Zwischenablage kopiere...
Vorwort Das Zusammenführen oder Aufteilen anhand ...
Ich glaube, dass Leute, die Erfahrung mit React h...
Der erste Schritt besteht darin, die Versionsnumm...
Die Docker-Image-ID ist eindeutig und kann ein Im...
Inhaltsverzeichnis 1. Hauptfunktionen 2. Umsetzun...
Vorwort MySQL unterstützt Multithread-Replikation...
Der einfache Rechner des WeChat-Applets dient Ihn...
Inhaltsverzeichnis Stile in uni-app Zusammenfasse...
Inhaltsverzeichnis 1. Übersicht über die logische...
In MySQL werden viele Typen von Auto-Increment-ID...