Erweiterung einer Switchvariable bei neuer Datei
schmichl
- php
Hallo Leute!
Ich hab ein großes Problem (und da ich noch eher Newbie in PHP bin, frage ich lieber Profis)!
Für meine Homepage will ich ein kleines CMS machen.
Ich bin schon so weit, das man die Inhalte der Seiten editieren kann und das man eine neue (.html) Datei anlegen kann. Es soll so funktionieren (dann kann man eine Seite zB über index.php?id=news aufrufen, aber ich denke, das kann man erkennen):
<?php
switch($_GET['id']){
case 'news':
include 'news.html';
break;
case 'links':
include 'links.html';
break;
case 'kontakt':
include 'kontakt.html';
break;
default:
include 'home.html';
}
?>
Wenn ich jetzt eine Neue Datei anlege, dann muss ich ja auch einen neuen Switch fall machen.
(bei zB test.html muss das
case 'test':
include 'test.html';
break;
lauten)
WIE GEHT DAS?
Danke für eure Hilfe
PS: Ich habe es schon so versucht, aber das hat nicht wirklich geklappt:
In einer Datei (switcharray) steht ein Array:
$inhalt[0] = "home";
$inhalt[1] = "news";
$inhalt[2] = "links";
$inhalt[3] = "kontakt";
Dann kann man das Array erweitern und so in die Switch Fälle einlesen:
<?php
include 'switcharray.php';
switch($_GET['id']){
default:
include 'home.html';
for ($x = 0; $x<count($inhalt); $x++)
{
case '$inhalt[$x]';
include '$inhalt[$x].html';
break;
}
}
?>
Bei mir hats bei 2 Punkten gehadert:
1. In das Array wurde immer $inhalt[1] geschrieben, obwohl ich das gemacht habe:
$x<count($inhalt)
2. Das aufrufen der index.php datei hat nicht funktioniert, da war ein Fehler, ich schätze, weil das mit der for schleife nicht funktioniert hat!
Hallo schmichl!
WIE GEHT DAS?
Ich mach nicht soviel mit switch, deswegen ne einfache if-else-Lösung:
if (isset($_GET['id']) && gueltig($_GET['id'])) {
include($_GET['id']'.html');
} else {
include('fehler.html')
}
Hier mußt Du gueltig() durch eine geeignete Funktion ersetzen, die einen Bool-Wert zurückgibt.
Du könntest z.B. Deinen Inhaltsarras ein wenig anders aufbauen:
$inhalt['home'] = 'homeincludedatei.html';
usw.
Und dann mit isset($inhalt[$_GET['id']]) prüfen, ob es so eine Seite gibt.
Wenn ja halt include($inhalt[$_GET['id']]) oder so machen.
Das ist denke ich einfacherals so ein komisches switch-Konstrukt.
MfG
Götz
Hallo und Danke für deine Antwort!
Ich mach nicht soviel mit switch, deswegen ne einfache if-else-Lösung:
if (isset($_GET['id']) && gueltig($_GET['id'])) {
include($_GET['id']'.html');
} else {
include('fehler.html')
}Hier mußt Du gueltig() durch eine geeignete Funktion ersetzen, die einen Bool-Wert zurückgibt.
Wie macht man so eine Funktion???
Du könntest z.B. Deinen Inhaltsarras ein wenig anders aufbauen:
$inhalt['home'] = 'homeincludedatei.html';
usw.
warum homeincludedatei.html?
Hallo schmichl!
Wie macht man so eine Funktion???
So, wie man eine Funktion eben macht?
Siehe auch http://de2.php.net/manual/en/language.functions.php.
(Vielleicht solltest Du Dir erstmal grundlegende PHP-Grundlagen anlesen? - Tutorials usw. findest Du über die Archivsuche oder über Deine bevorzugte Suchmaschine.)
warum homeincludedatei.html?
Das war ein beispielhaftes Beispiel.
Ich hätte da auch include('muh') schreiben können.
Oder besser sowieso require('muh') .. ähm.
MfG
Götz
Hello,
man könnte auch eine ganz normale Textdatei benutzen:
----------------------------
[news]
url=http://domain.tld/pages/news/
title='Hier geht es zu den News'
include=/www/domain/includes/news/include.inc.php
[gb]
url=http://domain.tld/features/guestbook/
title='komm, trag Dich ein'
include=/www/domain/includes/features/guestbook/include.inc.php
login=Admin
pass=F590AC2337DDEF590AC2337DDE
[admin]
url=http://domain.tld/intern/admin
login=Admin
pass=AAF590AC2337DDEF590AC2337D
usw.
und diese Datei dann mittels
$_inidata = parse_ini_file() http://de2.php.net/manual/de/function.parse-ini-file.php
einlesen. Natürlich kann man die Datei dann auch auf diesem Weg wieder wegschreiben (aus dem Array erzeugen). Bitte LOCK_EX (!) nicht vergessen.
Die includes kannst Du dann folgendermaßen durchführen:
if (isset($_GET['id']) and isset($_inidata[$_GET['id']['include']])
{
include($_inidata[$_GET['id']['include']]);
}
else
{
header('Location http://domain.tld/index.php');
}
Ich hoffe, dass Du das System durchschaust.
Fang mal probehalber mit einer kleinen Test-Ini an und lade die dann mittels der parse_ini_file()-Funktion und gib die Variable mit
echo "<pre>\n";
print_r($_inidata) aus.
echo "</pre>\n";
Viel Erfolg.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
danke, ich werde es probieren!
MfG,
Michael