Javascript Zeile in Cassiopeia Template einfügen

  • Joomla Version
    4.4.1
    PHP Version
    PHP 8.1.x
    Hoster
    Lokal

    Hallo,

    nutze das Cassiopeia Template und habe mir ein Child-Template erstellt.
    Zur Abfrage einer externen Datei benötige ich einen Javascript Eintrag.

    Code
    <script language="javascript" type="text/javascript" src="https://xxxxxxxx.com/info.js"></script>


    Ich habe diese Zeile immer in die index.php des Templates in den "head" Bereich eingetragen.
    Mit jedem Update wird das aber überschrieben und ich muss das wieder einfügen.

    Im Child-Template gibt es ja den Ordner "js".
    Kann ich diese Javascript Zeile nicht irgendwie dort einfügen, sodass der Eintrag auch bei einem Joomla Update erhalten bleibt?

    Habe schon etwas recherchiert.
    So wie ich das verstehe benötige ich eine user.js in dem Ordner, welche ich auch erstellt habe.
    Füge ich dort obige Zeile ein, passiert aber leider gar nichts :(

    Wie müsste denn der Code in der user.cs aussehen, damit dann die Javascript Datei abgerufen wird?

    DANKE :)

  • Ich weiß nicht, inwieweit in der index.php bei den Joomla Updates so Änderungen anfallen, aber die würden dann ja nicht berücksichtigt werden, was vielleicht auch nicht so gut ist?

    Anfangs habe ich das aber schonmal versucht.
    Habe die index.php nach "media/templates/site/cassiopeia_eigen" kopiert, das hat aber nicht geklappt, oder zumindest wurde die Datei nicht abgerufen :(
    Daher hätte ich gedacht, das eine user.js Sinnvoller wäre, aber klappt eben irgendwie auch nicht.
    Bei der user.css klappt das ja auch wunderbar das die eigenen Änderungen eingetragen werden, soll das bei der user.js nicht auch so sein?
    LG

  • Wenn es egal ist, dass alle Stile die Zeile im Frontend eingesetzt bekommen: https://github.com/GHSVS-de/pl…sertwhatwhereghsvs#readme

    Dann brauchst keine neue index.php.

    Ein PlugIn wäre natürlich eine einfache Option.
    Wenn möglich, wollte ich es aber wenn möglich vermeiden irgendwelche zusätzlichen Plugins zu nutzen.
    Das sind dann oft, speziell bei Updates usw... Fehlerquellen an die man nicht mehr denkt ;)
    Trotzdem Danke für den Hinweis :)

  • Code
    <script language="javascript" type="text/javascript" src="https://xxxxxxxx.com/info.js"></script>

    ... So wie ich das verstehe benötige ich eine user.js in dem Ordner, welche ich auch erstellt habe.
    Füge ich dort obige Zeile ein, passiert aber leider gar nichts...

    Das kann so nicht funktionieren weil es sich um HTML-Code handelt den du nicht in einer JS-Datei ausführen kannst.


    Du kannst aber z.B. eine joomla.asset.json-Datei im Cassiopeia-Child-Template erstellen mit identischem Inhalt wie die joomla.asset.json-Datei im Cassiopeia-Core-Template und änderst diese Datei am Ende nach dem "fontawesome-Abschnitt" entsprechend wie das nachfolgende Muster korrekt ab:


    Dann mußt du in der index.php des Cassiopeia-Child-Template auch eine Zeile ergänzen wie nachfolgend als Beispiel nach der ->useScript('template.user')


    Code
        ->useScript('template.user')
        ->useScript('example.com')

    wobei example.com in beiden Dateien natürlich identisch sein muß.

  • ...So wie ich das verstehe benötige ich eine user.js in dem Ordner, welche ich auch erstellt habe...

    Wie müsste denn der Code in der user.cs aussehen, damit dann die Javascript Datei abgerufen wird?

    Weitere alternative anstatt #2 oder #7 oder #10 wäre eventuell z.B. in der user.js nachfolgender Code:


    Code
    var exampleSkript = document.createElement('script');
    exampleSkript.type = 'text/javascript';
    exampleSkript.src = 'https://example.com/info.js';
    document.getElementsByTagName('head')[0].appendChild(exampleSkript);


    Alternative 3 wäre eventuell z.B. in der user.js folgender Code:


    Code
    document.addEventListener("DOMContentLoaded", function(){
    var exampleSkript = document.createElement('script');
    exampleSkript.type = 'text/javascript';
    exampleSkript.src = 'https://example.com/info.js';
    document.getElementsByTagName('head')[0].appendChild(exampleSkript);
    })

    Damit dürfte das Script dann wohl recht weit unten im "head"-Bereich landen und wartet wohl auf den Aufbau des DOM.


    Übrigens wenn du im Code body anstelle von head einträgst landet das im body-Bereich falls erforderlich.


    Ich bin aber nur ein Laie und folglich alles ohne Gewähr sowie einen schönen 2.Advent und viele Wege führen nach Rom...

  • Eventuell das externe Script asynchron Laden durch das ergänzen in den Codes in #11 mit:


    Code
    exampleSkript.async = true; 

    Siehe diesbezüglich z.B. auch:


    Javascript defer und async – einbinden und ausführen
    Das script-Tag darf sowohl im head als auch an beliebiger Stelle des HTML-Dokuments stehen, aber Javascript wird heute vorzugsweise ans Ende der HTML-Seite…
    www.mediaevent.de


    Ich bin aber nur ein Laie und folglich alles ohne Gewähr sowie einen schönen 3.Advent und viele Wege führen nach Rom...