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

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();
	}
redhead
Člen | 1313
+
0
-

není lepší se na implementaci tohoto v php vykašlat a dělat to přes ajax??

norbe
Backer | 403
+
0
-

No je fakt, že je to jen na zvýšení komfortu, takže pokud to nebude s vypnutým JS fungovat, nebude to žádná katastrofa :-)