Neue Seite anlegen Teil 2
Heute wird in unserem CMS die Seite wirklich angelegt. Dafür brauchen wir eine neue Methode in der Datei /system/classes/page.php und den Aufruf in der site-new.php.
Fangen wir an mit der page.php die neue Methode heißt create. Sie ist ähnlich der Methode, mit welcher wir ein neues Menü angelegt haben:
function create($alias){ global $dbpraefix; $res = mysql_query("INSERT INTO ".$dbpraefix."pages (alias) VALUES ('".$alias."')"); return mysql_insert_id(); }
Nun kommt der Aufruf in der /admin/includes/site-new.php. Die haben wir ja schon soweit designed. Hier ist der neue Code:
<h1>Seite erstellen</h1> <?PHP if(!$_POST['alias']){ ?> <form action="/admin/index.php?page=site-new" method="post"> Alias: <input name="alias" /><br /> <input type="submit" value="Erstellen" /> </form> <?PHP } else{ $id = Page::create(mysql_real_escape_string($_POST['alias'])); if($id){ ?> <p>Die Seite wurde erfolgreich erstellt.</p> <form action="/admin/index.php" method="GET"> <input type="hidden" name="page" value="site-edit" /> <input type="hidden" name="site" value="<?PHP echo $_POST['alias']; ?>" /> <input type="submit" value="Seite Bearbeiten" /> </form> <?PHP } else{ ?> <p>Die Seite konnte leider nicht erstellt werden.</p> <?PHP } } ?>
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Kommentare
Daniel Busch schrieb am 26.08.2009:
Bin ich der einzige der sich den Text des Blogs durchliest und nicht nur Strg C, Strg V drückt. Zur Sache :-) . Ich habe eine RS-Fehler gefunden. admin/includes/site-mew.php sollte wohl admin/includes/site-new.php heissen. MfG Daniel
Stefan Wienströer schrieb am 26.08.2009:
Das m und das n liegen zu nah zusammen^^ Habs geändert, war ja zum Glück nicht im Code
Daniel Busch schrieb am 28.08.2009:
In der Mail meinte ich das der Eintrag in der Tabelle cms_menu automatisch beim erstellen einer Neuen Seite erzeugt wird. MfG Daniel
Stefan Wienströer schrieb am 28.08.2009:
Soll er erstellt werden, oder wird er bereits erstellt? Weil wenn er erstellt werden soll, müssen wir ja noch auswählen in welchen Menü / meinst du, dass er in dem Menü, was auf der Seite als lokales Menü angezeigt wird eingefügt wird? Wenn ja, würd ich das glaub ich über ne Checkbox regeln
Daniel Busch schrieb am 29.08.2009:
Ja im Hauptmenü. Wobei ich mir überlegt habe es getrennt davon zu belassen. So ist es einfacher mal einen Navigationspunkt zu ändern (anderer Name usw ). Nicht das die Datenbank dann durcheinander kommt.
m1staX schrieb am 27.09.2011:
Die neue Seite wird zwar in Datenbank angelegt, allerdings wird die Datei nicht erstellt. Wenn man auf Seite bearbeiten klickt, hat das zur Folge, dass im Editor fopen/fread/fclose/ -Fehler angezeugt werden. Ich habe deshalb in die Funktion 'readContent' folgendes eingebaut: ... if (!file_exists($filename) { }
m1staX schrieb am 27.09.2011:
... if (!file_exists($filename) { return ""; } $handle =...
Toni schrieb am 03.11.2011:
Hey, ist das normal, dass bei mir keine Datei angelegt wird, wenn ich eine neue Seite anlege? Über eine Antwort wäre ich dankbar. :) Gruß
Stefan Wienströer schrieb am 03.11.2011:
Welche Rechte liegen auf dem content/articles -Ordner?
Elvis67 schrieb am 26.12.2011:
Ich habe die einzelnen Schritte bis hierher mitgemacht uund konnte alles weitestgehend nachvollziehen. Kompliment daher zu diesem Tutorial, es bringt einem Anfänger wie mir die Zusammenhänge eines CMS häppchenweise sehr gut näher. Soweit ich das CMS bis hierher verstehe, KANN jetzt noch gar keine Datei geschrieben worden sein, da die Funktion writeContent der Page Klasse ja noch nicht aufgerufen wurde. Lediglich der Datenbankeintrag für die neue Seite wird erzeugt. Da die meisten ja sicher die neue Seite sofort mit Inhalten füllen würden, macht es Sinn, bei der Funktion readContent die Existenz der Datei vor der Ausgabe zu prüfen. Ich hab das mal so gelöst: function readContent($dirpraefix){ $filename = $dirpraefix."content/articles/".$this->alias.".php"; if(file_exists($filename)){ $handle = fopen ($filename, "rb"); $contents = fread ($handle, filesize ($filename)); fclose ($handle); return $contents; } } Sauberer wäre es in meinen Augen allerdings, zunächst eine neue leere Datei zu schreiben. Die Berechtigungen des Ordners content/articles müssen allerdings auf 777 stehen, so oder so. Vielleicht wäre daher vor dem Schreiben der Datei noch ein chmod check nötig. Ich werde in jedem Falle diese Serie mit Begeisterung bis zum Ende mitmachen und mir nicht einfach contentlion herunterladen ;-) Schon jetzt sind mir viele gute Ideen gekommen, wie ich dieses Gerüst nach meinen Vorstellungen umbauen kann. Vielen Dank für die viele Arbeit bisher, Stefan.
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project