Aufbau der Navigation im Administrations-Bereich

Artikel, Anleitungen, Minikurse und Leitfaden für alle möglichen PC-Themen und PHP/phpBB.
Antworten
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Aufbau der Navigation im Administrations-Bereich

Beitrag von oxpus »

Ich kann keine Tabelle mit der Navigation im Admin-Bereich finden?
Wer vergeblich in de Datenbank nach einer Tabelle für die Navigation im Administrationsbereich gesucht hat, musste schnell feststellen: Es gibt keine! Und dem ist auch wirklich so.

Doch wie wird denn nun die Navigation aufgebaut?
Kurz: Modular durch jede admin_...php-Datei im Ordner admin/!

Und lang:
Im admin-Ordner unterhalb des Forum-Roots sind mehrere admin_...php-Dateien vorhanden, wie z.B. die admin_board.php.
In jeder dieser Dateien sind Informationen für die Navigation des Admin-Bereiches hinterlegt, die dieses Modul mitbringt. Somit lässt sich das ACp modular aufbauen und man muss nicht immer nach dem Hinzufügen von Modulen (geschieht ja fpr das ACP oft nur durch Hochladen von Dateien) auch noch irgend einen Index anpassen.

Wie funktioniert nun diese modulare Arbeitsweise?
In der admin/admin_board.php schauen die Informationen zur Navigation so aus:

Code: Alles auswählen

if( !empty($setmodules) )
{
	$file = basename(__FILE__);
	$module['General']['Configuration'] = "$file";
	return;
}
Frage: Was steht da?
Antwort: PHP!

Nein, Scherz beiseite ;)

Das sind die Informationen, aus denen sich durch jede admin_...php-Datei die Navigation Stück für Stück zusammensetzt.

Und wie funktioniert das Ganze nun?
Wenn man das ACP aufruft, wird zunächst der Admin-Index erstellt (rechtes Frame) und damit auch die Navigation (linkes Frame).
Zunächst muss also jede admin_...php-Datei untersucht werden, ob denn Navigations-Daten enthalten sind und diese sind entsprechend auszulesen.

Also zunächst dieser Prozess gestartet, in dem die Variable $setmodules auf TRUE gesetzt wird.
Anschliessend wird das admin-Verzeichnis physisch ausgelesen und jede gefundene admin_...php-Datei includiert, also mit dem PHP-Befehl include(); eingebunden.
Da die Variable $setmodules gesetzt ist, werden nun dem Array $modules() alle Werte zugewiesen, die die Dateien bereitstellen.
In obigem Beispiel erhält das Array den Key ['General'] mit dem Unterschlüssel ['Configuration'] und dahinter wird der Dateiname hinterlegt.
Da das Script dann an diesem Punkt aber nicht weiter ausgeführt werden muss/soll/kann/darf, beendet es sich hier mit exit;.

Ja, die Informationen sind nun ausgelesen, davon hat man aber noch keine Navigation!?!
Richtig, und ab jetzt kommt die Zauberstunde:
Zunächst wird die Variable $setmodules geleert, damit bei der Benutzung des ACP nicht wieder die Dateien eingebunden und die Navigationsdaten erneut gelesen werden.

Danach wird das Menü nun wirklich und endlich erstellt:
Der erste Key des Arrays $modules beinhaltet den Namen des ACP-Modules. Also hier "General". Der zweite Key ist die Funktion in diesem Modul, hier "Configuration". Hinterlegt wird da der Dateiname, in einigen Modulen sogar mit Parametern, welcher den Link zum Starten des Modules darstellt.

Und warum finde ich den dann nicht diese Einträge in meinem Menü?
Wenn Du Deine Sprache auf englisch einstellst, dann siehst Du sie.
Ansonsten noch etwas mehr Magic:
Die Keys werden in der jeweiligen Sprache, die der User eingestellt hat, übersetzt, sofern sich diese in den eingebundenen Sprachdateien (die lang_admin.php und lang_main.php werden im ACP immer automatisch eingebunden, andere Sprachdateien je nach installiertem Mod ebenfalls) als Schlüssel des Arrays $lang wiederfinden.
Ansonsten wird der Keyname zum Modul- bzw. Funktionsname, wobei Sonderzeichen umgewandelt werden, wie z.B. der Unterstrich zu einem Leerzeichen.

So geht also die ACP-Navigation alle Dateien durch, liest die Navi-Informationen aus und erstellt daraus das ACP-Menü.
Somit ist dann auch schnell klar, warum die Module im ACP nicht unbedingt korrekt sortiert sind: Sie wird nach den Dateinamen und Keys sortiert und nicht nach der Übersetzung. Obwohl das an sich auch kein Problem wäre...

Da das Script nun noch starten muss, wenn es denn nun erfolgreich in der Navigation eingebunden ist, wird hinter dem Funktionsnamen dann noch der in der entsprechenden $modules hinterlegte Link als Link zum Script eingebunden, daß man dann bekanntermaßen per Mausklick im rechten Frame startet.

Somit wäre die Admin-Navigation komplett erstellt und deren Funktionsweise beschrieben.
Diese Vorgehensweise ermöglicht es nun, das Navigation dynamisch je nach vorhandenen ACP-Modulen aufzubauen. Allerdings hat die Sache auch einen Nachteil:
Je langsamer der Server bei Zugriffen auf Dateien ist und je mehr Dateien überhaupt im Verzeichnis admin/ vorhanden sind, desto länger braucht phpBB, um die Navigation aufzubauen.
Aber es gibt hierzu ja einige Mods, die dieses beschleunigen.
Einer davon ist der Reduce Admin Navigation Mod.
Zuletzt geändert von oxpus am Di 08.Nov, 2005 20:33, insgesamt 2-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten