So erstellen Sie Seiten auf Grundlage eines Formulares

Dieser Artikel beschreibt, wie Sie Seiten anlegen, die Ihren Inhalt aus Formulareingaben beziehen.

Sie wollen den Besuchern der Webseite die Möglichkeit bieten, eine eigene Profilseite, ein Kochrezept oder ähnliches anzulegen?

Der Formulargenerator bietet Ihnen die optimale Grundlage hierfür. Als Basis verwenden Sie ein Formular aus dem Beispielprojekt. Dies kann z.B. in der Ausgabe wie folgt aussehen:

Formular: Profilseite erstellen
Formular: Profilseite erstellen

Über die erweiterten Formulareinstellungen definieren Sie in der Box "Nach dem Absenden auszuführendes Script", dass die Formulardaten zusätzlich zur E-Mail die Inhalte einer neuen Datei befüllen. Dies ist im ersten Quelltext-Beispiel angeführt.

Beispiel: Auszug aus den erweiterten Formulareinstellungen, Box: "Nach dem Absenden auszuführendes Script"

...
//Hier können Sie weitere Funktionen einfügen

// Objekt aus den Formulardaten erstellen
//Pfad der Vorlage
$pathObjectTemplate = '/de/personen/weblication/templates/documents/vorlage.php';

//Verzeichnis der erstellten Objekten
$dirNewObjects = '/de/personen/datas/';

//Vorlage einlesen
$templateStr = wReadWrite::readFile($pathObjectTemplate);

//Platzhalter mit Formulardaten füllen
$placeholders = $this->getFormData();

//print "<pre>";var_dump($placeholders);print"</pre>";
//Alle Platzhalter in der Vorlage ersetzen (Syntax: [!--PLATZHALTERNAME--])

foreach($placeholders as $key => $value){
$value = !is_array($value) ? $value : implode(', ',$value);
//$value = !is_array($value) ? $value : $key;
$templateStr = str_replace('[!--'.$key.'--]', htmlspecialchars($value), $templateStr);
}

//print $templateStr;
//Fertiges Objekt (Template mit ersetzten Platzhaltern) unter Zufallsnamen im Zielverzeichnis speichern

wReadWrite::writeFile($dirNewObjects.'/'.md5(time().rand(100000, 999999)).'.php', $templateStr);

//Verzeichnisindex löschen
wRepository::clearIndexDir($dirNewObjects);
...

Legen Sie, wie im Beispiel ersichtlich, eine Vorlage fest, die für eine neue Seite herangezogen werden soll. Diese Vorlage (z.B. vorlage.php) versehen Sie mit den entsprechenden Platzhaltern, die durch die Werte aus den Formularfeldern ersetzt werden. Die Platzhalter orientieren sich an der Benennung des Formularfeldes (name).

Beispiel: Auszug aus der Dateivorlage (z.B. vorlage.php)

<?php $version="1.0"; $encoding="UTF-8"; ?>
<?php include_once($_SERVER['DOCUMENT_ROOT'].'/[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/pre.php'); ?>
<?php exit; ?>
<wd:document xmlns:wsl="http://weblication.de/5.0/wsl" xmlns:wd="http://weblication.de/5.0/wd" version="1.0" type="page.standard">
  <wd:extension type="weblication" version="5.0" uid="a416e6e01f33c5aaa8f949f980b08dd7">  
    <wd:meta>
      <wd:title>[!--firstname--] [!--lastname--]</wd:title>
      <wd:description/>
      ...
    </wd:meta>
     
    <wd:status>
      <wd:online from="" status="off" to=""/>
      <wd:type value=""/>
    </wd:status>
    
    <wd:object name="Person" type="person">
      <wd:data id="title" type="char.text">[!--title--]</wd:data>
      <wd:data id="firstname" type="char.default">[!--firstname--]</wd:data>
      <wd:data id="lastname" type="char.default">[!--lastname--]</wd:data>
      <wd:data id="street" type="char.default">[!--street--]</wd:data>
      <wd:data id="zip" type="char.default">[!--zip--]</wd:data>
      <wd:data id="town" type="char.default">[!--town--]</wd:data>
      <wd:data id="email" type="char.default">[!--email--]</wd:data>
    </wd:object>
...

Wichtige Hinweise

  • Das Beispiel schreibt die Formulareingaben über "htmlspecialchars()" um, damit keine speziellen HTML-Zeichen geschrieben werden. Sorgen Sie selber für entsprechende Prüfung der Felder, um nicht gewünschte bzw. schadhafte Inhalte zu filtern!
  • Wenn Sie die Vorlage auf den Status "off" (offline) setzen, muss die neu erstellte Seite noch online geschaltet werden. Auf diese Weise stellen Sie aber sicher, dass nicht gewünschte Einträge nicht sofort erreichbar sind!