vykresleni „control“ po svem?

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

snazim se prijit na to, jak si z {control ...} vydolovat jednotlive komponenty (podobne, jako kdybych predal Form sablone a v sablone si je pak vyzobaval pomoci ArrayAccess)

vychazel jsem z threadu:
https://forum.nette.org/…-renderovani

kde mimo jine zaznelo, ze neco takoveho je jiz mozne / mozne bude:

https://forum.nette.org/…-renderovani#…

https://forum.nette.org/…-renderovani#…

v presenteru mam toto:

	public function createComponentLoginForm() {
		$form = new \Nette\Application\AppForm($this, 'loginForm');

		$form->addText('username', 'Uživatelské jméno')
			->addRule(\Nette\Forms\Form::FILLED, 'Zadejte uživatelsié jméno');

		$form->addPassword('passwd', 'Heslo')
			->addRule(\Nette\Forms\Form::FILLED, 'Zadejte heslo');

		$form->addSubmit('btnOk', 'OK');

		$form->onSubmit[] = array($this, 'loginFormSubmitted');

		return $form;
	}

v sablone mam toto:

{block #content}
	{control loginForm begin}
		<h1>FooBar Administration Area</h1>
		{if $flashes}
			<div class="message">
				{control loginForm errors}
				{foreach $flashes as $flash}
					<p>{$flash->message}</p>
				{/foreach}
			</div>
		{/if}
		<fieldset>
			{control loginForm-username label}
			{control loginForm-username control}
		</fieldset>
		<fieldset>
			{control loginForm-passwd label}
			{control loginForm-passwd control}
			{control loginForm-btnOk control}
		</fieldset>
	{control loginForm end}
{/block}

avsak jedine, co ziskam je:

MemberAccessException

Call to undefined method Nette\Forms\TextInput::render().

<?php $control->getWidget("loginForm-username")->render('label') ;$control->getWidget("loginForm-username")->render('control') ?>

… umm… copak delam spatne? :D … mam: Nette Framework 0.9.3 (revision cc750ea released on 2010–01–28)

Editoval wdolek (7. 4. 2010 13:48)

Honza Marek
Člen | 1664
+
0
-

{control loginForm-passwd label} a podobně totiž naprosto nedělá to, co potřebuješ.

Pro vypsání labelu/políčka bys potřeboval

<?php
echo $control->getWidget("loginForm")->getComponent("username")->label
?>

resp.

<?php
echo $control->getWidget("loginForm")->getComponent("username")->control
?>

Co to dělá ve skutečnosti, to jsi sám napsal výše.

Ve frameworku nějaká hezčí syntaxe podporována není, ale můžeš zkusit takovou jednu mojí hračku.

Oficiálně se to dělá takhle:

  1. Přiřadit si v presenteru instanci formuláře do šablony.
  2. v šabloně
{widget $form begin}
{widget $form errors}
{$form["username"]->label}: {$form["username"]->control}
{widget $form end}
wdolek
Člen | 331
+
0
-

:D aha… dik :) to me tedy ten thread, ktery jsem si tu nasel, trosku zmatl