0251 / 590 837 15
info@a-coding-project.de
;

Seite speichern Teil 2

Code & Blog Logo

Code & Blog Logo

Die wohl wichtigste Aktion bei unserem CMS(und auch bei allen anderen) ist das speichern und auslesen des Inhaltes. Und um das Speichern kümmern wir uns heute. Hierbei dürfen wir nicht vergessen, auch die alte Datei zu löschen und das bevor der Alias gespeichert wird.

Fangen wir an mit der Klasse page (Datei /system/classes/page.php). Diese bekommt 2 neue Methoden:

  1. deleteContent: Löscht die alte Datei
  2. writeContent: Schreibt den neuen Inhalt in die Datei.


Fangen wir mit der deleteContent an. Ist nicht schwieriges:

function deleteContent($dirpraefix){
    $filename = $dirpraefix."content/articles/".$this->alias.".php";
    if(file_exists($filename)){
      unlink($filename);
    }
  }

Weiter gehts mit der writeContent, die ist so ähnlich wie das readContent:

function writeContent($dirpraefix,$content){
    $filename = $dirpraefix."content/articles/".$this->alias.".php";
    $handle = fopen ($filename, "a");
    $res = fwrite ($handle, $content);
    fclose ($handle);
    return $res;
  }

Die Methoden sind jetzt da, nun fehlt nur noch der Aufruf in der /admin/includes/site-edit.php. Hier muss wie gesagt, der Inhalt gelöscht werden, bevor der alias gesetzt wird. Weil ändert sich dieser ändert sich auch der Dateiname und wie wissen nicht, welche Datei wir löschen wollen. Für sehr kurze Zeit wird dann zwar der Inhalt nicht zu sehen sein, aber das ist wirklich schon Zufall, wenn genau zu dem Zeitpunkt ein User diese Seite aufruft.

Naja egal. Das neue Speichern und auslesen der Datei sieht nun so aus:

<?PHP
  $page = new Page();
  $page->loadProperties(mysql_real_escape_string($_GET['site']));
  if($_POST['save']){
    $page->deleteContent("../");
    $page->title = mysql_real_escape_string($_POST['title']);
    $page->alias = mysql_real_escape_string($_POST['alias']);
    $page->menu = mysql_real_escape_string($_POST['menu']);
    $page->save();
    $page->writeContent("../",mysql_real_escape_string($_POST['content']));
  }
?>

Kommentare

Kay schrieb am 12.08.2009:

Servus, kleiner Fehler im Script: Das: $page-&gt;writeContent("../",$content); sollte wohl eher das $page-&gt;writeContent("../",mysql_real_escape_string($_POST['content'])); sein. Denn wir wollen doch mal hoffen, das register_globals auf OFF steht. ;) Wobei mysql_real_escape_string, eher durch eine entsprechende Secure-Funktion ersetzt werden sollte. Denn eigentlich nutzt man den Befehl im Zusammenhang mit einer Datenbank. Wobei mir gerade die Frage kommt, was die Idee dahinter ist, den Inhalt einer Seite als separate Dateien (in dem Fall sogar php statt xml)abzuspeichern und nicht die Datenbank dafür zu nutzen. Denn wie man hier ja schön sieht, muss erst die Datei gelöscht werden und wird dann wieder neu geschrieben. Einfacher (weil bei alias-Änderung keine komplett neue Datei erforderlich; keine direkten Festplatten-Schreibzugriffe; etc.) und sicher auch performanter wäre das schreiben/auslesen der Inhalte in die DB. Zum anderen wird ja bereits eine Datenbank genutzt. Sollte als nicht viele Schwierigkeiten darstellen das anzupassen. Idee für die Tabelle: cms_content uid = Auto-ID pid = Page-ID bodytext = Inhalt als Longtext Und im Backend bei den Links zum bearbeiten der Seite, einfach die ID der Seite übergeben statt den alias. Natürlich müssten dann auch noch die Methoden der Klassen angepasst werden. Nur so ne Idee. :) Gruss Kay

Stefan Wienströer schrieb am 12.08.2009:

Ups happ vergessen das $_POST dranzuschreiben, werds ändern. Ich hab PHP genommen, damit man auch PHP-Scripte in die Seite einbauen kann. Später werd ich dann auch noch eine Funktion fürs speichern in die Datenbank erstellen.

Kay schrieb am 12.08.2009:

Okay das ist nachvollziehbar, aber auch lösbar, wenn man Content in der DB speichert (z.B. über ein spezielles Code-Plugin). Aber Danke für die Info. Ich werde das dann mal weiterverfolgen. ;) Gruss Kay

Daniel Busch schrieb am 14.08.2009:

Leider ergibt sich bei mir der Fehler das der tiny mce Editor beim klick auf Ändern alles schön speichert aber dann noch Zeilenumbrüche einträgt. Diese werden aber nicht als Zeilen umbrüche (rn) dargestellt sondern als Text ausgegeben. Gruss Daniel

Stefan Wienströer schrieb am 14.08.2009:

Werd ich mir mal ansehen. Gibt dann demnächst einen kleinen Bugfix-Beitrag

Jordan Kniest schrieb am 09.08.2011:

Hallo Stefan. Ich kann mein Menü nicht ändern. :(