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>
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.
Je pense qu'il y a au moins 4 options.
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.
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.
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.
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).