Pomocná tlačítka pro vyplnění formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- norbe
- Backer | 405
Ahoj,
snažím se do formulářů přidat tlačítka, která by usnadnila jeho vyplňování, např. „Generovat heslo“ nebo „Generovat URL článku“, bohužel se mi nějak nepodařilo proniknout hlouběji do toho, jak to celé funguje
Představoval bych si to nějak takto:
$form["button"]->addFilterOn(ExtendedAppForm::GENERETE_PASS, array($form["password"], $form["password2"]));
nebo
$form["button"]->addFilterOn(ExtendedAppForm::WEBALIZE, array("heading" => $form["url"]));
Zatím jsem došel pouze k připojení callbacku a vymazání onSubmit, ovšem nepřijde mi to jako zrovna dobré řešení. Pokud by měl někdo nějaký tip jak to udělat elegantněji, moc bych to ocenil :)
protected function createComponentUserForm($name)
{
// Creating form
$form = new ExtendedAppForm($this, $name);
//Group Login data
$form->addGroup(_("Account"));
$form->addText('user', _('Username:'))
->addRule(Form::FILLED, _("Please fill username."));
$form->addPassword('password', _('Password:'))
->addCondition(Form::FILLED)
->addRule(Form::MIN_LENGTH, _('Password must be at least %d characters in length'), 5);
$form->addSubmit("pass_gen", _("Generate password"))
->setValidationScope(NULL)
->onClick[] = array($this, "generatePassword");
$form->addPassword('password2', _('Confirm password'))
->addRule(Form::EQUAL, _('Passwords do not match'), $form["password"]);
//Group Login data end
// Group Actions
$form->addGroup(_("Actions"));
$form->addSubmit('cancel', _('Cancel'))
->setValidationScope(NULL)
->onClick[] = array($this, 'cancelClicked');
$form->onSubmit[] = array($this, 'userFormSubmitted');
// Group Actions end
return $form;
}
/**
* Generate SAVE password to form
* @param SubmitButton $button
*/
public function generatePassword(SubmitButton $button)
{
$form = $button->parent;
$generatedPass = "";
while(strlen($generatedPass) < 8) {
switch(rand(0, 3)) {
case 0:
$generatedPass .= chr(rand(ord('0'), ord('9')));
break;
case 1:
$generatedPass .= chr(rand(ord('A'), ord('Z')));
break;
default:
$generatedPass .= chr(rand(ord('a'), ord('z')));
break;
}
}
$form["password"]->value = $generatedPass;
$form["password2"]->value = "sdfsdfsd";
$this->flashMessage("Byla vygenerováno heslo $generatedPass");
$form->onSubmit = array();
}