web-dev-qa-db-fra.com

Comment puis-je insérer des scripts js avant </ body>

Je sais que cette question a été posée à nouveau, mais j'ai essayé leur solution et cela ne fonctionne pas alors s'il vous plaît, n'évaluez pas cela. J'ai un script d'authentification (auth.js) qui doit être placé avant la balise, mais même lorsque j'applique la solution proposée dans la rubrique, il est toujours ajouté dans le fichier d'en-tête à la place du fichier body. Voici le code existant. J'utilise Gantry5:

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

En tant que débutant, expliquez-moi bien car je n’ai toujours pas la réputation de commenter hahahha.

En outre, c’est le lien du post précédent, j’essaie d’obtenir exactement la même chose: chargez le script javascript avant la balise de fermeture </ body>

2
Fotis Emery

Pour le portique 5, extensions> modèles> styles> paramètres de page

Ensuite, mettez juste le script que vous voulez, par exemple pour moi:

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

Merci beaucoup @jamesgarrett. Je vais certainement appliquer votre approche dans des sujets plus avancés.

0
Fotis Emery

Je pense qu'il y a au moins 4 options.

  • Dans les modèles de gantry5, allez dans extension> modèles, sélectionnez votre modèle. Sous l'onglet Paramètres de la page, vous trouverez une zone de texte intitulée "Avant </ body>". Cela sera inclus sur toutes les pages du site, donc si vous en avez besoin uniquement à certains endroits, vous pouvez utiliser une option pour assigner un modèle.
  • Utilisez javascript pour insérer la balise de script au chargement de la page. Peut fonctionner en fonction de votre script d'authentification.
  • Insérez-le directement dans le modèle. Ce serait bien pour ceux qui utilisent leur propre modèle, mais cela ne s'applique pas à vous, mais vous savez que je veux être minutieux.
  • Faites une chaîne de remplacement sur le HTML rendu dans un plugin système. Voir le code ci-dessous. Je suppose que vous utilisez Joomla 3.8 et que vous souhaitez également insérer le code d'authentification sur toutes les pages html frontales. Si ce dernier n'est pas vrai, ajoutez simplement quelques conditions supplémentaires au plug-in, le cas échéant.

Gotchas

Les plugins fonctionnent dans l'ordre dans lequel ils ont été commandés. Par conséquent, si un autre plugin utilise la même technique, il peut insérer du code après le vôtre. De même, si vous utilisez le cache de pages système, votre plug-in devra être précédé pour que votre script soit inséré avant que le code HTML ne soit mis en cache. J'espère que cela a du sens et ne s'applique pas à votre situation.

Code pour un plugin système

Le code php pour un plugin système approprié serait par exemple. /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);
        }
    }
}

et le manifeste accompagnant serait par exemple. /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>

Pour installer les fichiers Zip et l’utilisation du programme d’extension d’extension joomla standard, ou bien les télécharger sur les chemins spécifiés et les installer à l’aide de l’administration> extensions> gérer> outil de découverte.

4
jamesgarrett

Vous pouvez créer un nouveau module HTML personnalisé et utiliser l'éditeur de code pour ajouter le texte.

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

Puis placez-le dans une position de module et désactivez le titre. Le code sera placé à la position où le module serait affiché. Certains modèles ont des positions réservées aux données non contenues comme Google Analytics, ce qui serait un bon choix pour ce module.

0
Dan Cogliano

Si vous souhaitez que le script ne concerne qu'un (ou plusieurs) article (s) et que vous utilisiez Gantry5 Framework, accédez à Composants, Contours, créez un nouveau plan à l'aide du contour par défaut, accédez à Paramètres de page, ajoutez le javascript dans les attributs de corps, Dans la fenêtre Avant, la nouvelle structure Affectations est ensuite affectée au (x) article (s).

0
Vast