‚Tagované‘ renderování formů

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

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
+
0
-

Nějaký takový vykreslovač na tento způsob představoval myslím David na poslední sobotě v Brně.

arron
Člen | 464
+
0
-

Nebylo by lepsi to resit nejakym sablonovacim rendererem?? ;-) Tam at si totiz koder vymysli co chce a nemusi se ucit zadnou dalsi syntaxi…

redhead
Člen | 1313
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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:-)