Jak ručně vykreslovat form, když neznám dopředu prvky?
- Dejf256
- Člen | 2
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
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)
- Filip Procházka
- Moderator | 4668
Víceméně :)
{form name}
{foreach $_form->controls as $control}
{var $name = $control->lookupPath('Nette\Forms\Form')}
{label $name /} {input $name}
{/foreach}
{/form}
- Vojtěch Dobeš
- Gold Partner | 1316
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
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
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.