hook_form_alter hibás mentés után nem töltődik be

TommyChris képe

Írtam egy saját modult, ami a hook_form_alter() kapcsán betölt egy Javascriptet, ami megdizájnolja az űrlapot.

A problémám, hogy a felhasználói adatok űrlapon, ha valami adatot hibásan írok be (pl. a két jelszó nem egyezik meg), majd így akarom elmenteni, akkor a visszadobott űrlapra ezen hook_form_alter() függvény nem hívódik meg.

<?php
/**
 * Implements hook_form_alter()
 *
 * Vannak .js-ek, amiket nem kell mindig betölteni, csak az adott űrlapon. Itt ezeket töltjük be.
 */
function mymodule_form_alter(&$form, &$form_state, $form_id)
{
  //die($form_id);
  $path = drupal_get_path('module', 'mymodule');
 
  switch ($form_id)
  {
    case "user_profile_form":
      drupal_add_js($path .'/user.js', array('scope' => 'footer', 'group' => JS_THEME));
      drupal_add_js($path .'/user--edit.js', array('scope' => 'footer', 'group' => JS_THEME));
      break;
 
  }
}
?>

Tehát, amikor megnyitom az űrlapot, akkor lefutnak a javascriptek. El akarom menteni az űrlapot, de valami hibát vétek, akkor visszajön az űrlap, error message-ben szól, hogy nem egyeznek a jelszavak, viszont a fenti javascriptek nem futottak le.

Próbáltam, hogy az első ilyen kör után, betettem a modul elejére egy die($form_id)-t, majd F5-el frissítettem, s meglepő módon, lefutott az oldal, nem die()-olta le, azaz nem futatta le a hook_form_alter()-emet.

Valakinek valami ötlet, hogy ez miért van?

Drupal verzió: 
TommyChris képe

És persze a modulok fejlesztése fórumba szántam, csak félrekattintottam :(

0
0
Bálint képe

Validálás után már a gyorstárazott űrlapot kapod, tehát nem fut le még egyszer a hook_form_alter(). Használd az #attached attribútumot.

0
0
TommyChris képe

Köszönöm, ez tényleg megoldás volt.

Leírom alább a kódot, mert egy jó órát eltöltöttem még vele, míg kitaláltam, hogy melyik hook-ba kell tenni (de szólj, ha tévedtem volna)!

Tehát végülis maradt a dolog a hook_form_alter()-ban, csak nem drupal_add_js()-t kellett hasnzálni, hanem a $form['#attached'] funkcióját.

<?php
function hook_form_alter(&$form, &$form_state, $form_id)
{
  $path = drupal_get_path('module', 'mymodule');
  switch ($form_id)
  {
    case "user_profile_form":
      drupal_add_js($path .'/user.js', array('scope' => 'footer', 'group' => JS_THEME));
      drupal_add_js($path .'/user--edit.js', array('scope' => 'footer', 'group' => JS_THEME));
      break;
  }
}
?>    

helyett ezt kellett írni

<?php
function hook_form_alter(&$form, &$form_state, $form_id)
{
  $path = drupal_get_path('module', 'mymodule');
  switch ($form_id)
  {
    case "user_profile_form":
      $form['#attached']['js'] = array
      (
 
        $path .'/user.js' => array
        (
          'scope' => 'footer',
          'group' => JS_THEME
        ),
        $path .'/user--edit.js' => array
        (
          'scope' => 'footer',
          'group' => JS_THEME
        )
 
      );
      break;
  }
}
?>
</cod>
0
0