použití addContainer a střídání výpisu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ZETCHA
Člen | 59
+
0
-

Netušíte někdo jak nastavit aby se výsledek tohohle:

<?php
	$container = $form->addContainer('pole');
	$container2 = $form->addContainer('pole2');
	$container->addText('t0', 'text0');
	$container->addText('t1', 'text1');
	$container2->addText('a', 'text0');
	$container2->addText('b', 'text1');
?>

nevypisoval takto:

		<label for="t0"></label><input type="text" name="t0" />
		<label for="t1"></label><input type="text" name="t1" />

		<label for="a"></label><input type="text" name="a" />
		<label for="b"></label><input type="text" name="b" />

ale takto na střídačku:

		<label for="t0"></label><input type="text" name="t0" />
		<label for="a"></label><input type="text" name="a" />

		<label for="t1"></label><input type="text" name="t1" />
		<label for="b"></label><input type="text" name="b" />

toho se nemůžu dopátrat.

Předem díky za radu.

Ondřej Mirtes
Člen | 1536
+
0
-

Přidej je v jiném pořadí, ne? :)

ZETCHA
Člen | 59
+
0
-

Má chyba, neřekl jsem že je generuji takto:

<?php
		$skladem = $form->addContainer('skladem');
		$uzakazky = $form->addContainer('uzakazky');
		$x = 0;
		foreach ($data as $polozka) {
			$skladem->addText((string) $x, 'Skladem:')->setValue($polozka->skladem);
			$uzakazky->addText((string) $x, 'U zakázky:')->setValue($polozka->uzakazky);
			$x++;
		}
?>

Takže na přeskáčku definovaný jsou. Nebo ne?

Ve výsledku teda ne e! :-(

Editoval ZETCHA (7. 1. 2010 11:15)

Ondřej Mirtes
Člen | 1536
+
0
-

Tak bych asi vytvořil dva foreache za sebou, který ti to přidaj v tom pořadí, v jakým to chceš vypisovat.

ZETCHA
Člen | 59
+
0
-

Upravil jsem to takto:

<?php
                $skladem = $form->addContainer('skladem');
                $uzakazky = $form->addContainer('uzakazky');
                $x = 0;
                foreach ($data as $polozka) {
                        $skladem->addText((string) $x, 'Skladem:')->setValue($polozka->skladem);
                        $x++;
                }

                $x = 0;
                foreach ($data as $polozka) {
                        $uzakazky->addText((string) $x, 'U zakázky:')->setValue($polozka->uzakazky);
                        $x++;
                }
?>

A výsledek stejný! :-(
To jsem blázen.

Editoval ZETCHA (7. 1. 2010 12:13)

ZETCHA
Člen | 59
+
0
-

Hele v tom foreach problém nebude.
Udělal jsem to ručně:

<?php
	$skladem->addText('jedna', 'Skladem:')->setValue($polozka->skladem);
	$uzakazky->addText('jedna', 'U zakázky:')->setValue($polozka->uzakazky);
	$skladem->addText('dva', 'Skladem:')->setValue($polozka->skladem);
	$uzakazky->addText('dva', 'U zakázky:')->setValue($polozka->uzakazky);
?>

a výsledek je stejný.

Ondřej Mirtes
Člen | 1536
+
0
-

No ale máš je ve dvou různých containerech.

ZETCHA
Člen | 59
+
0
-

Pak asi plně nechápu funkci containeru.

Chtěl jsem aby mi vrátil z jedné skupiny položek pole a z další skupiny položek další pole, a to teď
dělá! Proto to mám ve dvou containerech. Jen ta posloupnost položek při vykreslování je pro tento případ nevhodná.

Pokud je jiný způsob zkus mi poradit (tápu). Formulář vytvářím přes tzv. továrničku, ale asi to dopadne na manuální vykreslení. Nebo ne?

redhead
Člen | 1313
+
0
-

Co takhle:

$skladem->addText('jedna', 'Skladem:')->setValue($polozka->skladem);
$skladem->addText('jedna', 'U zakázky:')->setValue($polozka->uzakazky);
$uzakazky->addText('dva', 'Skladem:')->setValue($polozka->skladem);
$uzakazky->addText('dva', 'U zakázky:')->setValue($polozka->uzakazky);

Nejde o pořadí volání containerů, ale o pořádí V containeru.

ZETCHA
Člen | 59
+
0
-

Zkusil sis to?

Component with name ‚jedna‘ already exists.

To je i v logice postavený na hlavu.

Potřebuji vrátit dvě pole se stejným indexem,
aby to pak pokračovalo při odesláni např. takto:

<?php
	$data = $form->->getValues();
	$x = 0;
	while ( $x <= count($data['skladem'])-1)
	{
	  $this->db->query('INSERT INTO pohyby', array(
							'pole1' => $data['skladem'][$x],
							'pole2' => $data['uzakazky'][$x]
							)
	  $x++;
	}
?>

A to můj způsob práce s containerem splňuje, jen to vykreslení je na levačku.

redhead
Člen | 1313
+
0
-

j, zapomněl jsem změnit jména, ale když je změníš (jen pro test) vykreslí se to tak jak chceš??

Panda
Člen | 569
+
+1
-

Co na to zkusit jít trochu jinak?

<?php
$polozky = $form->addContainer('polozky');

$n = 0;
foreach ($data as $polozka) {
	$item = $polozky->addContainer((string) (++$n));
	$item->addText('skladem', 'Skladem:')->setValue($polozka->skladem);
	$item->addText('uzakazky', 'U zakázky:')->setValue($polozka->uzakazky);
}
?>
<?php
	$data = $form->getValues();
	foreach ($data['polozky'] as $polozka) {
		$this->db->query('INSERT INTO pohyby', array(
			'pole1' => $polozka['skladem'],
			'pole2' => $polozka['uzakazky']
		));
	}
?>
ZETCHA
Člen | 59
+
0
-

Vivat. To je fono. Díky.