Vykresleni FormContainer

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

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?

  1. nadefinovat hostitelsky form rucne a podminkovy form vykreslit pomoci <?= $form->render('body') ?> coz by melo vykrelsit nevykreslene prvky, ale je to trosku divne reseni.
  2. 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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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).

phx
Člen | 651
+
0
-

JJ to asi vykresli, ale neudelam, ze se $form['remember'] zrobrazi po zasrtnuti checkboxu v legent uvnitr fieldset.

TOTO:

<legend><?= $form['addRemember']->control ?><?= $form['addRemember']->label ?></legend>

Nebo ano?