javascript aus libraries überschreiben
Eingetragen von Bavramor (130)
am 07.02.2016 - 00:38 Uhr in
am 07.02.2016 - 00:38 Uhr in
Hallo,
ich würde gerne eine javascript Datei aus libraries überschreiben. Leider werden über die javascript Datei auch css klassen generiert, die ich überschreiben will. Nun habe ich bereits ein kleines Modul gebastelt, was genau diese Überschreibung umsetzen soll. Leider bekomme ich folgende Fehlermeldung:
Notice: Undefined index: scope in drupal_get_js() (line 4371 of /home/bavramor/data/Webdesign/Webseiten/anniann-aktuell/includes/common.inc).
Notice: Undefined index: scope in drupal_get_js() (line 4371 of /home/bavramor/data/Webdesign/Webseiten/anniann-aktuell/includes/common.inc).
Mein Code sieht folgendermaßen aus:
<?php
/**
* Path to friendly_register.js override. I have added <span class="icon_check"></span>
* into default /js/friendly_register.js in order to make better css sprint.
*/
function override_js_fullcalendar_js_alter(&$javascript) {
dpm($javascript);
$javascript[drupal_get_path('module', 'libraries') . '/fullcalendar/fullcalendar.js']['data'] = drupal_get_path('module', 'override_js_fullcalendar') . '/js/fullcalendar-patched.js';
dpm(drupal_get_path('module', 'libraries') . '/fullcalendar/fullcalendar.js');
dpm(drupal_get_path('module', 'override_js_fullcalendar') . '/js/fullcalendar-patched.js');
}
Ich wäre für jede Hilfe dankbar.
Gruß Bavra
- Anmelden oder Registrieren um Kommentare zu schreiben
Ändere doch einfach die Datei
am 07.02.2016 - 01:18 Uhr
Ändere doch einfach die Datei in Libraries und mach dir vorher eine Kopie.
die Kopie musst nacher auch machen
am 07.02.2016 - 08:31 Uhr
damit du bei einer eventuellen Aktualisierung deine Änderung wieder einspielen kannst.
Zunächst mal denke ich, dass
am 08.02.2016 - 10:00 Uhr
Zunächst mal denke ich, dass dein Weg auf jeden Fall richtig ist. Änderungen direkt in einer Library vorzunehmen ist sicherlich nicht optimal.
Wo genau liegt fullcalendar.js - im Ordner sites/all/libraries? Dann wirst Du die Datei dort mit
<?php
drupal_get_path('module', 'libraries') . '/fullcalendar/fullcalendar.js']['data']
?>
Schau Dir den Output von dpm($javascript) genau an und setze dann den Pfad zunächst mal genau wie in der Ausgabe gegeben ohne drupal_get_path(). Hier erstmal schauen ob das funktioniert.
<?php
$javascript['full/path/to/calendar/fullcalendar.js']['data'] = ..
?>
Erstmal vielen Dank Stefan
am 09.02.2016 - 01:37 Uhr
Erstmal vielen Dank Stefan. So hat es tatsächlich funktioniert. Die Fehlermeldung kommt leider immer noch. Ist ja nur eine "notice" und wird nur im Backend angezeigt, schön ist aber anders. :-) Ich wollte die Datei überschreiben, sonst ist die Datei ja bei jedem Update kaputt.
Gruß Bavra
Setze nochmal <?php if
am 09.02.2016 - 08:20 Uhr
Setze nochmal
<?php
if (isset($javascript['full/path/to/calendar/fullcalendar.js'])) {
$javascript['full/path/to/calendar/fullcalendar.js']['data'] = ..
}
?>
außen rum, vielleicht geht die Meldung dann weg.
Das mit der Datei direkt
am 09.02.2016 - 08:38 Uhr
Das mit der Datei direkt überschreiben ist nur eine Notlösung. Die Dateien in Libraries werden nicht automatisch aktualisiert. Da besteht normalerweise nicht die Gefahr, dass du ausversehen die Datei überschreibst.
Hallo Bavra,diese Notice
am 11.02.2016 - 11:49 Uhr
Hallo Bavra,
diese Notice
Notice: Undefined index: scope in drupal_get_js() (line 4371 of /home/bavramor/data/Webdesign/Webseiten/anniann-aktuell/includes/common.inc).
kommt daher dass, dass drupal add js nicht weiss wo es das js einfügen soll:
https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_js_alter/7
gib dem Array den Parameter scope mit (header/footer), dann sollte das verschwinden.
Gruss
Robert
PS:
Noch etwas.
Du solltest im hook auch prüfen ob die fullcalender.js überhaupt geladen wurden und dann Deinen Patch laden,
denn so hängst Du immer das js an. Ob es nun gebraucht wird oder nicht.
Stefan oben hat das schon gezeigt.
Hallo nochmal, folgendes wäre
am 11.02.2016 - 13:18 Uhr
Hallo nochmal,
folgendes wäre auch noch zu überlegen:
K.A. was Du vorhast, aber da Du eine library überschreiben möchtest,
wäre der folgende Hook evtl. sinnvoller:
https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_library_alter/7
MfG