Hoi,
das Ganze ist soweit fertig und funktioniert bei mir sehr gut, ist halt alles noch relativ ungetestet und nicht gerade vorbildlich programmiert. Ich denke man könnte das alles schön in eine Erweitung packen. 🙂
Kurz zur Funktionsweise des Scripts:
Es werden alle Titel der Unterseiten zur angegebenen PID ausgelesen und als `Gruppentitel verwendet`.
Für jede `Gruppe` werden dann wieder jeweils die Titel der Unterseiten ausgelesen und als Checkbox im Formular ausgegeben.
Das Formular kann auch direkt per Link index.php?id=xxx&produktpid=56 aufegrufen werden, wobei die übergebene produktpid gleich vorselektiert wird.
Das Script ist derzeit auf www.j-m.de im Einsatz, klickt man im Bereich Produkte in einer der Unterseiten inder Anfragebox auf `anfordern` wird das Anfrageformular aufgerufen.
Zunächst muss ins Setupfeld des `obersten` / Haupttemplate folgender Code:
### Scripts für Seiteninhalte [06/04 - mr <post@mrup.de>] ###
tt_content.script >
tt_content.script = CASE
tt_content.script {
key.field = select_key
anfrageformular = PHP_SCRIPT
anfrageformular.file = fileadmin/templates/anfrageformular.php
formproc = PHP_SCRIPT
formproc.file = fileadmin/templates/formproc.php
}
Dann läd man die 2 PHP Dateien in die angegebenen Verzeichnisse hoch (bei mir fileadmin/templates/)
anfrageformular.php:
<?php
//[06/04 - mr <post@mrup.de>]
if (is_object($this)) {
//Aufrufparameter
$produktpid = $GLOBALS["HTTP_GET_VARS"]["produktpid"];
//Einstellungen des Scripts
$parameter = $this->processParams($this->data["bodytext"]);
$pid = !isset($parameter['pid']) ? 0 : $parameter['pid']; //PID der 'Oberkategorie'
$ziel = !isset($parameter['ziel']) ? 'index.php?danke' : $parameter['ziel']; //Link zum Formproc/Danke Seite
$lang_uid = !isset($parameter['sprache_uid']) ? 0 : $parameter['sprache_uid']; //Sprach ID
//Interne Vars
$options = array();
$ftl = array();
$sql_lang = "";
$sql_join = "";
$sql_titletable = 'pages';
//Wenn eine andere Sprache ausgewählt wurde - pages-Tabelle mit overlay-Tabelle verbinden und jeweilige Übersetzung selektieren
if(!empty($lang_uid)){
$sql_join = ", `pages_language_overlay`";
$sql_titletable = 'pages_language_overlay';
$sql_lang = "AND `pages`.`uid`=`pages_language_overlay`.`pid` AND `pages_language_overlay`.`sys_language_uid`=" . $lang_uid;
}
//Übersetzung
switch($lang_uid){
case 0:
$ftl['interesse'] = 'Ich Interessiere mich für:';
$ftl['sonstiges'] = 'Sonstiges:';
$ftl['name'] = 'Name:';
$ftl['strasse'] = 'Straße / Nr.:';
$ftl['ort'] = 'PLZ / Ort:';
$ftl['email'] = 'eMail:';
$ftl['tel'] = 'Tel.:';
$ftl['fax'] = 'Fax:';
$ftl['kommentar'] = 'Kommentar:';
$ftl['senden'] = '<input type="image" src="fileadmin/templates/images/senden_de.gif" width="45" height="10" border="0" alt="senden">';
$ftl['req'] = 'Bitte füllen Sie alle Fett markierten Felder aus.';
break;
case 3:
$ftl['interesse'] = 'I'm interested in:';
$ftl['sonstiges'] = 'Other:';
$ftl['name'] = 'Name:';
$ftl['strasse'] = 'Street / No:';
$ftl['ort'] = 'ZIP / Town:';
$ftl['email'] = 'eMail:';
$ftl['tel'] = 'Phone:';
$ftl['fax'] = 'Fax:';
$ftl['kommentar'] = 'Comment:';
$ftl['senden'] = '<input type="image" src="fileadmin/templates/images/senden_en.gif" width="45" height="10" border="0" alt="senden">';
$ftl['req'] = 'Please fill in all required fields.';
break;
}
//Fomular Kopf
$content .= ' <form action="'.$ziel.'" enctype="multipart/form-data" method="POST" name="anfrage" onSubmit="if(document.forms['anfrage'].f_name.value != '' && document.forms['anfrage'].f_email.value != '') {return true;} else {alert(''.$ftl['req'].''); return false;}"><p>'.$ftl['interesse'].'</p><br>'."
";
//Titel auslesen
$query = mysql_query("SELECT `pages`.`uid`, `$sql_titletable`.`title` FROM `pages` $sql_join WHERE `pages`.`pid`=$pid AND `pages`.`hidden`<>1 AND `pages`.`deleted`<>1 $sql_lang ORDER by `pages`.`sorting`");
if($query && mysql_num_rows($query)){
while($data = mysql_fetch_array($query)){
$uid = $data['uid'];
$title = $data['title'];
$options[$uid]['title'] = $title;
//Untertitel
$options_query = mysql_query("SELECT `pages`.`uid`, `$sql_titletable`.`title` FROM `pages` $sql_join WHERE `pages`.`pid`=$uid AND `pages`.`hidden`<>1 AND `pages`.`deleted`<>1 $sql_lang ORDER by `pages`.`sorting`");
if($options_query && mysql_num_rows($options_query)){
while($options_data = mysql_fetch_array($options_query)){
$options_uid = $options_data['uid'];
$options[$uid]['options'][$options_uid] = $options_data['title'];
}
}else{
echo mysql_error();
}
}
}else{
echo mysql_error();
}
//Wurden überhaupt Punkte gefunden?
if(count($options) > 0){
//Array für 2 Spalten aufteilen
$options = array_chunk($options, round(count($options)/2), TRUE);
//Content mit den Optionsfeldern füllen
$content .= ' <table width="100%" border="0" cellspacing="0" cellpadding="0">'."
";
$content .= ' <tr valign="top">'."
";
$content .= ' <td width="50%"><p>'."
";
//Spalte Links
if(is_array($options[0]) && count($options[0]) > 0)
foreach($options[0] as $key => $val){
$content .= ' <span class="headlinebox">'.$val['title'].'</span><br>'."
";
if(is_array($val['options']) && count($val['options']) > 0)
foreach($val['options'] as $options_key => $options_val){
$checked = $options_key == $produktpid ? ' checked' : '';
$content .= ' <input type="checkbox" name="f_interesse[]" value="'.htmlentities($options_val).'"'.$checked.'> '.$options_val.'<br>'."
";
}
$content .= ' <br>'."
";
}
$content .= ' </p>'."
";
$content .= ' </td>'."
";
$content .= ' <td width="50%"><p>'."
";
//Spalte Rechts
if(is_array($options[1]) && count($options[1]) > 0)
foreach($options[1] as $key => $val){
$content .= ' <span class="headlinebox">'.$val['title'].'</span><br>'."
";
if(is_array($val['options']) && count($val['options']) > 0)
foreach($val['options'] as $options_key => $options_val){
$checked = $options_key == $produktpid ? ' checked' : '';
$content .= ' <input type="checkbox" name="f_interesse[]" value="'.$options_val.'"'.$checked.'> '.$options_val.'<br>'."
";
}
$content .= ' <br>'."
";
}
//Eingabefeld Sonstiges
$content .= ' </p>'."
";
$content .= ' <span class="headlinebox">'.$ftl['sonstiges'].'</span><br>'."
";
$content .= ' <input type="text" name="f_sonstiges" size="20" value="">'."
";
$content .= ' </td>'."
";
$content .= ' </tr>'."
";
$content .= ' </table>'."
";
$content .= ' <br>'."
";
}
//Formularcode aus T3
$content .= ' <table border=0 cellspacing=0 cellpadding=2>'."
";
$content .= ' <tr>'."
";
$content .= ' <td align=right><span class=mailformrequired>'.$ftl['name'].'</span></td>'."
";
$content .= ' <td><img src="clear.gif" width=5></td>'."
";
$content .= ' <td><input type="text" name="f_name" size="40" value=""></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td align=right><span class=mailform>'.$ftl['strasse'].'</span></td>'."
";
$content .= ' <td><img src="clear.gif" width=5></td>'."
";
$content .= ' <td><input type="text" name="f_strasse" size="40" value=""></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td align=right><span class=mailform>'.$ftl['ort'].'</span></td>'."
";
$content .= ' <td><img src="clear.gif" width=5></td>'."
";
$content .= ' <td><input type="text" name="f_ort" size="40" value=""></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td colspan=3><span class=mailformcomment> </span></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td align=right><span class=mailform>'.$ftl['tel'].'</span></td>'."
";
$content .= ' <td><img src="clear.gif" width=5></td>'."
";
$content .= ' <td><input type="text" name="f_tel" size="40" value=""></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td align=right><span class=mailform>'.$ftl['fax'].'</span></td>'."
";
$content .= ' <td><img src="clear.gif" width=5></td>'."
";
$content .= ' <td><input type="text" name="f_fax" size="40" value=""></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td align=right><span class=mailformrequired>'.$ftl['email'].'</span></td>'."
";
$content .= ' <td><img src="clear.gif" width=5></td>'."
";
$content .= ' <td><input type="text" name="f_email" size="40" value=""></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td colspan=3><span class=mailformcomment> </span></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td align=right valign="top"><span class=mailform>'.$ftl['kommentar'].'</span></td>'."
";
$content .= ' <td><img src="clear.gif" width=5></td><td><textarea name="f_kommentar" cols="40" rows="6" wrap="VIRTUAL"></textarea></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td colspan=3><span class=mailformcomment> </span></td>'."
";
$content .= ' </tr>'."
";
$content .= ' <tr>'."
";
$content .= ' <td colspan=3><span class=mailformcomment><p align="right">'.$ftl['senden'].'</p></span></td>'."
";
$content .= ' </tr>'."
";
$content .= ' </table>'."
";
$content .= ' </form><br>'."
";
} else {
die ("This script must be included by TypoScript");
}
und formproc.php
<?php
//[06/04 - mr <post@mrup.de>]
if (is_object($this)) {
//Übergebene Parameter durch das Script Inhaltselement
$parameter = $this->processParams($this->data["bodytext"]);
$empfaenger = $parameter['empfaenger'];
$betreff = $parameter['betreff'];
$tmpl_email = $parameter['tmpl_email'];
$tmpl_danke = $parameter['tmpl_danke'];
$formcontent = array();
//Verschiedene Tests
if(empty($empfaenger)){
echo "Empfänger nicht angegeben.";
exit;
}
if(empty($betreff)){
echo "Betreff nicht angegeben.";
exit;
}
//Templates öffnen
if(is_file($tmpl_email)){
$file_email = implode('', file($tmpl_email));
}else{
echo "eMail Template nicht gefunden.";
exit;
}
if(is_file($tmpl_danke)){
$file_danke = implode('', file($tmpl_danke));
}else{
echo "Danke Template nicht gefunden.";
exit;
}
//Forminhalte auslesen
foreach($GLOBALS['HTTP_POST_VARS'] as $key => $val){
if(substr($key, 0, 2) == 'f_'){
if(is_array($val)){
$val = implode(', ', $val);
}
$formcontent[$key] = $val;
//Inhalte einfügen
$file_email = str_replace("{".$key."}", $val, $file_email);
$file_danke = str_replace("{".$key."}", $val, $file_danke);
}
}
//Restliche Platzhalter entfernen
$file_email = preg_replace('/{[^}]+}/i','',$file_email);
$file_danke = preg_replace('/{[^}]+}/i','',$file_danke);
//eMail versenden
mail($empfaenger, $betreff, $file_email, "From: ". (!empty($formcontent['f_email']) ? $formcontent['f_email'] : 'formprocessor@bluebox-productions.com') ."
");
//Danke Seite ausgeben
$content .= $file_danke;
} else {
die ("This script must be included by TypoScript");
}
Nun erstellt man eine beliebige Seite, nennen wir sie mal "Kontakt", erstellen ein Inhaltselement des Typs `Script`, vergeben einen Titel, und schreiben `anfrageformular` in das Feld `CODE`.
Als Parameter können wir nun folgendes eingeben:
pid = 3
ziel = index.php?danke
sprache_uid = 0
PID 3 ist bei mir die Seite `Produkte`, deren Unterseiten Titel dann ausgelesen und als Gruppen für deren Unterseiten die dann als Checkboxen aufgelistet werden.
Als Ziel kann man natürlich auch index.php?id=xxx für die `Danke` Seite definieren.
Diese Seite definiert man am Besten als Unterseite der Anfrage Seite und wählt als Seitentyp `Nicht im Menü`. Auch diese muss nun ein Scriptelement enthalten mit dem Wert `formproc` im CODE Feld.
Folgendes noch ins Parameterfeld:
empfaenger = info@example.com
betreff = Anfrage aus www.example.com
tmpl_email = fileadmin/templates/formulare/anfrage_email.txt
tmpl_danke = fileadmin/templates/formulare/anfrage_danke_de.html
Und nun noch folgende 2 Templates einfach als Datei anlegen und in die entsprechenden Verzeichnisse (bei mir fileadmin/templates/formulare/ hochladen:
anfrage_email.txt
Folgende Nachricht wurde Ihnen aus Ihrer Website www.example.com übermittelt:
Ich interessiere mich für
{f_interesse}
{f_sonstiges}
Name.......................: {f_name}
Strasse....................: {f_strasse}
PLZ / Ort..................: {f_ort}
eMail Adresse..............: {f_email}
Telefon....................: {f_tel}
Fax........................: {f_fax}
Kommentar..................: {f_kommentar}
und anfrage_danke_de.html
<br><br>
<p>Ich Interessiere mich für<br>
{f_interesse}
{f_sonstiges}
</p>
<br><br>
<table border=0 cellspacing=0 cellpadding=2>
<tr>
<td align=right><span class=mailformrequired>Vor-/Nachname:</span></td>
<td><img src="clear.gif" width=5></td>
<td><p>{f_name}</p></td>
</tr>
<tr>
<td align=right><span class=mailform>Straße:</span></td>
<td><img src="clear.gif" width=5></td>
<td><p>{f_strasse}</p></td>
</tr>
<tr>
<td align=right><span class=mailform>PLZ / Ort:</span></td>
<td><img src="clear.gif" width=5></td>
<td><p>{f_ort}</p></td>
</tr>
<tr>
<td colspan=3><span class=mailformcomment> </span></td>
</tr>
<tr>
<td align=right><span class=mailform>Tel.:</span></td>
<td><img src="clear.gif" width=5></td>
<td><p>{f_tel}</p></td>
</tr>
<tr>
<td align=right><span class=mailform>Fax:</span></td>
<td><img src="clear.gif" width=5></td>
<td><p>{f_fax}</p></td>
</tr>
<tr>
<td align=right><span class=mailformrequired>eMail:</span></td>
<td><img src="clear.gif" width=5></td>
<td><p>{f_email}</p></td>
</tr>
<tr>
<td colspan=3><span class=mailformcomment> </span></td>
</tr>
<tr>
<td align=right valign="top"><span class=mailform>Kommentar:</span></td>
<td><img src="clear.gif" width=5></td>
<td><p>{f_kommentar}</p></td>
</tr>
</table>
Das Script ist auf zwei Sprachen ausgelegt, kann aber einfach erweitert werden.
Ich hoffe geholfen zu haben 😃