Form hibák a form-ba

sajt képe

Elég rég óta idegesített már, hogy a drupal a hibaüzeneteket mindig az oldal elején jeleníti meg, nem pedig ott, ahol a hiba keletkezett, vagyis a form elem előtt. Most egy kicsit utánanéztem, és chx kolléga segítségével sikerült is megtalálni a megoldást. Ez pedig nem más, mint a theme_form_element felülírása.

Ugyebár, a template.php file-ban kell csinalni egy függvényt, themeneve_form_element($element, $value) néven, ebbe kell bemásolni ugyanazt a kódot, mint amit a leírásban is látunk. Én ebbe szúrtam bele a

$output .= ">\n";

//után a következő kódot:

if ($error = form_get_error($element)) {
$output .= ''.$error.'';
$eid = array_search($error, $_SESSION['messages']['error']);
unset($_SESSION['messages']['error'][$eid]);
if (empty( $_SESSION['messages']['error'])) {
unset($_SESSION['messages']['error']);
}
}

A form_get_error függvény egy stringet ad vissza, a hibaüzenettel. Ha ebben van valami, (tehát hiba volt) akkor beteszük a kimenetbe. Én ezt itt egy div-el és a form-error osztállyal oldottam meg, így egyszerűen tudunk stílust is rendelni hozzá.

Ezután kikeressük a $_SESSION['messages']['error'] tömbböl ezt a hibát és kitöröljük, ugyanis az ebben a tömbben tárolt elemek fognak megjelenni a felső részben. Utána megnézzük, hogy ez a tömb üres-e, és ha igen, akkor az egészet kitöröljük, mert ha a tömb létezik, akkor a divet mindenképpen kiírja a drupal

Felmerülhet a kérdés, hogy miért nem töröljük valahol az egész tömböt? Azért, mert nemcsak a formok adhatnak vissza hibaüzenetet, és a tömb törlésével ezek a hibaüzenetek is elszállnának.