Nové formuláře a dotazník

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8222
+
0
-

Nejvyšší čas dát do Nette ty nové formuláře. Nejprve do samostatné větve a po vyzkoušení se přesunou do ostré. Nové formy by měly vyřešit všechny současné nedostatky, nicméně vím jen o těch, o kterých vím ;-) Proto ještě před zveřejněním vás poprosím o zmínění nedostatků současných formulářů z vašeho pohledu. Jestli jsem na něco nezapomněl.

Nejde o hlasování, proto prosím nepiště věci, které už stihl napsat někdo před vámi. A pokud vás ještě něco dodatečně napadne, klidně editujte svůj komentář.

Tharos
Člen | 1030
+
0
-

Tak já začnu – absence vestavěných maker pro pohodlnější manuální vykreslování. Současné manuální vykreslování je na můj vkus docela pracné.

Editoval Tharos (21. 2. 2011 23:44)

hrach
Člen | 1838
+
0
-

Nejvetsim nedostatkem nette je, ze nejde nejak vygenerovat jednoduchou administraci. Respektive pokud tabulka ma 30 sloupcu, budu muset defionvat vsechno rucne. Prvnim krokem, abych toto mohl nejak efektivne generovat, je oddeleni datoveho typu/hodnoty od html(5) prezentace. Jak jsem pochopil z nejakych drivejsich nahledu, tak to bych prave od novych formularu mohl ocekavat.

Ve vysledku si clovek stejne vzdycky musi sablony napsat sam a pro zacatek bude urcite taky dostacovat vychozi renderer :)

westrem
Člen | 398
+
0
-

Tiez sa pridam:

  1. suhlasim s @Tharos – pohodlne a pekne makra na vykreslovanie by podla mna mohli byt sucastou Nette – proste pridavaju formularom taku tu Netteovsku eleganciu naviac O:-) Spominal si vsak David, ze prezentacnu vrstvu mas vymyslenu uplne inak ako u povodnych formularov, takze je mozno tento poziadavok uz passé, necham sa prekvapit
  2. suhlasim s @hrach v jednej veci – oddelenie datoveho typu od prezentace – formular ako taky by mal udavat iba to, ze chcem dostat cislo, ktore splnuje to a to a nestarat sa o to, ci bude uzivatelovi zobrazeny textinput, selectbox alebo slider s ciselnou osou – v minulosti to bolo nejak logicke takto prepojovat, teraz mi pride, ze abstrakcia tymto smerom je ten spravny krok
  3. moznost priradovat a vytvart pravidla aj nad samotnym formularom, nielen nad jeho prvkami. Toto je potrebne napr. v pripade, ze mame nejake polia kde bud vsetky budu vyplnene, alebo ani jedno (adresa dorucenia – 4 polia, fakturacna adresa – dalsie 4 polia, fakturacnu vyplnit iba ak sa lisi od dorucovacej – toto poriadne poosetrovat v sucasnom ponimani pravidiel by asi bola trosku fuska)
  4. zaviest rozhrania pre pravidla IRules a IRule a pripravit formulare na to, aby si clovek mohol implementovat vlastne vyhodnocovanie pravidiel – doteraz boli pravidla silne previazane s formularmi a ked chcel clovek nieco zmenit (mat napr. 2 parametry pre val. pravidlo) tak sa to muselo nepekne obchadzat, pokial by bol nejaky standard, ktoreho sa da drzat tak by to bolo lepsie a flexibilnejsie

Na zaver, neviem presne v akom stave je klient side validacia, ale nieco sa mi mari, ze uz su podporovane aj custom validacne pravidla cez nejake callbacky – ak ano tak je to super, ak nie, tak toto by mozno bola nejaka featureska na dorobenie – resp mat k dispozicii aj nejake klient side nastroje na togglovanie poli pri nejakych podmienkach apod (aj ked toto tusim uz funguje, nie?)

Foowie
Člen | 269
+
0
-

Validace pouze části formuláře / kontejneru / group

Edit: myšleno jako validace pouze prvků v daném kontejneru a né celého formu

Editoval Foowie (22. 2. 2011 8:22)

Filip Procházka
Moderator | 4668
+
0
-

westrem: ty client side callbacky a věcičky co popisuješ, by měly být ve frameworku a fungovat.

Třeba ty validace skupiny prvků se opravdu hodí. Když mám třeba adresu a chci kontrolovat jestli ji uživatel vyplnil, tak musím projít všechny pole a nějak to kontrolovat. Hodilo by se nějaké pravidlo ve stylu container is filled a nebo spíše container has, at least one field, filled :) Ale nepříjde mi to jako priorita.

Editoval HosipLan (22. 2. 2011 8:07)

o5
Člen | 416
+
0
-
$form->addDynamic();
dakota
Člen | 148
+
0
-
  • nedostatočné manuálne renderovanie label a control – napr. vykreslenie suffix a requiredsuffix pri label je nutné teraz obchádzať
  • kontajner – možnosť pridať validačné pravidlo a nastaviť option – https://forum.nette.org/…-containerov

Editoval dakota (22. 2. 2011 8:52)

Honza Marek
Člen | 1664
+
0
-

Nějaký template renderer, abych mohl formu nastavit jednoduše šablonu, ten by se vykresloval podle ní a dál bych se nemusel o nic starat.

Chbox
Člen | 125
+
0
-

setDisabled() by mohla vracet hodnoty. Unsetnout je můžu vždy, než je složitě získávat.

Patrik Votoček
Člen | 2221
+
0
-
  • Dynamické formuláře (pokud vím je to vyřešeno)
  • nějaké inteligentnější toggle (řešení neznám ani mě žádné nenapadlo :-( )
o5
Člen | 416
+
0
-

Patrik Votoček napsal(a):

  • Dynamické formuláře (pokud vím je to vyřešeno)

Vyreseno? Tim myslis jako tohle ??

Filip Procházka
Moderator | 4668
+
0
-

Ne. Myslí tím, že už to má David hotové.

Ondřej Mirtes
Člen | 1536
+
0
-

Napadly mě tři věci:

  • Checkboxy. Podle HTML standardu může atribut value v checkboxu nabývat jakékoli hodnoty, není to jen boolean. Jakkoli to pro někoho nemusí mít opodstatnění („checkbox je přeci zaškrtnutý nebo nezaškrtnutý, tj. true/false!“), byl bych rád, kdyby Nette umožňovalo to, co umožňuje prachsprosté PHP/HTML bez frameworku. Hodí se to – mám např. GET formulář s nějakými checkboxy a chci, aby po odeslání byla URL nějaká smysluplná a dala se routovat (tj. abych neměl v URL hodnota=on, ale klíč=hodnota). Možná bude problém to, že pak budu chtít přidat několik checkboxů se stejným name, ale různým value a Nette zhavaruje na tom, že komponenta s daným jménem už existuje.
  • Pohodlné manuální vykreslování. Ať už podporou nějakých hezčích maker alá {form}{/form} a/nebo vlastní šablonou, kterou akorát formuláři nastavím.
  • Převádění objektů na skalární hodnoty a zpět. Pokud používám ORM, v aplikaci pracuji s objekty, ale do HTML logicky musím dát nějaké integery a stringy – typicky u selectboxů musím furt dokola psát to samé převádění. Jak bych si to představoval? Třeba takhle:
//předpokládejme, že klíče pole budou IDčka a dají se tudíž použít jako identifikátory (`<option value="">`)
$categories = $em->getRepository('Category')->findAll();.

$form->addSelectbox('cat', 'Kategorie', $categories, function(Category $category) {
	// tahle funkce se strčí jako parametr do array_map
	return $category->title; // tohle bude mezi tagy `<option></option>`
}, function($id) use ($em) {
	return $em->find('Category', (int) $id); // tato funkce se použije pro zpětný převod odeslané hodnoty na objekt
});

Poslední bod je asi trochu sporný, možná ho široká komunita nepotřebuje a bude stačit, když si to v Mediu implementujeme jen pro sebe :)

Honza Marek
Člen | 1664
+
0
-

OM: 3) To mám. A lepší :)

o5
Člen | 416
+
0
-

Ondřej Mirtes napsal(a):

1] nehodi se nahodou pro to, kdyz odesles GET formular presmerovavat? to co navrhujes je zajimave, ovsem stejnak bude url po odeslani „plne balastu“ (napr.: &filter=Filtrovat)

Editoval o5 (22. 2. 2011 20:38)

gawan
Člen | 110
+
0
-

súhlasím s @hrach, ešte by som si to konkrétne predstavoval nejako takto:

<?php

$data = $database->table('table')->find(7);
$form = new Form;
$form->addAllFields($data);
$form->addDefaultSubmit('ok', 'cancel');

?>

a to pridá všetky stĺpce z danej tabuľky, podľa dátového typu si vyberie najvhodnejšie ovládacie prvky, pridá všetky validačné pravidlá, ktoré sa dajú zistiť z databázy (required, integer ošetrí na číslo, atď.) Super by bolo, keby to vedelo vytiahnuť stĺpce aj ak by v $data boli aj nejaké joiny. Ak by bol v selectore aj nejaký ->select(‚col1, col2‘) tak by samozrejme vygeneroval len tieto stĺpce. addDefaultSubmit by pridalo dve tlačidlá, ok, cancel (tie parametre by tam nemuseli byt, by boli defaultne ‚ok‘ , ‚cancel‘) a naviazalo na ne okClicked, a cancelClicked.

A podľa mňa by mal by byť v nette aj nejaký defaultný grid, ktorý by sa definoval tiež nejako podobne veľmi jednoducho, ale to je iná téma…

jtousek
Člen | 951
+
0
-

Co by se mi hodně líbilo, je definice jednoduchých validačních pravidel pomocí anotací v modelu, jako to má Symfony. Typicky jde o případ, kdy nějaká informace je typu číslo / e-mail / url / datum / čas / whatever.

Aby vše bylo čisté, je nutné psát kontrolu na dvě místa. Jednak jako pravidlo do formuláře a jednak do příslušného settru v modelu. Tyhle jednoduché typové věci by imho měly být na jednom místě.

Na straně formuláře bych nechal jen ty složité věci, kde jsou potřeba podmínky apod.

bojovyletoun
Člen | 667
+
0
-

Mám trochu pocit, že jak plyne diskuse, tak byste do forml chtěli dávat víc a víc věcí, které možná už trochu překračují formuláře. Mělo by to být možná v jiné třídě (něco jako FormModelConnector) – viz můj topic "Komplexní deklarace modeluL

hrach
Člen | 1838
+
0
-

bojovyletoun: Přesně tak. Někteří si pletou CRUD a formuláře.

Honza Marek
Člen | 1664
+
0
-

gawan napsal(a):

súhlasím s @hrach, ešte by som si to konkrétne predstavoval nejako takto:

<?php

$data = $database->table('table')->find(7);
$form = new Form;
$form->addAllFields($data);
$form->addDefaultSubmit('ok', 'cancel');

?>

Tohle samozřejmě do formulářů vůbec nepatří. Nějaký formulář si můžeš vygenerovat externě.

<?php
// pokud se vyjádřím zdrojovým kódem, aby tomu rozuměli i programátoři
$vyrabovatko = new VyrabovatkoFormuZDatabaze($form, $database->table('table')->find(7));
$vyrabovatko->nacvakejPolicka();
$vyrabovatko->nacvakejTlacitka();
?>
Patrik Votoček
Člen | 2221
+
0
-

o5 napsal(a):

Vyreseno? Tim myslis jako tohle ??

Tím jsem myslel již na podzim avizované addDynamic

gawan napsal(a):

a to pridá všetky stĺpce z danej tabuľky, podľa dátového typu si vyberie najvhodnejšie …

jtousek napsal(a):

Co by se mi hodně líbilo, je definice jednoduchých validačních pravidel pomocí anotací v modelu, jako to má Symfony. Typicky jde o případ, kdy nějaká informace je typu číslo / e-mail / url / datum / čas / whatever.

Tohle už poněkud překračuje ráme formulářů jako takových.

mkoubik
Člen | 728
+
0
-

Tohle už poněkud překračuje ráme formulářů jako takových.

A nebylo by fajn mít ty validace úplně extra? Pak by se daly používat jak ve formulářích, tak třeba v modelu (i pomocí těch anotací by se mohly přiřazovat).

Peetee
Člen | 75
+
0
-

Možnost formuláře nadále vykreslovat automaticky.

(Omlouvám se, pokud je to blbost, nevím jak je tato část zamýšlena. Myslím, že pro rychlý workflow je dobrý nápad umožnit formuláře vytvořit, zpracovávat, otestovat funkční řešení a teprve poté ladit, vychytávat a tedy následně manuálně vykreslit. Navíc se domnívám, že část formulářů bych možná ani manuálně vykreslovat nemusel.)

Editoval Peetee (23. 2. 2011 15:12)

Lábus
Bronze Partner | 19
+
0
-

možnost manuálně (například ve foreach cyklu) vykreslovat jednotlivé prvky radiolistu

jansfabik
Člen | 193
+
0
-

Přepsat DefaultFormRenderer tak, aby používal Latte šablony. Často používám stejný formulář na několika různých místech a musím ho vykreslovat pomocí {include '@exampleForm.latte', form => $presenter[exampleForm]}. Bylo by fajn, kdybych šlo používat {control exampleForm}, a pak si v továrničce jenom nějakým $form->renderer->setTemplate() přenastavit šablonu. Dala by se tak i snadno nastavit výchozí šablona pro celý web.

Filip Procházka
Moderator | 4668
+
0
-

Bylo by vhodné zamyslet se nad možností automatického vykreslení části šablony, třeba jediné co chci vykreslit jinak je jeden fieldset z 10ti, ale stejně musím všechny vykreslit skoro ručně, protože to jinak nejde :)

arron
Člen | 464
+
0
-

OT: @HospiLan: to uz je daaavno vymyslene a napsane, jenom o to nikdo nikdy neprojevil zajem :-) Mam i napad jak to prepsat (a tim to vyrazne zrychlit), ale zatim se mi to nepodarilo realizovat. Ted spis tak cekam, s cim prijde David :-)

Filip Procházka
Moderator | 4668
+
0
-

já spíš myslel nějaké nativní

$form->renderGroup($formGroup); // returns Nette\Web\Html
$form->render('group', $formGroup); // returns Nette\Web\Html
$form->renderer->renderGroup($formGroup); // returns Nette\Web\Html

nebo aspon neco jako

{control $form 'group', $formGroup}
{control $form:group $formGroup}

Asi by stačilo tu logiku vyčlenit z renderBody, nebo tak něco :) Kdyby mi to začalo hodně vadit (ach ta lenost) tak pošlu pull

frosty22
Člen | 373
+
0
-

Nevím, zda již to není řešené, ale v praxi se často setkávám se závislými selecty, a u nich by mohlo být jednodušší jejich řešení.

Patrik Votoček
Člen | 2221
+
0
-

nějak to tu zase umřelo a tak to připomínám… je nějaký progress davide??? (ohledně nových formulářů si totiž připadám jako když mě bylo 6 a čekal jsme na vánoce… :-D – čti jsem kua hodně nedočkavý)

Dero
Člen | 2
+
0
-

Davide, dá se zhruba určit nejzazší termín, kdy by nové formuláře mohly být představeny? Mám tu hned dva projekty, které by z nových funkcí zřejmě dokázaly vytěžit maximum.

Informace typu „do týdne to zřejmě nebude“ nebo podobně neurčitá úplně stačí. :)

paranoiq
Člen | 392
+
0
-

Nette by možná ocenilo nějakou no-whining licenci :P

David Grudl
Nette Core | 8222
+
0
-

Dero napsal(a):

Davide, dá se zhruba určit nejzazší termín?

Brzy :-)

Někdo čeká na formuláře, někdo na dokumentaci, někdo na snippety, někdo na DI a já dělám to, na co je zrovna nálada a inspirace. A tento týden jsem měl náladu psací :-)

Cifro
Člen | 245
+
0
-

Nette je vyvýjané formou MDD – Mood-driven development :)))

hrach
Člen | 1838
+
0
-

David: Brzy :-)

Koukám, že Martin Cohen (pro neznalé: Intype) ti je inspiraci ;)

Dero
Člen | 2
+
0
-

David Grudl napsal(a):

Brzy :-)

Někdo čeká na formuláře, někdo na dokumentaci, někdo na snippety, někdo na DI a já dělám to, na co je zrovna nálada a inspirace. A tento týden jsem měl náladu psací :-)

Dík. :)

westrem
Člen | 398
+
0
-

Padlo tu vela zaujimavych napadov, dockame sa aj nejakeho feedbacku z Davidovej strany, co povazuje za rozumne a vhodne na zaradenie do Nette a co naopak v blizkej buducnosti priamo sucastou Nette formularov nebude?

jtousek
Člen | 951
+
0
-

Už je to měsíc od „Nejvyšší čas dát do Nette ty nové formuláře.“ a přes 2 týdny od „Brzy :-)“.

Řeknu vám, že pokud jde o napětí tak nové Nette formuláře dalece překonávají všechny filmy a knihy, které jsem kdy viděl a četl. ;-)

Tharos
Člen | 1030
+
0
-

Já už jsem čekání vzdal. Můj soukromý odhad termínu vydání je zhruba září 2011 – což je v Nette terminologii stále ještě „brzy“. :)

o5
Člen | 416
+
0
-

Asi tak..Proste jednou to bude. Spravny programator by nemel pouzivat slovo termin.

arron
Člen | 464
+
0
-

Nakonec Ti, kteri po WebExpu 2010 tvrdili, ze Nette 2 stejne pred WebExpem 2011 nebude (a kterym jsme se potaji smali, jaci jsou to skeptici), budou mit pravdu…chjo…

Ped
Člen | 64
+
0
-

Kluci, ze vy nehrajete Live for speed? :) Tam rekli ze asi vydaji nove aute na vanoce 2008… a pak jim to trochu nevyslo a objevili se nejake dalsi potize ktere potrebovali vyresit driv nez to vydaji.. a je 3/2011 a jeste porad se ceka… :D (a projekt neni mrtvy, alespon ne u tvurcu)

Jan Tvrdík
Nette guru | 2595
+
0
-

Když už jsi načal ten herní off-toic, tak bych řekl, že David vydává novinky v Nette stejně jako Blizzard Entertainment svoje hry. To znamená, že úmyslně ignoruje všechny termíny a věc vydá, až s ní bude sám spokojený.

Blizzard je mezi fanoušky notoricky známý pro zcela markantní a pravidelné nedodržování ohlášených dat vydání svých her. Na druhou stranu téměř všechny hry od této společnosti se stávají velmi populárními a legendárními klasikami.

(via Wikipedia)
https://cs.wikipedia.org/…ntertainment

Aurielle
Člen | 1281
+
0
-

Přidám trochu svého off-topicu, data vydání se dají přirovnávat i k Valve Time.

paranoiq
Člen | 392
+
0
-

a třeba David oznámí trojku :]

na1k
Člen | 288
+
0
-

gmvasek, v tom případě se pohybujeme mezi „in over two months“ a „in six months“ :-|

mcmatak
Člen | 504
+
0
-

no ono je to cool u her a u iphonu nebo dalších apple hračiček, na které se člověk těší a jsou pro zábavu, takže super marketing, ale tam, kde se tím někdo živí :(

Honza Marek
Člen | 1664
+
0
-

Možná by stálo za to lehce zrefaktorovat řádek 338 v BaseControl. Kdo ho plně nepochopí, nedokáže plnohodnotně vyrábět vlastní formulářové prvky. Já už snad chápu, co to má dělat, ale kdybych to měl upravit, potřeboval bych nad tím další hodiny koumat :-D

Ondřej Mirtes
Člen | 1536
+
0
-

Já ho nepochopil, ale vlastní komponenty mi fungují :o)