Seite 2 von 2 ErsteErste 12
Ergebnis 41 bis 60 von 60

Thema: Einbindung von Javascript jQuery in Contao 4 - Anleitung

  1. #41
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Schnippel Beitrag anzeigen
    Weiter oben wurde von Andreas beschrieben, daß man mit
    PHP-Code:
    $GLOBALS['TL_BODY'][] = 'string'
    Ich habe das oben nochmal verbessert. Mit String war ein HTML-String gemeint - <script>...
    https://community.contao.org/de/show...l=1#post453044


    Zitat Zitat von Schnippel Beitrag anzeigen
    PHP-Code:
    <?php
    ...
    $GLOBALS['TL_BODY'][] = 'files/js/navi_dropdown_click.js|static';
    ?>
    Dies geht nicht. Einen Pfad kannst du nur bei TL_JAVASCRIPT benutzen. Siehe auch oben in dem verbesserten Thread


    Zitat Zitat von Schnippel Beitrag anzeigen
    die Ausführung eh erst passiert, wenn alles geladen wurde. Oder?
    Hatte ich glaube ich oben erklärt, dass sich das ready Event nicht auf "alles" bezieht. Nur auf den DOM.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  2. #42
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Dann wird dein Script sofort ausgeführt, wenn das Navigationsmodul im DOM bereitsteht.
    Spooky hat natürlich Recht, aber du brauchst dir deswegen IMHO kein Bein auszureißen. In der Praxis reicht meisten der Aufruf nach DOM ready und wird das meistens ans Ende von <body> oder in einer eigenen JS-Datei, welche entweder im HEAD oder am Ende von <body> geladen wird reingebracht.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  3. #43
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Das kann man pauschal nicht sagen. In seinem Fall würde es durchaus Sinn machen das so zu machen. Bedient der User die Navigation schon bevor der DOM fertig aufgebaut ist (was durchaus hin und wieder passieren kann), wird das Klick Event nicht abgefangen und der Link direkt aufgerufen, anstatt das Submenu ausgefahren.

  4. #44
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard

    Hi Leute,

    wie lässt sich bei einer DropDown per KLICK - Navigation das geöffnete Submenü wieder schließen, wenn man irgendwo auf der Seite klickt, ohne dabei einen Link klicken zu müssen?

    Unbenannt-7.png

    Das DEMO ist hier zu sehen: http://html-tuts.com/demo/jquery-dro...nu/click-fade/

    Was eben fehlt ist die Möglichkeit des Schließens bei klick, auch wenn kein Link angeklickt wird.

  5. #45
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Falscher Thread, siehe Thread-Titel.

    Sowas fragst du auch am besten den Entwickler des JS-Menüs, welches du da im Einsatz hast. Als Ansatz kann ich dir schon mal sagen, dass du wohl einen Click-Event-Listener auf den gewünschten Bereich aufsetzen musst und wenn dann geklickt wid darauf reagieren musst.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  6. #46
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard

    Hi Leute,
    ich brauche nochmal Eure Hilfe, um paar Dinge zu verstehen.

    Ich habe folgendes gemacht:

    Schritt 1: Eine Datei mit dem Namen scrolling.js angelegt, die folgenden Code beinhaltet:

    Code:
    (function($) { 
    	$(document).ready(function(){
    	  $(window).scroll(function() {
    		if ($(document).scrollTop() > 50) {
    		  $("body").addClass("down");
    		} else {
    		  $("body").removeClass("down");
    		}
    	  });
    	});
    })(jQuery);
    Diese dient dazu, daß beim Scrollen der Body die Klasse .down erhält. Über das CSS werden dann bestimmte Dinge umgestaltet, sobald .down im Body steht.



    Schritt 2: Template mit dem Namen j_scrolling.html5 angelegt, das folgenden Inhalte hat:

    PHP-Code:
    <?php
    $GLOBALS
    ['TL_JAVASCRIPT'][] = 'files/js/scrolling.js';
    ?>

    Schritt 3: im BA > Seitenlayout dieses Template bei jQuery aktivert.

    Das Ganze funktioniert auch.

    Jetzt zu meinen Fragen:

    Frage 1:
    Was bedeutet im Template genau das hier ROT-Markierte mit dem TL_JAVASCRIPT ?
    Code:
    <?php
    $GLOBALS['TL_JAVASCRIPT'][] = 'files/js/scrolling.js';
    ?>
    Frage 2:
    Im Quelltext ist das Script zu sehen im HEAD-Bereich. Wenn ich das hier im Forum richtig verstanden habe, dann sollte man
    nicht ganz so wichtige Scripte wegen der Ladegeschwindigkeit nicht im HEAD-Bereich, sondern im BODY unten unterbringen.

    Wie bekomme ich das Ganze nun in den BODY runter? Was muß ich da wo genau eintragen?

    Frage 3:
    Wozu dient nochmal genau |static ?

    Wenn ich im Template dies mit einfüge, so wie hier...
    Code:
    <?php
    $GLOBALS['TL_JAVASCRIPT'][] = 'files/js/scrolling.js|static';
    ?>
    ... dann ist das Script weder im HEAD noch im BODY zu sehen. Was passiert da im Hintergrund?
    Geändert von Schnippel (29.12.2017 um 14:37 Uhr)

  7. #47
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    PHP-Code:
    $GLOBALS['TL_JAVASCRIPT'
    Das ist ein PHP-Array. Du kannst es testen mit
    PHP-Code:
    print_r($GLOBALS['TL_JAVASCRIPT']); 
    Mit dem "[]" übergibst du diesem Array eine neue Variable. In deinem Fall den Pfad zu einer JS-Datei als String.

    Mit dem Flag "|static" teilst du mit, dass Contao diese Datei über den Combiner mit in die eine große JS-Datei packen soll, welche im FE aus dem assets/-Ordner geladen wird.

    Die Templates j_, moo_ und js_ werden über das fe_-Template am Ende des BODYs ausgegeben. Du kannst dort also z.B. direkt den Aufruf einer Datei in HTML reinschreiben.

    j_scrolling.html5:
    HTML-Code:
    <script src="files/js/scrolling.js"></script>
    Befindet man sich in einem Template, welches nicht bereits am Ende des BODYs ausgegeben wird, dann kann man diesen HTML-Code auch über TL_BODY dort hin bekommen:
    PHP-Code:
    $GLOBALS['TL_BODY'][] = '<script src="files/js/scrolling.js"></script>'
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  8. #48
    Alter Contao-Hase
    Registriert seit
    12.10.2010.
    Beiträge
    1.026

    Standard

    Mit dem Flag "|static" teilst du mit, dass Contao diese Datei über den Combiner mit in die eine große JS-Datei packen soll, welche im FE aus dem assets/-Ordner geladen wird.
    Und diese JS-Datei steht dann am Ende von BODY? Ich seh da in der Quelltext-Ansicht aber nix...

    Unbenannt-1.jpg

  9. #49
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Nein, das was du in TL_BODY einfügst steht am Ende des body.

  10. #50
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Hallo,

    ich stehe gerade etwas auf dem Schlauch.
    Wie binde ich denn folgendes Script im Body ein?

    Code:
    <script>
    	var mymap = L.map("mapid").setView([<?= $this->latitude ?>, <?= $this->longitude ?>], 13);
    
    	L.tileLayer("https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw", {
    		maxZoom: 18,
    		id: "mapbox.streets"
    	}).addTo(mymap);
    	
    	L.marker([<?= $this->latitude ?>, <?= $this->longitude ?>]).addTo(mymap);
    </script>
    Das Problem sind die PHP Variablen im Script. Mit $GLOBALS['TL_BODY'][] = funktioniert das nicht.

  11. #51
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Du fügst das in ein Template ein, erzeugst dir das Template in PHP, parst es und fügst es dann in den body ein.

  12. #52
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Sorry, ich kann Dir noch nicht ganz folgen.

    Ich habe mir z.B. ein eigenes Inhaltselement mit dem Rocksolid Custom Elements gebastelt und würde nun gerne in diesem Template (rsce_meinelement.html) den JS Code einbauen. Das funktioniert auch, doch der JS Code steht so mitten i Quelltext und nicht unten am Body.

    Mit
    Code:
    $GLOBALS['TL_BODY'][] = '<script>...</script>';
    funktioniert es nicht, weil ich ja PHP Variablen im Script einsetzen möchte.

    Wie würde also Dein "Trick" aussehen?

  13. #53
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    du erzeugst dir eine neue Datei namens /templates/my_script.html5, fügst dort deinen JavaScript Code ein, lädst das Template in deinem RSCE Template und fügst es in den Body ein:
    PHP-Code:
    $template = new \Contao\FrontendTemplate('my_script');
    $template->setData();
    $GLOBALS['TL_BODY'][] = $template->parse(); 

  14. #54
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Aber wie kann ich dann z.B. die Variable
    Code:
    <?= $this->latitude ?>
    an mein Script übergeben, wenn dieses ja unter my_script.html5 ausgelagert ist?
    Das ist mir noch nicht ganz klar.
    Wird das dann mit
    Code:
    $template->setData(…);
    gemacht? Was kommt da genau zwischen die Klammern?

  15. #55
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Also ich habe es nach Deiner Anleitung umgesetzt. In meiner script_trackingcode.html steht folgendes:
    Code:
    <script>
    	var mymap = L.map('mapid').setView([<?= $this->latitude; ?>, <?= $this->longitude; ?>], 13);
    
    	L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
    		maxZoom: 18,
    		id: 'mapbox.streets'
    	}).addTo(mymap);
    	
    	L.marker([0, 0]).addTo(mymap);
    </script>
    und mit meinem rsce Template folgendes:

    Code:
    <?php
    $template = new \Contao\FrontendTemplate('script_trackingcode'); 
    $template->setData($this->arrData = $arrData); 
    $GLOBALS['TL_BODY'][] = $template->parse();
    ?>
    Die Werte der beiden Variablen '<?= $this->latitude; ?>' und '<?= $this->longitude; ?>' werden nicht übergeben.
    Was mache ich falsch?

  16. #56
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Zitat Zitat von dirksche Beitrag anzeigen
    Code:
    $template->setData($this->arrData = $arrData);
    Wieso übergibst Du in setData() eine Zuweisung als Parameter? Du solltest den Datenarray übergeben, in dem Du vorher Deine Daten gespeichert hat.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  17. #57
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Und $arrData ist vermutlich leer?

  18. #58
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Und wie übergebe ich die Werte in $arrData? So?:
    Code:
    $template->setData($this->arrData = $this->latitude);

  19. #59
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Das Contao Forum sollte eigentlich keine grundsätzliche PHP Lernhilfe sein, aber ok

    Mit setData wäre es so:
    PHP-Code:
    $template->setData([
      
    'latitude' => $this->latitude,
      

    ]); 
    Du kannst es auch so machen:
    PHP-Code:
    $template->latitude $this->latitude;
    … 
    Brauchst du das JavaScript überhaupt am Ende des <body>? Wenn du damit eine Google Map erzeugst, wo das RSCE Template auch den Container ausgibt, schadet es ja nicht, wenn das <script> gleich direkt danach kommt.

  20. #60
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Ahhh, Danke Dir Spooky für diesen kleinen PHP Exkurs.
    Du hast mit den Tag gerettet... mal wieder ;-)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •