Nastavení ID hodnoty formuláře

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

Ahoj, potřebuji formuláři nastavit ID hodnotu.
V dokumentaci jsem našel, že by to mělo jít takto:
** public function createComponentFirstForm($name)
{
$form = new AppForm($this, $name);

//$form->setMethod(‚post‘); ? nefunguje ?

//Html::el(„form id=hahahaha“);

$form->getElementPrototype()->id(‚very-nice-form‘);
}**
Nicméně když to zkusím takhle, tak když se mrknu na vygenerovanou stránku do kódu, tak mám <form> stále bez IDčka.

Nevíte kde by mohl být problém? Díky

toka
Člen | 253
+
0
-

Ono by to šlo, kdybys četl dokumentaci správně :-)

Toto samozřejmě funguje:

...
$form->getElementPrototype()->id = 'id-id-id';
...
MIKI
Člen | 34
+
0
-

Zdravim,

nechapem, ale mne to nefunguje.

public function createComponentLoginForm()
{
  $form = new AppForm();
  $form->addText('name', 'Name:', /*size*/50, /*maxlength*/60)
       ->addRule(Form::FILLED, 'Musite vyplnit text!');
  $form->onSubmit[] = callback($this, 'processLoginForm');
  $form->getElementPrototype()->setId('test');  // L1
  //var_dump($form);   // L2
  $form->getElementPrototype()->id = 'test';  // L3
  //var_dump($form);  // L4
  return $form;
}

sablona

{widget loginForm}

Ak odkomentujem L2, najdem v objekte AppForm nastavenu polozku „id“ na ‚test‘, to iste pri L4. Ale v sablone je vygenerovane id=„frm-loginForm“

Kde robim chybu?

toka
Člen | 253
+
0
-

V presenteru:

protected function createComponentFormLogin() {
	$form = new AppForm;
	$form->addText('username', 'Login:')
	     ->addRule(Form::FILLED, 'Zadejte, prosím, svoje přihlašovací jméno');

	$form->addPassword('password', 'Heslo:')
	     ->addRule(Form::FILLED, 'Zadejte, prosím, svoje heslo');

	$form->addProtection();

	$form->addSubmit('submitted', 'Přihlásit');
	$form->onSubmit[] = array($this, 'formLoginSubmitted');

	$form->getElementPrototype()->id = 'nove-id';

	return $form;
}

V šabloně:

{widget formLogin}

Vygenerovaný výsledek („vyrenderovaná“ šablona):

<form action="/www/.../document_root/index.php?action=login&amp;do=formLogin-submit" method="post" id="nove-id" name="frm-formLogin" onsubmit="return nette.validateForm(this)">
	<table>
		<tr class="required">
			<th><label class="required" for="frmformLogin-username">Login:</label></th>

			<td><input type="text" class="text" name="username" id="frmformLogin-username" value="" /></td>
		</tr>

		<tr class="required">
			<th><label class="required" for="frmformLogin-password">Heslo:</label></th>

			<td><input type="password" class="text" name="password" id="frmformLogin-password" /></td>
		</tr>

		<tr>
			<th>&nbsp;</th>

			<td><input type="submit" class="button" name="submitted" id="frmformLogin-submitted" value="Přihlásit" /></td>
		</tr>
	</table>

	<div><input type="hidden" name="_token_" id="frmformLogin-_token_" value="10366d93fa8c746104e7d969cdb30bf7" /></div>
</form>

Editoval toka (13. 9. 2010 20:29)

MIKI
Člen | 34
+
0
-

Zaujimave, som z toho blby, ale dal som presne ten isty kod, co mas ty, premazal cache, ale id je stale vlastne :(

MIKI
Člen | 34
+
0
-

HURA! Uz viem, kde bola chyba :)
Spravny kod na fungovanie vlastneho ID pre formular ma byt takyto:

public function createComponentFormLogin($name)
{
  $form = new AppForm($this, $name);
  ...
  $form->getElementPrototype()->id = 'test';
  ...
}
toka
Člen | 253
+
0
-

MIKI napsal(a):

HURA! Uz viem, kde bola chyba :)
Spravny kod na fungovanie vlastneho ID pre formular ma byt takyto:

public function createComponentFormLogin($name)
{
  $form = new AppForm($this, $name);
  ...
  $form->getElementPrototype()->id = 'test';
  ...
}

Aha, že bych neměl v adresáři, kde jsem testoval, aktuální Nette? :-D Protože to, co jsem poslal, mi vážně jde. Co máš za verzi? Já to zkoušel na 0.9.3 2ce0ca6 released on 2010–02–02, což se přiznám, je trošku starší. Nevím, jak se mi to připletlo :-D

MIKI
Člen | 34
+
0
-

Ja pouzivam Nette Framework 0.9.5 (revision 5eb03f5 released on 2010–07–01), kde mi, bohuzial, Tvoja verzia nesla :)

toka
Člen | 253
+
0
-

Ano, zkusil jsem na aktualni verzi a moje reseni vazne neslo. Omlouvam se.

Chbox
Člen | 125
+
0
-

Jen takovy dotaz..

$form->getElementPrototype()->id = 'MyForm';

mi v Nette2 Alpha2 nechce nejak menit ID, zmenilo se neco?

redhead
Člen | 1313
+
0
-
$form->setHtmlId('MyForm'); // myslim
Chbox
Člen | 125
+
0
-

= Call to undefined method AppForm::setHtmlId()

redhead
Člen | 1313
+
0
-

To je vlastně jenom na prvcích.

Máš to o pár postů dřív: https://forum.nette.org/…ty-formulare?… (nespíš tam musí být kontruktor s těmi parametry)

Editoval redhead (3. 12. 2010 16:04)

Chbox
Člen | 125
+
0
-

no vždyť říkám, že:

$form->getElementPrototype()->id = 'test';

mi žádný vlastni ID nepřiřadí…

Editoval Chbox (3. 12. 2010 16:34)

redhead
Člen | 1313
+
0
-

Zkus to dát buď na začátek pod konstruktor nebo úplně na konec. Je možné, že to tam něco přepisuje a nebo se to fakt změnilo, nevím.

Chbox
Člen | 125
+
0
-

zkoušel jsem oboje, dokonce, když si to vydampuju je tam spravana hodnota, ale ve formu visí pořád default hodnota. :-(
aha, tak komponenta musí být zapsána:

protected function createComponentLoginForm($name){
	$form = new AppForm($this,$name);
	...
}

a ne:

protected function createComponentLoginForm(){
	$form = new AppForm();	...
}

pak to chodí ok.

Editoval Chbox (3. 12. 2010 16:34)

David Grudl
Nette Core | 8171
+
0
-

fixed