Nové formuláře a dotazník
- David Grudl
- Nette Core | 8222
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
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
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
Tiez sa pridam:
- 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
- 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
- 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)
- zaviest rozhrania pre pravidla
IRules
aIRule
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?)
- Filip Procházka
- Moderator | 4668
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)
- dakota
- Člen | 148
- 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
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.
- Patrik Votoček
- Člen | 2221
- Dynamické formuláře (pokud vím je to vyřešeno)
- nějaké inteligentnější toggle (řešení neznám ani mě žádné nenapadlo :-( )
- Ondřej Mirtes
- Člen | 1536
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 URLhodnota=on
, aleklíč=hodnota
). Možná bude problém to, že pak budu chtít přidat několik checkboxů se stejnýmname
, ale různýmvalue
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 :)
- gawan
- Člen | 110
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
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
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
- Honza Marek
- Člen | 1664
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
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.
- Peetee
- Člen | 75
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)
- jansfabik
- Člen | 193
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
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 :)
- Filip Procházka
- Moderator | 4668
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
- Patrik Votoček
- Člen | 2221
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ý)
- David Grudl
- Nette Core | 8222
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í :-)
- Ped
- Člen | 64
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
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.
- Aurielle
- Člen | 1281
Přidám trochu svého off-topicu, data vydání se dají přirovnávat i k Valve Time.
- Honza Marek
- Člen | 1664
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