Üdv!
Van egy db_select() lekérdezés és ennek az eredményét szépen formázom majd.
Pl. egy kép elé teszem... stb.
Hogy ne kelljen az egész oldalt újra betölteni, kellene valami js-es megoldás a db_select() lefuttatására, a friss adatok lekérdezésére.
Tehát csak az adatbázis lekérdezést kellene adott időközönként frissíteni, az egész oldalt nem.
Ilyesmire gondoltam, csak itt az onchange JS eseményre fut le a DB query.
Ha jól gondolom, akkor pl. a Js-nek a setInterval()-al csak a Drupal-os útvonalat kell meghívnia? Pl. query/keresem/%
A query/keresem/% a mymodule.module menü definíciója szerint pl. csak az értéket adja vissza.
Más (szebb, jobb) lehetőség is van?
Drupal verzió:
Fórum:
Egyelőre ez a legjobb megoldás, vagy js cache technika másolása
Szia.
Igen, egyelőre Drupal7-ben ez a legjobb megoldás, amit én is találtam. Bár én nem vagyok Drupal7 fejlesztő, hanem .NET-es és Symfony2-vel foglalkoztam, ezért érdekel a Drupal8.
Én is rákerestem erre a témára, és nincs is modul, ami eszembe volt az a "WebSocket", de az is dev-es verzióban éred el.
Ami lehetne csinálni, nem tudom, hogy kivetelezhető-e. Az egy fajta "cache technika másolása". Ezt a technikát AngularJS performencia növelésnél láttam.
Ahelyett, hogy Ajax kérést küldenél a szerver felé, már előre lekéred azokat az adatokat a db_select-tel, és amikor kirendeled az oldalt, akkor ezek az adatok is lemennek, (nem cask a néhány darab, ami a kezdetekor kell neked, és aztán ajax hívással hozod be a többit, hanem már az elején az összes) és ezt az adat listát elmented egy javascript változóba, egy listába. És bizonyos időközönként nem setInterval-lal, hanem setTimeOut-tal megjeleníted őket.
Például 10 másodpercenként a lista első 3 elemét, aztán újra 10 másodperc múlva a lista 4-6. elemét, aztán 6-9 és így tovább.
Ennek előnye, hogy nincs hálozat terhelés / elérési kísérlet. Ez főleg kis teljesítményű mobiloknál lehet hasznos.
Persze ez attól is függ, hogy miért kell pontosan ajax kérés, mert ha tényleg csak megjeleníteni akarsz adatokat, amiket nem kell feldolgoztatni a szerverrel. És az oldal kirendelésnél ez nem jelent jelentősebb több adatot, akkor én ezt a megközelítést választanám.
Az időintervallumot
Az időintervallumot dinamikusan is szeretném állítani majd valahogy.
Tehát pl. valaki 3mp-re, valaki 10mp-re tudja állítani.
Egy adatbázis táblából csak adatokat szeretnék megjeleníteni.
Kb. ilyesmi adatok (value,timestamp):
12.0059 2015-06-30 15:20:45
js - jquery
Addig jutottam, hogy ezt a menüt, funkciót kellene frissíteni:
A tree.js fájl:
A böngészőben a konzol naplóban látszódik a "Log interval!" szöveg 10mp-kénti megjelenése (ez csak tesztnek van bent), tehát az időzítés működik.
Az edit-htmlstr elemet ( $form['decoration']['htmlstr'] ) kellene frissítenem a js-el, ami nem frissül. Egyébként a fában csak stringek vannak, pl.: 23, 2015-05-12 12:08:11
A mymodule.module fájlba tettem egy callback-et ez alapján:
Az apache webszerver logjában látszódik, hogy meghívódik az url 10mp-enként. Ha kézzel meghívom a böngészőben az url-t: /mymodule/query/treerefresh
akkor szépen meg is jelenik az eredmény a drupal render nélkül, pontosan azzal a tartalommal, amivel frissülnie kellene a form elemnek.
A js-ben lehet a hiba, hogy nem frissül az tree a Drupal form-on?
megoldva
Megvan:
Lemaradt a '#' karakter a form id-ben:
De ez a js kód is működik: