Seite 1 von 1

mehrere Array als <input checkbox> im Template ausgebe

Verfasst: So 31. Dez 2006, 17:37
von hes
Moin,
wer hilft mir auf die Sprünge - was muss ich "suchen" um die Lösung zu finden ;-)

Ich habe im Module-Output 3 unterschiedliche Array mit jeweils x-beliebige Elemente/Werte, die über ein Template als <input type="checkbox" name="x-beliebige-Elemente" value="{VALUE-x-beliebigeElemente}">{x-beliebige Elemente}<br>

bzw. mit radiobutton ausgegeben werden müssen. Wie stelle ich dieses so dynamisch und bequem her ... dass ich am besten nur mit foreach, while oder wie auch immer die drei Arrays im Output durchlaufen kann und im Template ausgegeben bekomme?

Eine Lösung mit festen Variablen alias:
$x-beliebige-Elemente1 = ...
$x-beliebige-Elemente2 = ...
$x-beliebige-Elemente3 = ...

kommt nicht in Frage, da statisch. Die Elemente für das/im Array werden im Module im INPUT eingegeben - und es können x-beliebig viele sein.

Die Lösung mit
<!-- BEGIN:BLOCK -->
<!-- END:BLOCK -->
klappt leider auch nicht - da ich drei Array-Blöcke bräuchte ... aber ein Template wohl nur einen dyn.-Block erlaubt... zumindest bekomme ich damit bei meinem Rumgespiele nur Mist raus.

Verständlich, was ich will/brauche?

Ich würde mich über Hilfe sehr freuen ...

Wünsche allen hier ein guten Rutsch ins neue Jahr...

Verfasst: Mo 1. Jan 2007, 14:29
von hes
falls jemand braucht ... ich hab's so gelöst:

Im INPUT-Modul werden Daten in einem Textarea eingetragen, diese Text-Daten im String werden im OUTPUT-Modul zum Array gewandelt, sodass folgendes vorliegt:

Code: Alles auswählen

	$Lehrgang = array(
		"Test PKW", 
		"Test LKW",
		"Test Motorrad"
		);
Diesen Array übergebe ich dann an die Variable $arraytocheckbox der Funktion ArrayToCheckBox:

Code: Alles auswählen

function ArrayToCheckBox($name='module1', $arraytocheckbox, $multiselect=true) {
   $stringcheckbox = '';
   $value = (isset($_POST[$name])) ? $_POST[$name] : '';
   if ($multiselect) {
      $name = $name.'[]';
      $inputtyp = 'checkbox';
      $aCheckbox = (is_array($value)) ? $value : array();
   } else {
      $inputtyp = 'radio';
      $aCheckbox = (is_string($value)) ? array($value) : array();
   }
   foreach($arraytocheckbox as $key => $wert) {
      $checked = (in_array($wert, $aCheckbox)) ? 'checked="checked"' : '';
      $stringcheckbox .= '<input type="' . $inputtyp . '" name="' . $name . '" value="' . $wert . '" ' . $checked . '>' . $wert . '<br>';
   }
   return $stringcheckbox;
}
Das Ergebnis an den Platzhalter vom initialisierte Template übergeben und den Platzhalter im Template selber ersetzen lassen.

Code: Alles auswählen

	$Lehrgangscheckbox = ArrayToCheckBox('Lehrgangsname',  $Lehrgang, true);
	$tpl->set('s', 'LEHRGANGSCHECKBOX', $Lehrgangscheckbox);
Im Template selber habe ich dann nur noch folgendes stehen:

Code: Alles auswählen

...
<tr><td>
	{LEHRGANGSCHECKBOX}
</td></tr>
...
Bemerkung:
Nach Aufruf der Funktion werden <inputs> mit dem Namen in $name angelegt, dieser Stringname nach dem Submit als Array zurückgegeben wird und wieder an die Funktion zurückgegeben wird (um die Selektionen auswerten zu können).

Verfasst: Di 19. Jun 2007, 09:51
von fa_alex
Hallo,

ich hole diesen Thread wieder vor, da ich im Moment genau das Gleiche Problem habe. Die Lösung des Threadstarters ist mir natürlich geläufig, ich finde sie aber nicht sonderlich elegant.

Gibt es inzwischen (oder schon immer?) eine Lösung, mit der ich in den Templates verschiedene Blöcke definieren kann, auf die ich dann einzeln zugreifen kann?


Vielen Dank für eure Hilfe!


Grüße
Alex

Verfasst: Di 19. Jun 2007, 11:54
von HerrB
Err... sagen wir mal so:

CMS_VAR und CMS_VALUE können dynamisch gestaltet werden:

for ($i = 0; $i < 2; $i++)
{
echo "CMS_VAR[$i]"."<br />";
}
(dabei muss der Wert innerhalb der [] aber bestimmt sein -> "CMS_VAR[".$i+1."]" geht nicht).

Ansonsten habe ich die Frage nicht ganz verstanden...

Gruß
HerrB