it-swarm.com.de

Wie kann ich js-Skripte vor </ body> einfügen?

Ich weiß, dass diese Frage erneut gestellt wurde, aber ich habe ihre Lösung ausprobiert und sie funktioniert nicht. Bitte bewerten Sie sie nicht herunter. Ich habe ein Authentifizierungsskript (auth.js), das vor dem Tag platziert werden muss, aber selbst wenn ich die im Thema angebotene Lösung anwende, wird es weiterhin in der Headerdatei anstelle der Textdatei hinzugefügt. Hier ist der vorhandene Code. Ich benutze Gantry5:

$document=JFactory::getDocument();
$document->addScript('/templates/rt_kraken/js/auth.js', 'text/javascript',false,true);

Da ich ein Anfänger bin, erkläre dies bitte gründlich, da ich hier immer noch nicht den Ruf habe, hahahha zu kommentieren

Auch hier der Link auf den vorherigen Beitrag, ich versuche, genau das gleiche wie sie zu erreichen: Lade Javascript-Skript vor </ body> schließendem Tag

2
Fotis Emery

Bei Gantry 5 Erweiterungen> Vorlagen> Stile> Seiteneinstellungen

Dann setzen Sie einfach das gewünschte Skript, zB für mich:

<script type="text/javascript" src="/templates/rt_kraken/js/auth.js"></script>

Vielen Dank aber @jamesgarrett. Ich werde Ihren Ansatz auf jeden Fall auf fortgeschrittenere Themen anwenden.

0
Fotis Emery

Ich denke, es gibt mindestens 4 Möglichkeiten.

  • In Gantry5-Vorlagen gehen Sie zu Erweiterung> Vorlagen, wählen Sie Ihre Vorlage aus, und auf der Registerkarte Seiteneinstellungen befindet sich ein Textfeld mit der Bezeichnung "Vor </ body>". Dies ist auf allen Frontend-Seiten enthalten. Wenn Sie es also nur an einigen Stellen benötigen, können Sie eine Vorlagenkontur zuweisen.
  • Verwenden Sie Javascript, um das Skript-Tag beim Laden der Seite einzufügen. Funktioniert möglicherweise abhängig von Ihrem Authentifizierungsskript.
  • Fügen Sie es direkt in die Vorlage ein. Dies wäre in Ordnung für diejenigen, die ihre eigene Vorlage ausführen, aber das trifft nicht auf Sie zu, aber ich möchte gründlich sein.
  • Ersetzen Sie den gerenderten HTML-Code in einem System-Plugin durch einen String. Siehe Code unten. Ich gehe davon aus, dass Sie Joomla 3.8 verwenden und dass Sie den Auth-Code auf allen Frontend-HTML-Seiten einfügen möchten. Wenn letzteres nicht zutrifft, fügen Sie dem Plugin nach Bedarf weitere Bedingungen hinzu.

Fallstricke

Plugins werden in der Reihenfolge ausgeführt, in der sie bestellt wurden. Wenn also ein anderes Plugin dieselbe Technik verwendet, kann es Code nach Ihrem einfügen. Auch wenn Sie den System-Seiten-Cache verwenden, muss Ihr Plugin davor sein, damit Ihr Skript eingefügt wird, bevor der HTML-Code zwischengespeichert wird. Hoffentlich macht beides Sinn und trifft nicht auf Ihre Situation zu.

Code für ein System-Plugin

Der PHP-Code für ein geeignetes System-Plugin wäre z. /plugins/system/scriptbeforebody/scriptbeforebody.php

<?php 
defined('_JEXEC') or die('Restricted access');

class plgSystemScriptbeforebody extends JPlugin {

  public function onAfterRender()
  {
      $app = JFactory::getApplication();

      // only insert the script in the frontend
      if ($app->isClient('site')) {

          // retrieve all the response as an html string
          $html = $app->getBody();

          // replace the closing body tag with your scripts appending to the closing body tag
          $scripts = [
              '/templates/rt_kraken/js/auth.js',
              '/templates/rt_kraken/js/something-else.js',
          ];

          $tags = "";
          foreach($scripts as $s){
              $tags .= '<script src="' . $s . '"></script>';
          }

          $html = str_replace('</body>',$tags . '</body>',$html);

          // override the original response
          $app->setBody($html);
        }
    }
}

und das begleitende Manifest wäre z. /plugins/system/scriptbeforebody/scriptbeforebody.php

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.8" type="plugin" group="system">
    <name>Script Before Closing Body Tag</name>
    <creationDate>Dec 2017</creationDate>
    <version>1.0</version>
    <description>Hardcoded insertion of script tag into html response</description>
    <files>
        <filename plugin="scriptbeforebody">scriptbeforebody.php</filename>
    </files>
</extension>

Um entweder beide Zip-Dateien zu installieren und das reguläre Installationsprogramm für die Joomla-Erweiterung zu verwenden, oder laden Sie sie in die angegebenen Pfade hoch und installieren Sie sie mit dem Tool Administration> Erweiterungen> Verwalten> Erkennen.

4
jamesgarrett

Sie können ein neues benutzerdefiniertes HTML-Modul erstellen und mit dem Code-Editor den Text hinzufügen

<script src="/templates/rt_kraken/js/auth.js"></script>

Dann setzen Sie es in eine Modulposition und deaktivieren Sie den Titel. Der Code wird an der Stelle platziert, an der das Modul angezeigt wird. Einige Vorlagen haben Positionen, die für nicht inhaltliche Daten wie Google Analytics reserviert sind. Dies ist eine gute Wahl für dieses Modul.

0
Dan Cogliano

Wenn Sie möchten, dass das Skript nur für einen (oder mehrere) Artikel ausgeführt wird, und wenn Sie Gantry5 Framework verwenden, gehen Sie zu Komponenten, Gliederungen, erstellen Sie eine neue Gliederung mit der Standardgliederung, gehen Sie zu Seiteneinstellungen, fügen Sie das Javascript in die Textattribute ein, im Vorher-Fenster den Artikeln dann die neue Gliederung in Zuordnungen zugewiesen.

0
Vast