AJAX vagyis AJAJ a Drupal hatosban
Majd két évvel ezelőtt jelent meg egy rövidke írásom, ami bemutatta, hogy AJAXos megoldással hogyan lehet dinamikusan legördülő listákat töltögetni. Elérkezett hát az idő, hogy elkészítsem a mintamodul hatos verzióját. Lényeges változások a menu hook függvényben, a űrlapot előállító függvényben és a JavaScript fájlban történtek. No meg természetesen az info fájlt is át kellett írni. Teszteljétek.
Házi Feladat:
A böngészők megjegyzik, ha egy lista valahogy ki volt választva (back gomb) ekkor a program hibásan működik, hisz a második listában olyan elemek vannak amik nem lehetnének. Oldjuk meg a problémát.
| Csatolmány | Méret |
|---|---|
| formproba.zip | 1.64 KB |
Címkék:
Kipróbáltam, nem működött
Kipróbáltam, nem működött localhost-on. A js fájlban a JSON kérés feltételezi, hogy a webhely a webszerver gyökerében található. Az alábbi folt javítja:
Köszi, javítottam. pp
Köszi, javítottam.
pp
Hmm, ez erdekes. A kod
Hmm, ez erdekes. A kod alapjan azt vartam, hogy meg fog jelenni az "An illegal choice has been detected. Please contact the site administrator." mivel a form keszitesekor csak az alma, korte, barack van a masodik listaban. Tehat ha valami mast valasztok akkor ezt a hibat kellene kapnom, mivel a tobbi elemet js-el valtoztatod.
Szoval egy gyors debug, es azt latom, hogy a submitnal (gomb katt es *_submit kozott) a form ujraepul, tehat a masodik listat ujraszamolja mielott a validacio megtortenne.. De nem latok semmi extra kodot ami a form ujraepitest kerne, ezek szerint ezt a Drupal teszi meg, csak nem ertem miert..
Pedig ez egyszerű. A Drupal
Pedig ez egyszerű. A Drupal ilyen sorrendben hívogatja a függvényeket: formproba_form, formproba_form_validate (ez ugye nincsen), formproba_form_submit. Én a formproba_form függvényben adom vissza a formot de úgy, hogy ha jött adat, akkor a megfelelő listát töltöm be. Ugyan azt a listát, amit a kliens oldalon is töltögetem. A Drupal tehát pont olyan formot kap, mint amit én a kliens oldalon összekattintgattam. Lásd kódot:
Picit átverem ugye a Drupalt de hát ez van.
Én sajnos viszont megkapom
Én sajnos viszont megkapom azt a hibaüzenetet, és nem tudom, hogy miért, mindent ugyanúgy csináltam. A különbség talán annyi, hogy nem szimpla formot küldök be, hanem nodet. Ha a probaformot használom, akkor az működik. Hogyan lehetne a hibaüzenettől megszabadulni, vagy esetleg kikapcsolni?
Légyszi a részletes kérdést a
Légyszi a részletes kérdést a drupal.hu megfelelő fórumába tedd fel. Itt és ilyen formán nehéz lesz segíteni.
Köszi
pp
HF megoldás: ---
HF megoldás:
Akkor most már beírhatod az
Akkor most már beírhatod az ötöst. Egyébként kerestek szegedi drupalos arcokat és ezt írtam rólad:
Zsemlye Ernő (több DUG-on is tartott előadást, meglátásom szerint jó drupalos szakember)
pp
Kedves István! Köszönöm
Kedves István!
Köszönöm szépen a munkádat. Sokat segítettél ilyen kezdő embereknek is, mint én.
Lenne egy kérdésem:
Tanulás gyanánt belefejlesztettem a function formproba_get_select2($id) függvénybe. Majdnem jól működik, csak az a baj vele, hogy az alapértelmezett az 1-es id-vel készíti el a SELECTET.
Pl kilistázom a városokat. 1 Budapest, 2 Debrecen. Akkor a függvény Debrecenre hajtódik végre. Tehát nekem a tömb feltöltése 0 indexel kezdődik azért lehet a baj. Kérdésem az lenne, hogy hogyan tudom befolyásolni azt, hogy a 0 indexel működjön a SELECT?
Köszönöm szépen.
A Pasquallenak írt válaszom
A Pasquallenak írt válaszom kódjának 4. sora végén ne 1 legyen a függvény paramétere, hanem 0.
pp
Köszönöm szépen a gyors
Köszönöm szépen a gyors válaszod. Természetesen ezt megtettem, ez volt az első. Ekkor a következő figyelmeztetést adja:
warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\xampp\drupal-6.9\includes\form.inc on line 1420.
Ekkor igaz, hogy a nekem az első város lesz az alapértelmezett. De továbbra is a második városra fut le feltöltés.
Valami miatt nem úgy adja nekem vissza a paramétereket. Holott az adatbázisba Budapest ID 1-es, Debrecen 2-es (ehhez nincs is hozzárendelve semmi se)
Ha az adatbázisba átírom, hogy a VID (város azonosító) Budapestre 0-a, akkor jó műkszik. Eltünik a figyelmeztetés is.
function formproba_get_select2($id) {
$queryResults = db_query("SELECT DISTINCT KER FROM kozteruletek.kozterulet WHERE 1 AND VID= '$id' ORDER BY KER");
while($line = db_fetch_object($queryResults))
{
$keruletek[]= $line->KER;
};
if (empty ($keruletek)){
return false;
}
else
return $keruletek;
}
Több ponton is hibás a
Több ponton is hibás a kódod!
Miért nem kéred le a vid értéket is?
Miért nem írsz normális Drupal szabványnak megfelelő SQL mondatot?
Miért nem használod a vid-et tömb indexként? (honnan tudná szerencsétlen Drupal mi az index, ha nem adod át neki? :D )
Köszönöm szépen a
Köszönöm szépen a válaszod!
Még kezdő vagyok, szabad időmben foglalkozom a Drupallal.
Jó a kód, amit küldtél, csak a $link helyett $line kell, szerintem.
Az érdekelne engem, hogy a multiselect hogyan működik? Tehát, ha 2 vagy több kerületet választok ki, akkor, hogy tudom megjeleníteni a hozzá tartozó utcákat? Erre tudnál valami támpontot adni, hogy hogyan induljak el. Köszönöm szépen!
Kedves István! Lenne még egy
Kedves István!
Lenne még egy kérdésem. Azt szeretném megtudni, hogy a javascript-et hogyan lehet úgy átírni, hogy nem az adott SELECT-ben levő elemek indexét adja vissza, hanem magam az értékét? Sajnos nem látom sehol. Tehát, ha kiválasztok egy elemet a listából, akkor a script ezt az elemet (stringet) adja át a function formproba_data($id) függvénynek.
Köszönöm szépen a segítséget.
Erre ugye nincs szükség, ha a
Erre ugye nincs szükség, ha a fenti hozzászólásomat elolvasod. Az a gond, hogy nem adod át az azonosítókat ezért kapod azt vissza, hogy az adott elem hányadik a sorban. (amivel ugye nem tudsz mit kezdeni.)
pp
Sziasztok Arra rájöttem hogy
Sziasztok
Arra rájöttem hogy a javascriptben a this.val()-el visszatudom kapni, a kiválasztott elemeket. Ide kellene egy ciklus, amin a javascript JSON részét lefuttatja a megfelelő értékkel. Arra kérnék segítséget, hogy hol lehet megnézni azt, hogy a this-nek milyen függvényei vannak? Ki szeretném nyerni hány elem van benne és ciklusban lefuttatni a JSON részt. Ha tudna valaki ebben segíteni azt is megköszönném.
Elvileg van this.length - ami
Elvileg van this.length - ami elvileg visszaadja az elemeinek számát. De hogy konkrétan nálad mi is ez a this, azt meg tudod nézni pl. egy firebuggal.
Szia! szeretném megcsinálni
Szia!
szeretném megcsinálni ugyanezt, csak hook_form_alter-rel, ekkor viszont a
#options részének első feltétele mintha soha nem lenne igaz, így a "Nem érvényes választást talált a rendszer." hibaüzenetet kapom. Elképzelhető, hogy ebben az esetben nem a hook_form_alter-be kellene írni ezt az ellenőrzést, hanem valamilyen validáló függvénybe?
Válaszodat előre is köszönöm.
Hozzászólás