Vykresleni FormContainer
- phx
- Člen | 651
Zdravim…
Resim celkem zajimavy problem. A uz nevim jak dal.
Pozadavek je aby sla vytvorit pripominka (zaznam v DB) asi pri 3 ruznych
odeslani ruznych formularu. Proto jsem vytvoril komponentu, ktera do predaneho
formulare vytvori svuj kontejner a do nej nejake polozky. Pote zavolanim jedne
metody v obsluse onSubmit si vse nactu a ulozim do DB.
Idea je aby formular na pripominky byl jen jeden a byl definovan na jednom miste.
Problem: Pri vykreslovani chci tyto formulare oddelit (podminka je na
checkbox) a bohuzel se mi nedari (nejde) vykreslit FormContainer ve kterem je
cast pro pripominky. Nechce se mi v sablone vyjmenovavat prvky podminek. To
bych porusil ideu. Dalsi problem je ze hostitelsky formualr vykreslim pres
<?= $form ?>
a toto mi vykresli i pripominkovou cast coz
nechci. Jde udelat nejak vyjimka?
Reseni: a) vykreslit nejak FormContainer. JAK?
- nadefinovat hostitelsky form rucne a podminkovy form vykreslit pomoci
<?= $form->render('body') ?>
coz by melo vykrelsit nevykreslene prvky, ale je to trosku divne reseni. - komponenta bude mit svoji sablonu ktera zajisti vykresleni. Do budoucna vzhledem k upravam desingu idealni reseni, ale JAK NA TO?
DIKY za help
- David Grudl
- Nette Core | 8218
Co použít skupiny? Na začátku definice formuláře se vytvoří skupina a po pridání kontejneru se vytvoří druhá skupina, takže všechny prvky se přidají do ní.
- phx
- Člen | 651
Koukam do dokumentace a neprijde mi, ze FormGroup by se dokazala vykreslit?
Jde mi o to, ze chci mit jeden formular pres pul stranky a casti formulare (dve) ruzne roztrousene po strance. Uplne presne chci aby pripominkovy formular byl uzavren ve fieldset a v label byl checkbox, ktery obsah daneho fieldsetu zobrazi/skyje.
Velice bych uvital moznost v sablonach udelat neco takovehoto:
...
<?= $form->render('begin') ?>
<?= $form->render('errors') ?>
<fieldset>
<legend>Hostitelsky formular</fieldset>
<?= $form['hostitelskyForm']->render('body') ?>
</fieldset>
...
NECO
...
<fieldset>
<legend><?= $form['check']->control ?><?= $form['check']->label ?></fieldset>
<div id="zobraz-skryj">
<?= $form['pripominkovyForm']->render('body') ?>
</div>
</fieldset>
<?= $form->render('end') ?>
Mozna by nebylo spatne upravit formulare tak aby se FormContainer dokazal vykreslit. Co myslite?
- phx
- Člen | 651
Tak vyreseno takto:
Formular ma 3 kontejnery:
- client = formular na pridani/upraveni klienta
- buttons = tlacitka save a save and new
- remember = subformular z Componenty pri pridani pripominky
Pokud to jde nejak jednoduseji poradte;) Osobnme bych uvital moznost vykresleni samotneho FormContainer. Ale ani to neresi muj pozadavek na vzhled (checkbox v legend u fieldsetu)
<?= $form->render('begin') ?>
<?= $form->render('errors') ?>
<div class="formBlock" style="width: 400px; float:left;">
<fieldset>
<legend>{$caption}</legend>
<table>
<?php
foreach($form['client']->components as $control) {
echo $form->renderer->renderPair($control);
}
echo $form->renderer->renderPairMulti((array)$form['buttons']->components);
?>
</table>
</fieldset>
</div>
<div class="formBlock" style="width: 530px; float:left;">
<fieldset>
<legend><?= $form['addRemember']->control ?><?= $form['addRemember']->label ?></legend>
<div id="addRememberBlok">
<table>
<?php
foreach($form['remember']->components as $control) {
echo $form->renderer->renderPair($control);
}
echo $form->renderer->renderPairMulti((array)$form['buttons']->components);
?>
</table>
</div>
</fieldset>
</div>
<?= $form->render('end') ?>
- David Grudl
- Nette Core | 8218
Dalo by se to ulehčit tím, že by renderControls() akceptovala
FormContainer, to rád udělám. Ale stále mám pocit, že pokud bys prvky
$form['client']
dal do jedné grupy a prvky
$form['remember']
do druhé, tak se to vykreslí stejně
(renderControls grupu jako parametr bere).