Úprava rendereru formuláře

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

Potřebuju upravit výchozí renderer formuláře aby mi metoda addGroup vykreslila popisek do klasické formy

<tr>
<th>Popisek</th>
<td></td>
</tr>

Kód mám takhle. Problém je v tom že se mi prvky za addGroup vykreslí nahoře na začátku formuláře (nepokračuje to plynule za prvky napsanými před add group…)

<?php
public function buildForm()
	{
		$form = $this->form;
		$form->addProtection("Vypršel časový limit žádosti, odešlete prosím formulář znovu!");

		$form->addText("name", "Název akce")
				->setRequired("Musíte vyplnit název akce");
		$form->addDatePicker("term", "Termín akce")
				->setRequired("Musíte zvolit termín akce");
		$form->addText("event_time", "Čas akce")
				->addRule(Form::PATTERN, "Čas musí být ve formátu hh:mm", "^(0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$");
		$form->addText("place", "Místo");
		$form->addTextArea("perex", "Perex");
		$form->addTextArea("description", "Popis")
				->getControlPrototype()->class("redactor");

		$form->addGroup("Přiřadit na stránky");
		$children = $this->getAvaiblePlaces();
		if (!empty($children)) {

			foreach ($children as $place) {
				$form->addCheckbox("cal_" . $place["id"],$place["name"])
						->setAttribute("style","width: 15px; height: 15px; margin-right: 5px; margin-top: 5px;");
			}
		}
		$form->setCurrentGroup(NULL);
		$form->addCheckbox("visible", "Zobrazovat")
				->setAttribute("style", "width: 15px;height: 15px;margin-right: 5px;margin-top: 10px;");
		$form->addSubmit("odeslat", "Přidat akci");
		$form->onSuccess[] = callback($this, "formProcess");

		$renderer = $form->getRenderer();
		$renderer->wrappers["group"]["container"] = "tr";
		$renderer->wrappers["group"]["label"] = "td";

		return $form;
	}
?>
ViPEr*CZ*
Člen | 817
+
0
-

Udělat si vlastní šablonu nějak takhle:

{form signForm}
<table>
    <th>Přeji si emailem odebírat tyto novinky:</th>
    <td>
        {formContainer emailNews}
        <ul>
            <li>{input sport} {label sport /}</li>
            <li>{input science} {label science /}</li>
        </ul>
        {/formContainer}
    </td>
    ...
</table>
{/form}
Marsme
Člen | 75
+
0
-

Jak ale uvnitř toho containeru vypsat dynamický počet prvků. Ručně bych si tam napsal jedno tr s popiskem to je ok ale jak tam vypsat všechny ty checkboxy které by byly v tom containeru?

ViPEr*CZ*
Člen | 817
+
0
-

Příliš to teď nechápu. Ale koukám teď, že tam je toto:

$form->addGroup("Přiřadit na stránky");

a pak se vypisují checkboxy? Nemá tam být:

$sub = $form->addGroup("Přiřadit na stránky");

a pak

$sub->addCheckbox("cal_" . $place["id"],$place["name"])

? viz: https://doc.nette.org/cs/forms#…

Editoval ViPEr*CZ* (14. 11. 2012 18:29)

Marsme
Člen | 75
+
0
-

ViPErCZ napsal(a):

Příliš to teď nechápu. Ale koukám teď, že tam je toto:

$form->addGroup("Přiřadit na stránky");

a pak se vypisují checkboxy? Nemá tam být:

$sub = $form->addGroup("Přiřadit na stránky");

a pak

$sub->addCheckbox("cal_" . $place["id"],$place["name"])

?

Už jsem to vyřešil jinak.

Ve třídě formuláře jsem ty prvky které chci vložím do containeru a pak v šabloně

<?php

{formContainer pages}
		<tr>
			<th></th>
			<td style="padding-top: 15px;"><span class="form_description">Přiřadit ke stránkám</span></td>
		</tr>
			{foreach $form["pages"]->controls as $control}
				<tr>
					<th>{$control->label}</th>
					<td>{$control->control}</td>
				</tr>
			{/foreach}
		{/formContainer}
?>