JavaScript Libraries betöltése head szekcióba.

HF leon képe

Van arra lehetőség drupal 8-abn, hogy egy modul szerkesztésekor, mikor a libraries.yml-ben felveszem a javascript library-t, akkor valahogy arra utasítsam a drupal-t, hogy ne az oldal végéhez fűzze a js fájlt (ahova általában fűzi a js fájlokat), hanem a head részben töltse be rögtön az oldal elején?

Drupal verzió: 
junkuncz képe

0
0
HF leon képe

Egy kérdésem lenne: az is megoldható, hogy csak egyes js fájlok töltődjenek be a head részben és mások ne?

Ha jól értelmezem itt minden a fejrészbe lesz betöltve. Egy olyan modult írok, ahol a legtöbb js tökéletesen megfelel, ha az alapértelmezett helyen töltődik be, sőt az a jó, de egy js fájlt feltétlenül a head részben kellene betöltenem, hogy rendben működjön.

0
0
junkuncz képe

A témád info fájljában tudsz definiálni több library-t is a "libraries" kulcs alá pl.
info.yml:

  1. libraries:
  2. - theme_name/global-styling
  3. - theme_name/header-styling

libraries.yml:

  1. global-styling:
  2. ...
  3. header-styling:
  4. version: VERSION
  5. header: true
  6. js:
  7. js/your_header.js: {}

Nem próbáltam ki, de elméletileg működnie kell.

2
0
HF leon képe

Adaptáltam a megoldást a modulra és működik.

Még nem próbáltam, de témából (sminkből) felül lehet bírálni egy modul létező js fájlját?

Mármint, hogy csak az adott modul aktivitása esetén működjön és ne töltődjön be.

Valamint eszembe jutott egy új kérdés, bár ez most nem fontos. Mi van akkor, ha több window.onload, vagy window.onresize eseményre lenne szükségem eltérő modulokban.

Gondolok itt az alábbi esetre:

first.js :
...
window.onload= function fone{}

second.js:
...
window.onload=function ftwo{}

Ekkor csak az egyik működik. Van arra lehetőség, hogy mind a kettő lefusson az esemény bekövetkeztekor? Úgy, hogy előre nem lehet tudni, hogy csak az első, vagy csak a második, netán mindegyik fájl betöltésre kerül.

0
0
junkuncz képe

Igen!

Van több megoldás is rá, attól függ mi a célod vele.
Téma .info fájljában tudsz használni olyan kulcsot, hogy libraries-override:

  1. libraries-override:
  2. contextual/drupal.contextual-links:
  3. js:
  4. component:
  5. /core/themes/seven/js/mobile.install.js: false

Érdemes ezt a részt végigfutnod, mert tud még pár ügyes dolgot: https://www.drupal.org/docs/8/theming-drupal-8/adding-stylesheets-css-an...

Másik megoldás az, hogy preprocess() függvényt használsz a témád .theme fájljában.

  1. theme_name_preprocess_page(&$variables) {
  2. variables['#attached']['library'][] = .... Itt találod a js-re vonatkozó dolgokat, de fejből meg nem mondom pontosan hol.
  3. }

A js event-es kérdésben sajnos nem vagyok kompetens.

3
0
HF leon képe

Így gyomláltam ki az alapértelmezett css-eket. A js-ek egy részét is hasonlóan tiltottam le, de a felülírós rész áttanulmányozom, mert a cél az, hogy egy adott modulhoz szükséges js fájl csak, akkor töltődjön be, ha a modul is aktív.

Köszönöm a választ!

Az eseményes rész feldobom külön. Egyedileg írt oldalnál változó függvényt alkalmaztam, de ez a megoldás nehezen menedzselhető drupal alatt. Ezért keresem a drupal-hoz legjobb megoldást, mert akadnak olyan esetek, amikor az oldal betöltődése után kell lefutnia egy szkriptnek, vagy a böngésző átméretezésekor. Az pedig könnyedén előfordulhat, hogy egyes modulok esetén is szükségem lehet erre.

0
0