Makro pro trochu jiný formulář
- cafesk8
- Člen | 103
Zdravím,
vypisovat formulář do tabulky mi přišlo zbytečné a chtěl jsem raději
něco takového: Přístupné formuláře. A jelikož neexistovalo žádné
makro pro vypsání chyby, rozhodl jsem se napsat si vlastní makro na celý
formulář. Jsem v nette a celkově v OOP nováček, takže ocením jakékoliv
vaše názory, připomínky, chyby atd. Hlavně ty podmínky by to chtělo
nějak zjednodušit. Předem díky.
$me->addMacro('myform','
$form = $control[%node.word];
$legend = %node.args;
echo $form->getElementPrototype()->addAttributes(%node.array)->startTag(),"\n\t<fieldset>";
echo "\n\t\t<legend>$legend</legend>\n";
foreach($form->controls as $name => $field)
if($form[$name]->hasErrors() && $form[$name]->isRequired())
echo "\n\t\t",$form[$name]->getLabel()->class("required"),"\n\t\t",$form[$name]->getControl(),"\n\t\t<span class=error>",$form[$name]->errors[0],"</span><br />\n";
elseif($form[$name]->hasErrors() && !$form[$name]->isRequired())
echo "\n\t\t",$form[$name]->getLabel(),"\n\t\t",$form[$name]->getControl(),"\n\t\t<span class=error>",$form[$name]->errors[0],"</span><br />\n";
elseif(!$form[$name]->hasErrors() && $form[$name]->isRequired())
echo "\n\t\t",$form[$name]->getLabel()->class("required"),"\n\t\t",$form[$name]->getControl(),"<br />\n";
else
echo "\n\t\t",$form[$name]->getLabel(),"\n\t\t",$form[$name]->getControl(),"<br />\n";
echo "\n\t</fieldset>\n",$form->getElementPrototype()->endTag();
');
do šablony poté píšu už pouze toto:
{myform nazevKomponenty "text legendy"}
Editoval cafesk8 (15. 8. 2011 23:46)
- Jan Voráček
- Člen | 90
Ahoj. Řešit kompletní vykreslení formuláře jenom pomocí makra je sice funkční, ale poměrně nešikovný způsob. Mrkni se například na DefaultFormRenderer a jeho wrappers.
- Jan Voráček
- Člen | 90
Makro pro vypsání chyb opravdu není, nicméně se dá použít zápis
{form myForm}
{control $form errors}
{* formularova pole *}
{/form}
Ale pokud by sis udělal vlastní renderer, byl by nesmysl používat makra pro manuální vykreslování – tím vlastně renderer vůbec nepoužiješ. Proto pak stačí formulář vložit jako každou jinou komponentu pomocí makra control:
{control myForm}