Explode() sortierung? + menü frage

Hi,

ich bastel grad mal wieder an dieser Seite http://delectare.square7.ch/ und hab dafür extra ein paar PHP Grundlagen gelernt. Nebenbei noch ganz ausversehen CSS. :ps:

Momentan häng ich mal wieder am Menü fest. Ich hab da ein Verzeichnis festgelegt, wo die Texte für die Seite als html vorliegen. Dieses Verzeichnis hab ich in eine menu.php eingebunden und mit explode() auflisten lassen. Soweit ich das verstanden hab, speichert explode das ganze als Array, stimmt das? Möchte es nämlich so einrichten, dass Dateien mit dem Namen „Index“; „Start“; „Home“ usw. an 1. Stelle im Menü stehen. Die anderen Punkte sind egal.

Hätte gedacht das ginge über eine if-Anweisung. Vom konzept her:

if($filename == "Index") {

Und da hackts schon. xD

menu.php sieht momentan so aus:

[code]Navigation

<?php /* Directory for your content files */ $dir = "sites/"; /* Open this directory */ $handle=opendir($dir); while ($file = readdir ($handle)) { if ($file != "." && $file != "..") { /* Remove file extension */ $filename = explode(".",$file); $filename = $filename[sizeof($filename)-2]; /* Show link to site */ echo '
'.$filename.'
'; } } /* Close the directory */ closedir($handle); ?>[/code]

Im übrigen frag ich mich grade, wie ich das Menü dazu bringe die verlinkten Seiten in der index.php anzuzeigen. Also ich klicke auf einen Menüpunkt, und dann wird der Text dazu im Textbereich des Templates angezeigt. o.0 Geht das mit iframe oder gibt es dafür eine coole PHP Funktion?

Vielen Dank schonmal.

P.S.: Das ganze ist fast sowas wie ne eigenständige Webanwendung. Die Idee ist, dass man in einem Schreibprogramm (am besten html) einen Text schreibt und formatiert und dann einfach hochlädt. Das Programm erzeugt aus den Dateinamen Menüpunkte und zeigt den Inhalt an. Und man kann Themes einbinden. :smiley: Hab ich mir als mein erstes Projekt vorgestellt, damit ich mehr über PHP lerne. Ausserdem hab ich kein CMS gefunden, das so arbeitet.

vielleicht meinst du

?
[In den Dateinamen dürfen dann keine Punkte vorkommen.]

Für das zweite Problem gibts auch eine Lösung. GET - Parameter.
Die Url sieht dann zum beispiel so aus example.com/?seite=impressum

das “impressum” kannst du dir so holen:

wie du das dann verarbeitest ist deine sache, du könntest ja dann die datei impressum.html einbinden [mit include() ]. Vorsicht aber, die Variable könnte böse Inhalte haben. Also zuerst absichern…

Die Dateinamen werden sowieso automatisch gekürzt und weitergegeben. Wenn ich jetzt aber das mit dem $filename = $filename[0] andwende, dann erscheint nur noch ein „i“ als Linkname. Anscheinend wird jeder Buchstabe einzeln gelistet und ich versteh nicht warum. :susp:

Und mit dem $_GET kämpf ich noch… !haue

Vielleicht hast du irgendwie das ganzer derzeit in einzelne Buchstaben zerlegt???

mit print_r($variablenname) kannst du das array mal komplett ausgeben.

$_Get ist einfach, die parameter die an der url angehängt werden sind die $_Get parameter, hier im Forum ist z.B $_GET[‘f’] 10

was dann in etwa so ausgeben wird:

$forumid = $_GET[‘f’]

echo = $forumid

// Ausgabe: 10

Ach.
Korrigiert mich, wenn ich falsch liege:
explode zerlegt den Dateinamen in einzelne Buchstaben. Daher zeigt er mir ein “i” an. Also hab ich mir jetzt gedacht, dass man mit implode() diese Liste wieder zusammensetzen könnte. Theoretisch. Wenn’s jetzt noch in der Praxis funktionieren würde, wär ich glücklich.

Wenn ich direkt implode($filename) mach, dann beschwert er sich, dass kein array angegeben wurde. Mach ich vorher $array = array($filename) und dann implode(array), dann macht der mir schon wieder ein “i” hin. Irgendwie bin ich zu blöd dafür…

Du solltest schon auf php.net im Manual nachschauen, welche Parameter eine Funktion erwartet.
mit explode zerlegst du anhand eines Trennzeichen und mit implode “klebst” du das array anhand eines Trennzeichen wieder zusammen.

bsp, wenn du einen Dateinamen anhand des Punktes trennst, und nur die Erweiterun nicht Ausgeben willst:

[code]//Dateiname auftrennen
$filename_array = explode(’.’, $file);

//letztes Element aus dem array “rauswerfen”
//(man könnte auch array_slice oder unset nutzen)
array_pop($filename_array);

//array wieder zusammenfügen
$filename = implode(’.’, $filename_array);[/code]

EDIT:
Ok, ich denke ich hab ne Lösung entdeckt:

[code] if($filename == „index“)
{
$index = ‚

‘.$filename.’
’;
}
	if($filename != "index" && $filename != "home" && $filename != "start")
	{
		$pages = '<div id="navilinks"><a href="'.$dir.$file.'">'.$filename.'</div>';
	}
	[/code]

Ich hab jetzt sozusagen abgefragt, ob der Name z. B. „Index“ ist. Wenn ja, dann soll er das Ergebnis in die Variabl „$index“ packen. In der zweiten fragt er nun ob es keines der genannten Dateien ist. Wenn dem so ist, soll er den Rest in $pages packen.

Die beiden Variablen hab ich dann in die Templatedatei ausgeben lassen. Jetzt sollte die zweite Abfrage halt noch so funktionieren, dass wenn mehrere Dateien drin sind, er mir auch mehrere Menüpunkte macht. Derzeit hab ich die Dateien index.php, gallery,php und blabla.php drin. Und er ersetzt mir die gallery.php mit blabla.php bzw. gibt nur eines der beiden aus. :ps:

vielleicht tust du dir mit einem switch leichter:

switch($filename){ case "index": $index = 'bla'; break; default: $pages = 'blub'; break; }

Schon dabei :smiley:

[code] switch($filename)
{
case „index“:
$index = $filename;
$index = ‚

‘.$filename.’
’;
break;
		case "home":
			$index = $filename;
			$index = '<div id="navilinks"><a href="'.$dir.$file.'">'.$filename.'</div>';
		break;
		
		case "start":
			$index = $filename;
			$index = '<div id="navilinks"><a href="'.$dir.$file.'">'.$filename.'</div>';
		break;
		
		default;
			$pages = '<div id="navilinks"><a href="'.$dir.$file.'">'.$filename.'</div>';
		break;
		}[/code]

Sobald ich bei Default das Zeug in $pages einbinde und es im Template ausgebe, erscheint nur noch „blabla“ im Menü. Gallery ist nicht zu finden. Geb ich stattdessen gleich den Link in Menü.php aus, dann gibt es keine Probleme. Allerdings ist dann die „Sortierung“ wieder im Eimer.

Ich tüftel noch dran. Ich glaub, ich bin der endgültigen Lösung ganz nahe. :ps:

wenn du das so machst, kannst du es auch gerade so vereinfachen:

switch($filename) { case "index": case "home": case "start": $index = '<div id="navilinks"><a href="'.$dir.$file.'">'.$filename.'</div>'; break; default; $pages = '<div id="navilinks"><a href="'.$dir.$file.'">'.$filename.'</div>'; break; }

Juhu, hab die Lösung gefunden. :smiley:

Ich muss nur bei $pages einen Punkt hinten dazuschreiben. Ungefähr so:

Damit lässt sich die Variable mehrfach belegen. freu
Und nun zum Problem mit dem GET. Vielleicht bekomm ich es jetzt hin.

@bcg: Klappt irgendwie nicht so richtig. Bekomm da ne Fehlermeldung.

Aha, eine Fehlermeldung.

(Seit dem Glaskugelverbot von 2001 zur Risikosteigerung am Finanzmarkt können auch wir nicht mehr hellsehen.)

Die Fehlermeldung ist auch nicht mehr wichtig, nachdem das Menü jetzt vom Grundprinzip her funktioniert. Muss nur noch mit dieser GET Funktion rumspielen.

EDIT:
OK, Problem gelöst. :smiley: Vielleicht hat noch jemand Lust, das Menü auszuprobieren. Könnte sein, dass noch der eine oder andere Fehler drin ist. Ich hab das jetzt mit einer if-else Formel eingebunden, die mit file_exists prüft ob’s die gewählte Datei gibt. Hoffe, dass das richtig ist.

Also vielen Dank für eure Hilfe und vor allem eure Geduld. :smiley: