Form megjelenítése darabonként és a custom submit handler lekezelése

eFeS képe

Sziasztok,

Elvesztem a Form API-ban, segítséget kérek...

Van egy függvényem / legyen modulnev_tartalom() /, ami mindenféle kapott érték alapján ad vissza HTML tartalmat egy Drupal oldalnak. Ebben a függvényben kellene kiraknom egy formot a megkapott paraméterek alapján. Az egyes úrlap mezők nem egyben jelennének meg, hanem egy nagyobb táblázat több pontján szétszórtan, attól függően, hogy pl. szerkesztheti-e az adott tartalmat a user vagy sem. Az űrlapnak egyedi submit handlere is kell, hogy legyen.

Ezek alapján a következőt követtem el eddig:
- function modulnev_ujform() visszaadja az űrlapot
- function modulnev_ujform_submit($form_id, $form_value) { ... } kezelné le a submitot
- a fenti modulnev_tartalom() függvényben pedig ezeket használom:
$form = drupal_retrieve_form('modulnev_ujform', $form_state);
drupal_prepare_form('modulnev_ujform', $form, $form_state);
...
drupal_render($form['elemnev']) -el pedig kirakom az egyes elemeket

Minden szépen megjelenik, egyetlen bajom van: a submit handler nem hívódik meg. Az elnevezés rendben van, a Drupal For Firebugban látom, hogy berakja az adott nevű függvényt a #submit tömbbe - de nem hivódik meg mégsem.

A dolog dühítő oldala az, hogyha a formot a drupal_get_form() függvénnyel teszem ki, ami megjelenités szempontjából nem jó, mert egy helyen rakja ki az űrlap összes elemét - akkor MEGHIVJA a custom submit handlert!!

Ez alapján a kérdésem: hogy tudom elérni, hogy egy elemenként kirakott űrlapnak meghivódjon a custom submit handlere?

Előre is köszönöm mindenki segítségét!

eFeS

Drupal verzió: 
Fórum: 
pp képe

drupal_get_form() függvénnyel rakd ki a formot, a megjelenését pedig olyanra sminkeled amilyenre akarod. Form API quick startot nézted?

pp

0
0
eFeS képe

A már kirakott űrlap variálása nem probléma, form_alter()-el szétszedtem meg összeraktam már jópár tartalomtipus admin formján lévő CCK-s tartalmat.

az itteni problémám ettől különböző. Valami olyasmit szeretnék, hogy fut egy ciklus 1-23-ig, minden futási ciklus egy-egy táblázat sort rak ki, és mondjuk bekerül a sorokba az 5., 12., 17. és 23. futási sorban egy-egy checkbox a legenerált form-ból.

A drupal_get_form() egy _egész_ űrlapot tesz ki. A From API quickstart is azt a módszert ajánlja, amit én használok, ha bonyolultabb markupba kell betenni a formot:

  $output = '';
  $output .= drupal_render($form['name']);
  $output .= '<div class="foo">';
  $output .= drupal_render($form['access']);
  $output .= '<div class="bar">';
  $output .= drupal_render($form['details']);
  $output .= '</div></div>';
  $output .= drupal_render($form);

Ez eddig rendben van, az űrlap megjelenik, rendesen van felépítve - de nem hívódik meg a custom submit handlere. Ha _minden_ változatlanul marad, és csak annyit variálok, hogy drupal_get_form()-al rakom egyben az űrlapot a lap végére, nem pedig a elemenként a drupal_render()-el, akkor meghivja a submit handlert is, amit külön irtam hozzá. Ezt nem értem, hogy ez miért van...

0
0

---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu

pp képe

mit nem értesz? :D

drupal_render a nevében is benne van, hogy lerajzolja amit megadsz neki. Ez nem a varázsceruza, hogy rajzolsz egy ajtót a falra rá egy kilincset és már működik is. :D

A drupal_get_form fogja a mechanizmust beindítani, meghívni többek között a submit handlert is. Ha csak úgy felfirkálgatod a drupal_renderrel a formelemeket nem fog működni a dolog.

a mintát amit idéztél ott az egy smink függvényben van benne.

Fontos, hogy ha van egy oldalad amiben a szöveg közé szeretnéd rakni a form elemeket, akkor ki kell fordítanod a gondolkodásodat és a form elemek köré kell raknod a szöveget a form smink függvényében hogy működjön a dolog.

pp

0
0
eFeS képe

...hiszen nem túlságosan bíztató hangvételű a segítség szövegezése sem. Nem varázsceruzát akartam használni.

Azt nem értettem, hogyha minden eleme megvan egy formnak objektum szinten, ugyanaz a $form['#submit'][] létrejön és be van állítva rendesen egyik és másik módon generálva a formot, akkor miért csak az egyik módon hajlandó lefutni az a rothadt submit függvény.

Szerintem ez nem annyira baromarcú kérdés, hogy "varázsceruzázni" kéne érte, még ha nevető fejjel is a végén. Annak, aki évek óta ebben él, fejlesztett már hozzá több raklapnyi cuccot, annak egyértelmű lehet sok minden. De ennél kevesebb Drupal-fejlesztői előélettel azért bőségesen lehet anonáliákat találni a rendszerben.

Az iránymutatást köszönöm, a gondolkodásom kifordítása Drupal módra fog következni.

Azért remélem, a Tanárúrkérem-eseket nem igy igazítod útba...

0
0

---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu

pp képe

Nézd meg: drupal_get_form

pp

0
0