Ako vykresliť form->container cez foreach

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

Zdravím,
prosím vás ako vykreslím $from->container v šablone?
Myslím čosi ako

{foreach $form->container as $item}
{label ??? /}{input ???}
{/foreach}

Ď.

Editoval Čamo (18. 2. 2015 23:05)

duke
Člen | 650
+
0
-

Pro zanoření do kontejneru formuláře použij makro formContainer. Např.:

{formContainer address}
...
{/formContainer}

To makro nastaví do proměnné $_form zadaný kontejner. Takže iterovat pak můžeš nad $_form->getComponents($deep, $type) nebo případně nad $_form->getControls() což je totéž jako $_form->getComponents(TRUE, 'Nette\Forms\IControl').

Čamo
Člen | 798
+
0
-

duke:
Chápem to správne že:

{formContainer questions}
	{foreach $_form->getComponents() as $i}
		{label $i /}<br>{input $i}
	{/foreach}
{/formContainer}

Takto mi to funguje.

duke
Člen | 650
+
+1
-

Ano. Jen je možné, že některé inputy (checkboxy?) budeš chtít renderovat trochu jinak než ostatní inputy.

Jinak getComponents() může vracet také vnořené kontejnery. Takže spíše použij:

{foreach $_form->getComponents(FALSE, 'Nette\Forms\IControl') as $i}

To vrátí jen inputy, které jsou přímo ve tvém kontejneru.
Ale pokud víš, že tam žádné další kontejnery nejsou, řešit to nemusíš.

Čamo
Člen | 798
+
0
-

Načo je ten druhý parameter v getComponents(FALSE, filterType)?

A díky!

duke
Člen | 650
+
+1
-

Čamo napsal(a):

Načo je ten druhý parameter v getComponents(FALSE, filterType)?

A díky!

Překvapivě na filtrování podle typu. Tj. vrátí pouze komponenty daného typu.
Např. následujícím způsobem je možné získat všechny inputy typu hidden, jež jsou v první úrovni zanoření:

$hiddenInputs = $_form->getComponents(FALSE, 'Nette\Forms\Controls\HiddenField');
Čamo
Člen | 798
+
0
-

Ešte raz díky.

idiox
Člen | 14
+
0
-

Ahoj,

PHP User Deprecated: Variable $_form is deprecated.

Jaká je, prosím, správná proměnná/metoda v nette 2.4?

Díky :)

edit

Tak možná takhle, jestli to není nějaká prasárna? :)

<?php

{formContainer questions}
	{foreach  $formContainer->getComponents() as $i}
		{label $i /}<br>{input $i}
	{/foreach}
{/formContainer}

?>

Editoval idiox (4. 10. 2016 22:29)

GEpic
Člen | 566
+
0
-

Tak možná takhle, jestli to není nějaká prasárna? :)

<?php

{formContainer questions}
	{foreach  $formContainer->getComponents() as $i}
		{label $i /}<br>{input $i}
	{/foreach}
{/formContainer}

?>

Není :)