Jak odstranit deklaraci formuláře z výstupu?
- Pilda
- Člen | 52
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)
- Filip Procházka
- Moderator | 4668
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
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)