Form validate

MrPrise képe

Valaki tud egy leírást arról hogy hogyan lehet olyan formot létrehozni ami ellenőrzni is megadott értékeket?
Nem kellene külön preview gomb hanem elég a submit és ha hibás akkor írja ki mi a gond, a beírt értékek maradjanak meg. Láttam ezt már más oldalon ill moduleban is, de nem értem a logikáját :-(
Alapban van preview és submit gomb is. Nem értem hogy mi történik ha a previewet nyomom, mi "hívódik" meg a moduleban és mi ha a submitot nyomom?
Köszi

Fórum: 
csonti képe

Csináld te a formot, php kódként szúrd be az oldalba és a kódban intézd el az ellenőrzést úgy, hogy a szkript saját magát hívja meg. Persze biztosan van elegánsabb is, írja meg, aki tudja.

0
0
MrPrise képe

Hm. Igazad lehet... Csak ha adottak a dolgok akkor az ember azt szeretné használni... Erről tényleg nem nagyon van írva Drupal kézikönyvben sem vagy csak én nem találom?

0
0
MrPrise képe

Formokról
Találtam itt 1 kis infot erről:
http://drupal.org/node/8423

Itt azt kérdezi az illető hogy mi történik ha a form action attribute-ja "/?q=user/edit".
Azt a választ kapta, hogy a hook_link()-et nézze meg:
http://drupaldocs.org/api/4.6/function/hook_link

Itt az API docból az example node-ból a hook_link implementációja:
http://drupaldocs.org/api/4.6/function/node_example_link

Tehát ha jól értem, hogy akkor a form action-jének megadsz vmit és a module-odban a hook_link-kel megcsinálod azt ami ezt fogja kezelni. Ez hasznos info ha a formot magunk alakítjuk ki, ahogy azt csonti javasolta. Eredetileg én nem így akartam ezt megoldani, hanem a node alap beviteli form-jára szeretnék további mezőket hozzáadni és azokat kezelni. Pontosabb vannak új mezőim, de az adatok vizsgálata (validáció) nem működik rendesen (nem értem ;-)) Még keresem...

0
0
Anonymous képe

Mert ha tartalmakat akarsz tárolni akkor neked az új tartalom típus létrehozására lesz szükséged.
http://drupaldocs.org/api/4.6/file/contributions/docs/developer/examples...

itt egy jó kis leírás, igaz angolul.
Ha nem akkor is érdemes megismerned a működését.
Tehát...

Egy bevitel során meghívódik a [b]validate[/b], majd új tartalomnál az [b]insert[/b], már meglévő tartalomnál az [b]update[/b].
preview gombnyomás esetén nem hívódik meg sem az insert sem az update.
Tehát ellenőrzés (validate) mindig van. Próbáld ki. Ha nem töltesz ki egy mezőt mindegy, hogy a preview vagy submit gombokat nyomod meg mindig hibaüzenetet kapsz.

Ha nem a kérdésedre válaszoltam, kérlek tedd fel érthetőbben.

pp

0
0
MrPrise képe

Igen, az új tartalom típus kész van, a felvitel, lekérdezés működik csak a validáció nem (de szép magyar szó...) ill nem úgy ahogy én szeretném.

0
0
pp képe

Azért ha választ akarsz kicsit bővebben kell fogalmaznod. A hozzászólásom nem segített? Megnézted a linket amit küldtem?

pp

0
0
MrPrise képe

Nem igazán mélyültem még el azóta benne, csak gyűjtöm az infokat ;-)
A node_example-t néztem már, az alapján csináltam a sajátot. Amit írtál azt már tudtam (validate,update,insert). Valamiért úgy fest, hogy sem a previewnél sem a submitnál nem hajtódik végre nekem a validate. Ugyanis simán enged elküldeni teljesen üres űrlapot és ha a previewet nyomom akkor sem írja ki hogy gáz van, pedig van pár required mező. Szerintem én izéltem el valamit, gondolom nem úgy csináltam vmit ahogy kellene, még nem tudom mi az. Lehet ha rájövök már meg is oldottam a gondot.
Közben azonban keresgéltem a másik módszerrel kapcsolatban és amit találtam hasznosnak gondoltam, ezért írtam ide is meg, hátha segít vkinek.

0
0
pp képe

Tudod több szem többet lát. Másrészt ha valaki rákeres majd valamikor erre a problémára esetleg ugyan ezt a hibát követi el és nem kell kérdést se feltennie, hisz itt lesz a válasz.
Egy ilyen fórum csupán egyik célja az, hogy egy ember problémáján segítsen. A másik sokkal fontosabb, hogy dokumentálja a probálkozást/problémát és a megoldást. Ezáltal bővül a közösség tudása. Innen merítesz Te is, illenék valamit visszacsepegtetni.

pp

0
0
MrPrise képe

Az én kódom ugyanaz mint az example node kódja (a node neve más) kiegészítve pár textfield-del. Viszont a hiba tényleg az én készülékemben van, ami ez esetben a Drupal-omat jelenti. Vmiért nemcsak a saját node típusomnál hanem pl a page-nél sem működik az ellenőrzés. Hiába vannak az űrlapon required elemek üresen is megeszi.
Gondolom ez a kézzel patchelgetés eredménye.
Már gondoltam arra, hogy újra felrakom egy másik könyvtárba aztán összehasonlítom mit változtattam az engine-en.

0
0
MrPrise képe

Na, az összehasonlítás sikerrel zárult.
4.6.3-as Drupal-t használok.
Az történt, hogy az alap node.module-ból kiszedtem a title formon való bekérő részt, mert nekem nem felel meg a title név ezért a module-om fogja ezt is intézni.
Ez gyk a node.module-ban lévő node_form()-ból pár sor kitörlését jelenti.
1330-as sor:

$output .= form_textfield(t('Title'), 'title', $edit->title, 60, 128, NULL, NULL, TRUE);

A sor kitörlésének a következménye hogy minden más module ami a node-ot használja (azaz minden ami vmi tartalmat kezel pl blog, forum, stb) bele kell ezt a sort írni, mint ahogy a saját modulomba is tettem, különben nem fogjuk tudni megadni.
Mivel ezután ezt mi intézzük, ezért a node.module-ból ki kell szedni a validate részt is a node_validate()-ből (1189 sor):
  // Validate the title field.
  if (isset($node->title)) {
    if (trim($node->title) == '') {
      form_set_error('title', t('You have to specify a title.'));
    }
  }

A fentiekből következik, hogy miután ezt eltávolítottuk az olyan tartalmak amelyeknél csak a title megadása kötelező ezután gond nélkül beküldhetők.
Itt követtem el a hibát, ugyanis én nem adtam hozzá a saját validate hook-omhoz az eredeti helyről kitörölt, fenti node title ellenőrző részt és mivel más mezőt még nem ellenőrzött akkor a module-om így üres formot is elfogadott. Ha beleraktam volna a module-omba már a saját mezők ellenőrzését, akkor hamarabb rájöttem volna hogy hiányzik a title ellenőrzése.
Mivel ezt az ellenőrzést ugyanúgy nem raktam bele a többi module-ba sem, ezért tudtam az azok által kezelt tartalmakat is felvinni üresen mint a sajátomat.
Ja és egy "apró" észrevétel ami lehet másoknak egyértelmű, de nekem nem volt az... Attól hogy a form_textfield()-nél megadjuk hogy az required legyen, csak annyi fog történni hogy a piros csillog ott lesz a labeljénél. Ettől még ha nem rakunk a validate-be ellenőrzést elfogadja a formot akkor is ha üres! Ez is bekavart nekem. Megnéztem, látom hogy required, de mégis elfogadja ha üres akkor is. Ettől úgy éreztem, hogy felülkerekedett rajtam a Drupal (persze igazából a figyelmetlenségem volt ennek a valódi oka).
A drupal.org-on lévő handbook (http://drupaldocs.org/api/4.6/function/form_textarea) azt írja a form_textfield()-nél, hogy
$required Whether the user must enter some text in the field.

Ez nekem azt jelenti, hogy a Drupal gondoskodik arról, hogy a felhasználónak tényleg be kelljen írnia oda vmit magyarán megvizsgálja az adott mezőt.

Na, de rájöttem, most már megy. Megyek én is aludni ;-)

Kevés önszivátást kívánok mindenkinek! ;-)

0
0
chx képe

Általában azt műveltük 4,.6 alatt hogy az adott oldal callback-je ellenőrzött $_POST['op']-ra. Ha preview/submit akkor szépen meghívta a validate rutint. Ha ez sikerült, akkor mentette a formot, ha nem vagy a $_POST még üres, akkor kiírta a formot.

Ez 4.7-ben rendkívüli módon megváltozott. Ja igen: ha patcheled a node modulet, onanntól egyedül vagy...

0
0