‚Tagované‘ renderování formů
- redhead
- Člen | 1313
Zdravim,
libila se mi myslenka renderovani formu v java frameworku Stripes, v kterem delam na praxich.
Zapis v template je napr.:
<stripes:form method="POST">
<stripes:text name="textik" />
</stripes:form>
Napadlo me to udelat i u Nette pomoci template filteru. Uz mam nejake zaklady, bohuzel ted na to nemam moc cas.
Myslenka: tvorit formy v presenteru jako ted (k obrazu programatorovu) a renderovani nechat pripadnemu koderovi (+ i moznost menit to php-skriptovani), s ohledem na mozne pouziti spolus s CurlyBrackets.
<xforms:form name="$forms['test']" method="post">
{if $errors}
<div id="errors">
<xforms:errors />
</center>
{/if}
<xforms:label for="user" /><br />
<xforms:text name="user" id="user" class="userbox" /><br />
<xforms:label for="password" /><br />
<xforms:password name="password" /><br />
<a href="{plink forgotPwd:}">Zapomeli jste heslo?</a><br />
<xforms:checkbox name="remember" onclick="someJsThingy()" class="remember_cb" />
<xforms:label for="remember" />
<br />
<xforms:submit name="login" />
</xforms:form>
vygeneruje neco takoveho (pro jednoduchost jsem nepouzil <table>):
<?php $_xforms = XFormsFilter::initState($template) ?>
<?php $forms['test']->setMethod('post');$forms['test']->render('begin'); $errors = count($forms['test']->getErrors()) != 0; ?>
<?php if ($errors): ?>
<div id="errors">
<?php $forms['test']->render('errors') ?>
</center>
<?php endif ?>
<?php $forms['test']['user']->label;echo $forms['test']['user']->label ?><br />
<?php $forms['test']['user']->setHtmlId("user");$forms['test']['user']->getControlPrototype()->class('userbox');echo $forms['test']['user']->control ?><br />
<?php $forms['test']['password']->label;echo $forms['test']['password']->label ?><br />
<?php $forms['test']['password'];echo $forms['test']['password']->control ?><br />
<a href="<?php echo TemplateHelpers::escapeHtml($presenter->link('forgotPwd:')) ?>">Zapomeli jste heslo?</a><br />
<?php $forms['test']['remember']->getControlPrototype()->onclick('someJsThingy()')->class('remember_cb');echo $forms['test']['remember']->control ?>
<?php $forms['test']['remember']->label;echo $forms['test']['remember']->label ?>
<br />
<?php $forms['test']['login'];echo $forms['test']['login']->control ?>
<?php $forms['test']->render('end'); $forms['test']->getRenderer()->getClientScript()->renderClientScript() ?>
V tomto priklade je do template posilano pole $forms jejiz jednim
z elementu je AppForm.
Cela XML syntaxe je prevedena do AppForm ekvivalentu (disabled=„true“ ⇒
setDisabled(true); atd..)
Filter neni hotovy, ani optimalizovany, takze jsou tam nejake nadbytecnosti.
Vyhoda (aspon pro me) by byla omezit renderovani (a pripadne javascriptove blbinky) na template.
Jen bych rad vedel, co si o tom myslite, jestli ma smysl na tom dal delat a hlavne dokoncit to ;)
PS: jak jinak vyrenderovat JS validaci nez volat render metoru ClientScriptu v Renderu?
PS2: je nejaky duvod proc set/Value/HtmlId/a jiné nevraci zpet control pro ‚flow‘ skriptovani? (napr.: setValue(‚a‘)->setHtmlId(‚asd‘))
Diky
Editoval redhead (18. 5. 2009 19:59)
- romansklenar
- Člen | 655
Nějaký takový vykreslovač na tento způsob představoval myslím David na poslední sobotě v Brně.
- redhead
- Člen | 1313
romansklenar napsal(a):
Nějaký takový vykreslovač na tento způsob představoval myslím David na poslední sobotě v Brně.
Ze bych zase znovu objevoval ameriku??
arron napsal(a):
Nebylo by lepsi to resit nejakym sablonovacim rendererem?? ;-) Tam at si totiz koder vymysli co chce a nemusi se ucit zadnou dalsi syntaxi…
Nejsem si jist ohledne template renderu, ale neni to furt to same? Na strane presenteru? (pouze ten control obali nejakyma divama nebo td/th)?
Me slo predevsim o to, aby koder mohl upravovat samotny control pro sve potreby – pro svoje renderovani (classy, jesli v tabulce nebo jinak), vlastni JS validaci, nebo jinou JS funkcnost (zmena id, …), bez toho aby lezl do kodu.
- jasir
- Člen | 746
Nejsem si jist ohledne template renderu, ale neni to furt to same? Na strane presenteru? (pouze ten control obali nejakyma divama nebo td/th)?
Me slo predevsim o to, aby koder mohl upravovat samotny control pro sve potreby – pro svoje renderovani (classy, jesli v tabulce nebo jinak), vlastni JS validaci, nebo jinou JS funkcnost (zmena id, …), bez toho aby lezl do kodu.
Zkus se podívat tady na příspěvek kolegy arrona, zatím to má bez reakce, asi to ještě nikdo nevyzkoušel, ale nevypadá to špatně…
- redhead
- Člen | 1313
jasir napsal(a):
Zkus se podívat tady na příspěvek kolegy arrona, zatím to má bez reakce, asi to ještě nikdo nevyzkoušel, ale nevypadá to špatně…
Na to jsem se uz dival, ikdyz pravda nevyzkousel, ale co sem videl z tech templatu tak to pouze obaluje controly cim potrebujes (tabulkou – tr, td, …) ale nepracuje se samotnymi controly, nebo jo?
Delam 10 veci najednou, takze mi nezbyva moc casu to otestovat.
Jak uz jsem rikal, slo mi o nastaveni samotnych controlu, ne jejich ‚obal‘. Cili id, class, on* JS eventy, atd..
Editoval redhead (20. 5. 2009 9:47)
- arron
- Člen | 464
ak uz jsem rikal, slo mi o nastaveni samotnych controlu, ne jejich ‚obal‘. Cili id, class, on* JS eventy, atd..
Mno, ono je to tezke…Ve chvili, kdy zacinas formular a jeho pole definovat pomoci nejake tridy, tak se asi clovek nemuze nejak rozumen vyhnout tomu, ze pro upravy typu class, id, atd. se bude muset sahat nekde do php…nicmene kdyz tady na to tak koukam, tak to precejenom nevypada tak spatne:-) Mozna by se to na to dalo nejak uhrat:-)
Na to jsem se uz dival, ikdyz pravda nevyzkousel, ale co sem vydel z tech templatu tak to pouze obaluje controly cim potrebujes (tabulkou – tr, td, …) ale nepracuje se samotnymi controly, nebo jo?
A skoro bych si troufnul rict (po letmem pohledu do zdrojovych kodu), ze by se to nakonec dalo nejak rozumne vymyslet s TemplateRendererem po drobnyc upravach:-)
Nicmene ty sablony jsou velmi sporadicke a zdaleka nevyuzivaji vsech moznosti…ale stejne si nakonec kazdy napise svoje, podle vlastnich potreb:-) a k tomu to nakonec cele je, ze jo:-)