Jak odstranit deklaraci formuláře z výstupu?

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

Dobrý večer,
programuji fórum a při výpisu příspěvků generuji u každého příspěvku také jeden select box. Chtěl bych docílit toho, aby se ten formulář, respektive jeho deklarace v html zdroji nezobrazovala. Ten formulář vlastně obaluje celý ten foreach co generuje příspěvky. Zkoušel jsem to vyřešit takto, ale bohužel to nejde:

{if $user->isAllowed("neco")}
	{form formular}
{/if}

{foreach $prispevky as $prispevek}
příspěvky a u každého {if $user->isAllowed("neco")}{input foo}{/if}
{/foreach}

{if $user->isAllowed("neco")}
	{/form formular}
{/if}

Zkoušel jsem také ukládat ten výstup do proměnné a s tím pak pracovat, ale to mi také nešlo. Ví někdo jak se dá tento problém nějak elegantně vyřešit?

Editoval Pilda (28. 1. 2012 0:08)

petr.jirous
Člen | 128
+
0
-

{if $isAllowed=="neco"} ?

Editoval petr.jirous (27. 1. 2012 23:20)

Pilda
Člen | 52
+
0
-

petr.jirous napsal(a):

{if $isAllowed=="neco"} ?

Promiňte, špatně jsem to sem napsal, zeditoval jsem ten příspěvek.

Filip Procházka
Moderator | 4668
+
0
-

Nejprve je potřeba mít správně napsaný formulář a v něm třeba addDynamic

use Nette\Application\UI;

protected function createComponentTopicForm()
{
	$form = new UI\Form;
	$form->addDynamic('topics', function ($container) {
		$container->addSelect('foo', 'Foo');
	});
	$form->addSubmit('send', 'Odeslat');
	$form->onSuccess[] = callback($this, 'processTopicForm');

	return $form;
}

public function processTopicForm(UI\Form $form)
{
	if (!$this->user->isAllowed(...)) {
		// bezpečnost především!!
		throw new Nette\Application\ForbiddenRequestException;
	}

	$form->values; // ...
}

Až teď to můžeš nějak rozumně vykreslovat

{form topicForm}

{foreach $prispevky as $prispevek}
	příspěvky a u každého
	{if $user->isAllowed("neco")}
		{input "topics-$prispevek->id-foo"}
	{/if}
{/foreach}

{/form}
Pilda
Člen | 52
+
0
-

HosipLan:
díky moc, zkusím to tam zapasovat.

Pilda
Člen | 52
+
0
-

HosipLan:
Bohužel ten replikátor můj problém neřeší. Ten tag form tam stále je. Nemyslím ten input, ale tag form, když se podíváš do zdrojového kódu. Ten chci odstranit pro lidi kterým se ty inputy nezobrazují.

Nicméně je to fajn věcička, jeho použitím se mi dost zpřehlednil kód, díky za tip.

Editoval Pilda (31. 1. 2012 1:47)