form api redirect named anchor

mhncsa képe

Sziasztok!

Van egy page típusú oldalam. Benne 2 db, a drupal_get_form()-al beágyazott form, amit egy modul rak össze. (Ez egy eléggé magas/hosszú oldal. A közepén és az alján található 2 form. Ugyanaz mindkettő, de különböző form id-val.)

2 problémát kellett volna megoldam:
- a form minden mezője kötelező, viszont ha egy vagy több üres, akkor csak annyi hibaüzenet legyen, hogy "minden adat megadása kötelező"
és ez az üzenet csak egyszer és közvetlenül a form felett jelenjen meg.

- ha hibásan van kitöltve a form vagy hiáynzik valamelyik adat, akkor újratöltés után ugorjon ahhoz form-hoz, amelyiket tölttö épp az user.

A következőképpen próbáltam megoldani:

Minden mezőnél beállítottam, hogy nem kötelező adat. A validate függvényben saját kóddal ellenőrzöm, hogy meg van e adva mindegyik. Ha bármelyik üres, akkor egy session változóba elmentem a hibaüzenetet:
$_SESSION['form_error'] = t('Kérjük töltsön ki minden mezőt!');

Egy $_SESSION['submitted_form'] változóban elmentem, hogy melyik form validálásnál volt a hiba.

A form-ban a legelején van egy value típusú mező, amiben ezt az üzenetet megjelenítem, ha létezik.

A submit függvényben ismét ellenőrzöm, hogy minden mező ki van e töltve, és ha nincs, akkor onnan újra a form-ra irányítom az oldalt:
$form_state['redirect'] = array('node/1/', NULL,$_SESSION['submitted_form'],301);

A $_SESSION['submitted_form'] értéke form1 vagy form2. Az átirányítás eredménye meg elvileg www.weboldalom.hu/#form1 vagy /#form2

A fent leírt módszer jól működik ff-ban és chrome-ba, viszont opera,ie,safari böngészőkben az átirányítás után eltűnik az url-ből a #formx rész, ezért ezekben a böngészőkben az oldal teteje látszódik miután hibásan töltötte ki a form-ot.

Ráadásul a mivel a form_set_error()-t nem használom, ezért az oldal tetején még hibaüzenet sem jelenik meg, azaz így a user észre sem veszi, hogy vmit rosszul töltött ki.

Szval a kérdés, hogy ebben a 3 böngészőben ez miért nem működik?

Vagy vki tud e más megoldást a fenti 2 problémára?
1. egy db hibaüzenet a form felett megjelenítve.
2. hibásan kitöltött form beküldés esetén ugorjon az oldal megfelelő részére

A segítséget előre is köszönöm!

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
Sweetchuck képe

Submit függvényben már nem kell ellenőrizni semmit se, mert az összes ellenőrzés és form_set_error() hívás már megtörtént a *_validate() függvényben. Ezt így kell és pont.

Az nem tűnt fel, hogy amikor (szerinted) hibás az űrlap kitöltése és sikerült az átirányítás, akkor eltűnik minden adat az űrlapból, és lehet elölről kezdeni a kitöltést?

A $form_state['redirect']-nek úgy kell átadni a paramétereket mint az url() függvénynek. Tehát a fragment rész is megadható. De szerintem nem ez a helyes megközelítése a problémának.

Próbáld meg azt, hogy a $form['#action']-t helyesen kitöltöd. (Normál esetben ezt nem kell piszkálni) 'mymodule/path#mymodule-form'. Ebben szintén segítségedre lehet az url() függvény.

Az hogy ne az oldal tetején legyenek a hiba üzenetek, az már egy trükkösebb probléma.
Még egyiket sem próbáltam, de van rá modul. Több is.
http://drupal.org/project/inline_messages
http://drupal.org/project/ife

2
0
mhncsa képe

köszönöm a tippet!
az http://drupal.org/project/inline_messages module megoldotta a problémát. főleg, hogy oda is görgeti az oldalt, ahol a form van, így a anchor-okkal sem kellett vacakolni.

0
0