Üdv!
Van egy saját modul, ami SQL SELECT parancs eredményét jeleníti meg html table-ben.
src/Controller/MyModuleController.php:
// ... $rows = []; foreach ($result as $row) { $rows[] = ['data' => (array) $row]; } // Build the table $build = [ '#markup' => '<p>' . t('The data from server.') . '</p>', ]; $build['mymodule_table'] = [ '#theme' => 'table', '#header' => $header, '#rows' => $rows, ]; // add lib, js $build['mymodule_table']['#attached']['library'][] = 'mymodule/mymodule.query.data'; return $build; }
mymodule.libraries.yml:
mymodule.query.data: version: 1.x header: true js: js/my.js: {}
A my.js tartalma egyelőre teszt jelleggel:
alert("JS works!");
mymodule.routing.yml:
mymodule.query.data: path: '/mymodule/query/data' defaults: _controller: 'Drupal\mymodule\Controller\MyModuleController::query_data' _title: 'MyModule Query Data' requirements: _permission: 'access content'
De nem adja hozzá az routing-hoz (mymodule.query.data) a my.js-t.
Mi kell még hozzá?
(D7 alatt a drupal_add_js() működött, D8 nem engedi már. Nem ajánlott..(?) )
Drupal verzió:
Fórum:
működik az alert
Működik az alert!
Már csak azt kell megoldanom, hogy ne az egész oldal frissüljön, hanem csak a html table tartalma.
Refresh
a MyModuleController.php-ban módosítottam:
A my.js tartalma:
Ez szépen működik is. D7 alatt volt egy elegáns megoldásom a .js-re:
D7 alatt működött egyébként. Ez adott időközönként (2000ms) frissíti a "mymodule-query-div" div tartalmát, ami egy SQL eredményét adja vissza html table-ben. Majdnem ugyanaz a kódja a "/mymodule/query/data/refresh"-nek, mint a "/mymodule/query/data", de csak a tiszta html table tartalom kerül bele.
A FF konzolján ezt látom:
ReferenceError: jQuery is not defined
TypeError: drupalSettings.user is undefined
Mi lenne a szép megoldás D8 alatt? A D8 nem használja a jquery-t, ha jól látom és ezért nem fut le?
Nincs lezárva a div
Üdv!
Dudás József
jquery not defined
Köszönöm!
Ez valóban lemaradt, de ettől még nem működik.
A FF konzolban továbbra is ott van, hogy "jquery not defined"!
A jquery-vel van baja, nem jquery-t használ a D8. Gondolom...
upd.:
Lehet hogy megpróbálom átírni sima JS-re.
https://gist.github.com/joyrexus/7307312
vanilla JS
Majdnem jó. A JS működik.
my.js:
De a query_data_refresh() fv. (a ....Controller.php-ban) a teljes oldalt adja vissza, nem csak a HTML TABLE-t (tehát a div-be mégegyszer bekerül az egész oldal tartalma. :)).
Mit rontok el? Hogyan lehetne megadni, hogy csak a html table legyen a responseText-ben?
upd.:
próbáltam így:
De így meg üres lett a div.
Response
Ha jól olvasom, akkor Response class-t kellene használni.
De a logban:
Uncaught PHP Exception UnexpectedValueException: "The Response content must be a string or object implementing __toString(), "array" given."
Hogyan kellene használnom?
Működik, response
Működik! :)
A response használata:
A drupal 8 elég erősen alapoz a jquery-re.
Egész pontosan a 3-as verzióra. Könyvtárak js fájlok megadása esetén jelöld, hogy függ a jquery-től és akkor biztos betölti a jquery-t is, amikor a js-ed. Valamint, ha olyan jquery modul kell, amely nem része a drupal 8 alap rendszerének, akkor azt is be kell tölteni.