Formulářové pole s automatickou class

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

Dobrý den,

používám na tvorbu formulářů Nette. Pro pole s datumem používám (je to požadavek který musím splnit) js plugin pro bootstrap, který se stará o vyrenderování kalendáře pro výběr data (datepicker). Propojuje se s inputem pomocí class=„data-datepicker“ v šabloně.

Chtěl bych napsat rozšíření pro formuláře tak, aby se přidalo formulářové pole třeba takhle: $form->addDatum, což by automaticky vytvořilo input s touto třídou, bez zásahu v presenteru nebo šabloně.

Byl by někdo tak hodný a poradil mi jak na to? Mám na to časový limit a v Nette dělám krátce, takže si s tím nevím moc rady.

Díky moc za případné rady!

Felix
Nette Core | 1245
+
0
-

Muzes si podedit Form a pak bys mohl mit neco jako:

class MyForm extends Form {

	public function addDatum($name, $label, $class = "data-datepicker") {
		return $this->addText($name, $label)->getControlPrototype()->class[] = $class;
	}

}

Editoval Felix (15. 5. 2013 17:29)

j0hny
Člen | 33
+
0
-

To jsem měl přesně na mysli, díky za odpověď!

EDIT

Ještě mě napadlo, že bych mohl udělat automatický převod formátu data. Datepicker mi datum do inputu zapíše v českém (j.n.Y) formátu a já ho chci přepsat do formátu pro db (Y-m-d). Je možné tohoto docílit přímo ve formulářové komponentě, ještě před přesměrováním na zpracování? (tj. něco jako setValues, volané po zmáčknutí na send)?

Editoval j0hny (16. 5. 2013 9:13)

Felix
Nette Core | 1245
+
0
-

To bohuzel zatim nejde. Nicmene uz jsem to parkrat taky chtel pouzit, neco jako setFilter([callback]), ktere by se zavolalo pri $form->getValues()

j0hny
Člen | 33
+
0
-

Tak to je věčná škoda :-)

Každopádně si myslím že je to dobrý námět do budoucích verzí. Pro datum nebo třeba desetiné číslo (čárka místo tečky), které máme v naší zemičce v jiném formátu, by to bylo celkem dobré zjednodušení pro celou aplikaci. (daly by se samozřejmě vymyslet i další situace, kde by se to dalo použít)

mkoubik
Člen | 728
+
0
-

Proč přesně to nejde přes ty filtry? Nechce se mi to zkoušet. Případně by šlo podědit TextInput a přidávat si v ->addDatum() vlastní implementaci. Přinejhorším by na to asi šel nějak znásilnit translator.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Jaké setFilter()? K podobným požadavkům slouží naimplementování si vlastní formulářové komponenty.

j0hny
Člen | 33
+
0
-

Tak se mi podařilo implementovat podobnout funkčnost pomocí zděděné třídy Form – upravil jsem metodu getValues, která, pokud předaná value odpovídá formátu j.n.Y, upraví datum na Nette\DateTime… Problém už akorát je, že se takto kontrolují všechny pole a ne jen pole přidané pomocí addDatum…

Kdyby někdo měl nápad jak doladit to poslední, budu mu vděčen ;-)

Editoval j0hny (17. 5. 2013 7:32)