Jak ručně vykreslovat form, když neznám dopředu prvky?

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

Pochopil jsem, že když potřebuji umístit více prvků formuláře vedle sebe (konkrétně páry input-selectbox), musím vykreslovat ručně. Co když ale neznám prvky dopředu? Dá se z template při ručním vykreslování nějak projít prvky např. foreachem a podle jejich vlastností – typ (label, input, select, submit..), name, required atd. – se k nim zachovat? Pro mě je to teda celkem oříšek a řešení jsem nikde nenašel…

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Dá :).

{form name}
	{foreach $_form->controls as $control}
		{label $control->name /} {input $control->name}
	{/foreach}
{/form}

Ach, já bych ty příspěvky psal donekonečně, jak je Consolas úchvatný font…

Editoval vojtech.dobes (21. 9. 2012 1:12)

Dejf256
Člen | 2
+
0
-

Super, zdá se to být jednodušší, než jsem čekal.. :) Díky!

pekelnik
Člen | 462
+
0
-

Ach, já bych ty příspěvky psal donekonečně, jak je Consolas úchvatný font…

mozna bys mel jet na dovolenou ;)

Casper
Člen | 253
+
0
-

Řešení je nepoužitelné pokud používám form containery. Existuje nějaké snadné řešení i pro ně?

Filip Procházka
Moderator | 4668
+
0
-

Víceméně :)

{form name}
        {foreach $_form->controls as $control}
		{var $name = $control->lookupPath('Nette\Forms\Form')}
                {label $name /} {input $name}
        {/foreach}
{/form}
Casper
Člen | 253
+
0
-

Šikovné, díky!

mlha
Člen | 58
+
0
-

to mi bohužel nefunguje, hlásí to: Filter Nette\Templates\LatteFilter::__invoke: Unknown macro {form …

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Well, asi bude chyba kvůli nějakému specifickému rysu tvojí aplikace… a bez možnosti tyto rysy prozkoumat lze jen těžko specifikovat o chybě cokoliv bližšího než „ano, chyba tam je“. Ukaž, kde se to děje, kde tu šablony chystáš etc.

mlha
Člen | 58
+
0
-

ok, čekal jsem, že se někdo napíše „nemáš Nette 2.0!“ Aplikace je postavená ještě na verzi 1.9, ale to snad není problém. :)

Takže, šablona stránky default.phtml

@{block content}
<div>
  <h3>Nadpis</h3>
  {widget fillerForm}
</div>
@{/block}

fillerForm je komponenta (vytvořená továrničkou), která obsahuje formulář (\Nette\Application\AppForm)
Komponenta používá vlastní šablonu (zkracene)

{snippet}
<div class="{$class}">
  {if $visible}
    {widget $formname}
  {/if}
</div>
{/snippet}

Doposud vše funguje. A teď by potřeboval upravit vnitřní vykreslení {widget $formname}

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

1.9 nebyla, byla 0.9 a pak hned 2.0 :). Nicméně, v 0.9 pokud se nemýlím nebyla formulářová makra. Takže {form} ti tam fungovat nebude… původně byla formulářová makra doplňkem od Honzy Marka, někde by to mělo jít vyhledat.

mlha
Člen | 58
+
0
-

Díky moc, podívám se po tom doplňku. Přechod na 2.0 je momentálně moc velké sousto.