Üdv mindenkinek!
D7 modul fejlesztésével most próbálkozom először. A gondom az, hogy a hook_form_alter()-ben elhelyezett drupal_add_js('modulom' => $tomb), 'setting') összeadódva kerül át a javascript oldalra:
modulom.module:
... function modulom_form_alter(&$form, &$form_state, $form_id) { drupal_add_js(drupal_get_path('module', 'modulom') .'/teszt.js'); $tomb = array('egy', 'kettő', 'három'); drupal_add_js(array("modulom"=>array("valami"=>$tomb)),'setting'); drupal_set_message("hook_form_alter"); } ...
A teszt.js ():
$().ready(function(){ ... alert(Drupal.settings.modulom.valami); ... });
eredmény:
- alert ablakban: egy, kettő, három, egy, kettő, három
- Drupal üzenet:
- hook_form_alter
- hook_form_alter
A Drupal üzenet szerint a modulom_form_alter kétszer fut le és a drupal_add_js még egyszer hozzáadja a már létező 'valami' változót. Nem lehet ellenőrizni valahogy a PHP oldalról, hogy létezik-e már egy bizonyos Drupal.settings.modulom.valami a js oldalon?
Köszönet
Drupal verzió:
Fórum:
Ellenorizhetsz egy static
Ellenorizhetsz egy static valtozot, vagy csak adott form id-re futtasd le a kodot.
Mit jelent, hogy...
..."ellenőrizhetsz egy static változót"?
Fox Mulder
function modulom_form_alter(&
Köszönöm, ez bejött
Ám mégsem értem a dolgot. Ha ez van a hook_form_FORM_ID_alter()-ben
a JS oldalon:
az ablakban ez van: 6
Még ha kétszer fut is le a drupal_add_js(), miért fűzi hozzá, miért nem cseréli (persze ugyanarra, de az is csere).
Fox Mulder
Ha megnezed a drupal_add_js
Ha megnezed a drupal_add_js kodjat: http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_ad... akkor lathatod, hogy siman csak hozzatolja a settings kodot a tombhoz:
Igaz is!
A forráskódról megfeledkeztem :(
Köszönöm a segítséget.
Fox Mulder
biztos kint van egy másik űrlap is
értelem szerűen arra is fut a hook_form_alter. ahogy mondja snufkin, használd a hook_form_FORM_ID_alter hurkot.
-
clear: both;
Azt használom
A hook_form_FORM_ID_alter-t használom, csak ügyesen elhallgattam...
Fox Mulder
Nem mindig jó
D7 űrlap kezelésében nem mindig fut le a *_form_aler().
Vannak olyan esetek amikor a gyorstárból szedi elő az űrlap definíciót ($form).
Azért inkább a #attached részbe érdemes pakolni a szükséges CSS+JS dolgokat.
PHP tömb/object átalakításnál JS tömbre/object/json, a numerikus kulcsok nem íródnak felül, hanem új tömböt alkotnak.
JS megfelelője valójában ez lesz:
Drupal.settings.mymodule = [['egy', 'kettő']];
De ez nem biztos. Ha jól emlékszem D6-ban így volt.