„Recyklace“ formulare
- rezorcinol
- Člen | 25
Zdravim,
v mem IS mam stranku s pridanim noveho uzivatele a s editaci existujiciho uzivatele. Vytvoril jsem si formular, ktery zobrazuji pri pridavani uzivatele, do ktereho zadavam jmeno, hesla, adresu atd.
Nyni kdyz delam editaci uzivatele, rikal jsem si, ze by bylo dobre znovu pouzit stejny formular. Jenze v editaci uzivatele nechci vypisovat inputy s heslem a overenim hesla. Proto jsem formular musel vykreslit manualne a tyto dva inputy vynechat.
Jenze pri odesilani tohoto editacniho formulare jsem narazil na problem. Jelikoz heslo a overeni hesla byly v puvodnim formulari povinne udaje, jsem upozornen, ze je musim vyplnit (i kdyz vlastne nejsou videt). Zkousel jsme tedy alespon neco takoveho:
<?php
$form['password']->setDisabled();
$form['password2']->setDisabled();
?>
Ale bezuspesne. Je tedy pro editaci lepsi vytvorit zcela novy formular nebo to jde vyresit nejak elegantneji?
A jeste bych mel jeden dotaz. Jde nekde stahnout nejaky jednoduchy IS (prihlasovani, sprava uzivatelu, vypis dat z db a jejich editace) v Nette. Neco na zpusob CD-Collection v examplech, ale vice promakanejsi – potreboval bych to jako studijni material.
- rezorcinol
- Člen | 25
Foowie napsal(a):
Nastav
setDisabled()
dříve, než v render{action}. (V action{action}, nebo v továrničce).
Nejak nevim kam to tedy dat kdyz ne do metotody renderEdit(). Do actionEdit()?
- rezorcinol
- Člen | 25
Tak jsem to zkusil udelat pres beforeRender() takto:
<?php
public function beforeRender()
{
if ($this->backlink() == ":Employes:edit")
{
$form = $this['employeeForm'];
$form['password']->setDisabled();
$form['password2']->setDisabled();
$this->template->form = $form;
}
}
public function renderEdit($id = 0)
{
$form = $this->template->form;
...
vykresleni formulare
}
?>
Ale stale stejne problem – porad plati podminka nutnosti zadani hesla.
- rezorcinol
- Člen | 25
A tak jeste do tretice… Pokud si ve funkci renderEdit() vykreslim i input password a password2, tak jsou zasedle – to znamena, ze kod ve metode beforeRender() funguje. Co ale nefunguje je to, ze i kdyz je input disablovany, porad si vynucuje pravidla (FILLED).
Pokud $form[‚password‘]->setDisabled(); nahradim za unset ($form[‚password‘]); dostanu InvalidStateException „Component is not attached to ‚Form‘.“
- Foowie
- Člen | 269
rezorcinol napsal(a):
Tak jsem to zkusil udelat pres beforeRender() takto:
<?php public function beforeRender() { if ($this->backlink() == ":Employes:edit") { $form = $this['employeeForm']; $form['password']->setDisabled(); $form['password2']->setDisabled(); $this->template->form = $form; } } public function renderEdit($id = 0) { $form = $this->template->form; ... vykresleni formulare } ?>
Ale stale stejne problem – porad plati podminka nutnosti zadani hesla.
Metoda beforeRender
už se nějak nepoužívá.
public function actionEdit($id = 0) {
if(tvoje_podminka) {
$this["komponenta"]["password"]->setDisabled();
}
}