mod_form Mehrseitige Formulare

Diskussion zum Formular-Modul für ConPresso 4
radamazone
ConPresso-Checker
Beiträge: 101
Registriert: 01.01.1970 02:00
Hat sich bedankt: 6 Mal

mod_form Mehrseitige Formulare

Beitrag von radamazone »

Hallo,

ich habe folgende Problemstellung: Nach der Eingabe der Anzahl der Personen soll entsprechend dieser Anzahl die Felder Vorname, Name, Geburtsdatum angezeigt werden.

Ist das mit mod_form möglich?
Evtl. auch in einem mehrseitigen Formular?

Grüsse
radamazone
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7381
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Beitrag von MarkusR »

Das ließe sich mit Javascript realisieren.

Dabei werden je nach gewählter Anzahl die entsprechenden Felder angezeigt. Ob man das nun als "mehrseitiges" Formular (mit überlappenden DIVs) oder "großes" Formular erstellt hängt lediglich vom Geschick des Erstellers ab.

Hier eine Demo-Seite:
http://www.malleus.de/FAQ/selectSwapContent.html
oder so
http://felix.fh-n.de/Beispiele/Javascript_Ajax/Tab.php
oder direkt hier im Forum
http://community.conpresso.de/viewtopic.php?t=3712
was man leider niemals findet, wenn dort solch aussagelose Titel gewählt werden...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
radamazone
ConPresso-Checker
Beiträge: 101
Registriert: 01.01.1970 02:00
Hat sich bedankt: 6 Mal

Beitrag von radamazone »

Danke Markus,

ich habe es wie http://www.malleus.de/FAQ/selectSwapContent.html gelöst.

Schöner wäre es jedoch so wie hier gewesen: http://www.malleus.de/FAQ/showInputsBySelect.html. Aber eben dass nacheinander nicht INPUT-Felder eingeblendet werden, sondern DIVs, d.h. für das 1. Kind der 1 Div, für das 2. Kind der 2. DIV dazu usw.

Nur leider habe ich das nicht hinbekommen :cry:

Hier der Ansatz, aber irgendwie klappt das mit der Anzeige der DIVs nicht. Bin halt auch kein JavaScript Spezialist.

Code: Alles auswählen

<html>
<head>
<title></title>
<script type="text/javascript">
function showControls( maxControls )
{
	for ( var i = 0; i < 3; i++ )
	{
		document.getElementById("input"[i]).style.display = ( i < maxControls ) ? "block" : "none";
	}
}
</script>

</head>

<body>

<form name="myForm">

<select name="kind" onchange="showControls(this.value)">
<option value="0">Bitte auswählen</option>
<option value="1">Eins</option>
<option value="2">Zwei</option>
<option value="3">Drei</option>
</select><br><br>
<div id="input1" style="display:none"><br>
<div id="input2" style="display:none"><br>
<div id="input3" style="display:none"><br>

</body>
</html>
Danke für Deine schnelle Hilfe.

Sandra
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7381
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Beitrag von MarkusR »

Probiere es mal so:

Code: Alles auswählen

<html> 
<head> 
<title></title> 
<script type="text/javascript"> 
function showControls( maxControls ) 
{ 
   var num=0;
   var divs=document.getElementsByTagName("DIV");
   for (i=0;i<divs.length;i++) 
   { 
		if (divs[i].className=="personendaten") {
			num++;
			divs[i].style.display = ( num <= maxControls ) ? "block" : "none";
		}   
	} 
} 
</script> 

</head> 

<body> 

<form name="myForm"> 

<select name="kind" onchange="showControls(this.value)"> 
<option value="0">Bitte auswählen</option> 
<option value="1">Eins</option> 
<option value="2">Zwei</option> 
<option value="3">Drei</option> 
</select><br><br> 
<div class="personendaten" style="display:none">DIV1</div> 
<div class="personendaten" style="display:none">DIV2</div>
<div class="personendaten" style="display:none">DIV3</div>

</body> 
</html> 
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
radamazone
ConPresso-Checker
Beiträge: 101
Registriert: 01.01.1970 02:00
Hat sich bedankt: 6 Mal

Beitrag von radamazone »

Danke :D Genial!!
radamazone
ConPresso-Checker
Beiträge: 101
Registriert: 01.01.1970 02:00
Hat sich bedankt: 6 Mal

Beitrag von radamazone »

Hallo Markus,

nun hätte ich noch eine Frage dazu.

Wie muß ich

Code: Alles auswählen

onchange="showControls(this.value)"
im Formulartemplate eintragen? Also wo bei type=select ?

Danke für Deine Hilfe

Sandra
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7381
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Beitrag von MarkusR »

Das ist bisher nicht vorgesehen, kann aber eingebaut werden.

Dazu in includes/parser_r_form.inc.php
nach

Code: Alles auswählen

if (array_key_exists('size', $parameters)) {
    $input_size = ' size="'.$parameters['size'].'"';
}
einen Teil

Code: Alles auswählen

if (array_key_exists('onchange', $parameters)) {
    $onchange = ' onchange="'.$parameters['onchange'].'"';
}
einsetzen.

Dann den Teil

Code: Alles auswählen

if ($parameters['type'] == "select")  {
	$values = explode(",",$parameters['values']);
	$_t = '<select name="'.$field_name.'"'.$input_size.$input_class.$disabled.'>';
	foreach($values AS $_v)
	{
		$selected = ($content[$key]['input']==$_v) ? ' selected="selected"' : '';
		$_t .= '<option value="'.$_v.'"'.$selected.'>'.$_v.'</option>';
	}
	$_t .= '</select>';
}
ergänzen zu

Code: Alles auswählen

if ($parameters['type'] == "select")  {
	$values = explode(",",$parameters['values']);
	$_t = '<select name="'.$field_name.'"'.$input_size.$input_class.$onchange.$disabled.'>';
	foreach($values AS $_v)
	{
		$selected = ($content[$key]['input']==$_v) ? ' selected="selected"' : '';
		$_t .= '<option value="'.$_v.'"'.$selected.'>'.$_v.'</option>';
	}
	$_t .= '</select>';
}
Dann kann man den Parameter onchange=showControls(this.value); benutzen.

Auf diese Art lassen sich auch viele andere MouseEvents einbauen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
radamazone
ConPresso-Checker
Beiträge: 101
Registriert: 01.01.1970 02:00
Hat sich bedankt: 6 Mal

Beitrag von radamazone »

Danke, ich werde es versuchen und dann wieder berichten... ;-)