web-dev-qa-db-fra.com

Modification de la tête Joomla générée (<jdoc: include type = "head" />)

J'essaie de modifier le <head> Généré d'un site Web Joomla 3.9.13. Malheureusement, j'ai rencontré le fameux <jdoc:include type="head" /> Comment puis-je le modifier?

Je n'ai pu trouver aucune référence si celle-ci est construite à partir d'une base de données ou de fichiers php.

MISE À JOUR

dans le code source, il y a que

<!-- JDOC HEAD-->
<jdoc:include type="head" />
<!-- JDOC HEAD-->

en vue source est que

<!-- JDOC HEAD-->
<base href="https://xxxxx.gr/" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="keywords" content="PanosK2" />
<meta name="rights" content="PanosK5" />
<meta name="author" content="PanosK4" />
<meta name="xreference" content="PanosK6" />
<meta name="description" content="PanosK1" />
<title>Φωτο</title>
<link href="/templates/tmpl/favicon.ico" rel="shortcut icon" type="image/vnd.Microsoft.icon" />
<link href="https://xxxxx.gr/anazitisi?id=1&amp;format=opensearch" rel="search" title="Αναζήτηση" type="application/opensearchdescription+xml" />
<link href="https://xxxxx.gr/media/com_uniterevolution2/assets/rs-plugin/css/settings.css" rel="stylesheet" type="text/css" />
<link href="https://xxxxx.gr/media/com_uniterevolution2/assets/rs-plugin/css/dynamic-captions.css" rel="stylesheet" type="text/css" />
<link href="https://xxxxx.gr/media/com_uniterevolution2/assets/rs-plugin/css/static-captions.css" rel="stylesheet" type="text/css" />
<script src="/media/system/js/html5fallback.js" type="text/javascript"></script>
<!-- JDOC HEAD-->

Par exemple, comment puis-je trouver quelle extension (ou fichier php) crée la dernière ligne?

2
Panos

Vous obtenez l'objet `HtmlDocument ':

$doc = JFactory::getDocument();
// echo "<br><pre>"; print_r($doc); echo "</pre>"; // to check what you have here

Vous ne pouvez obtenir que les données de tête:

$headData = $doc->getHeadData();
$Title = $doc->getTitle();

Vous pouvez définir des choses:

$doc->setHeadData(array $data);
$doc->setTitle('my title');

Et vous pouvez voir toutes les choses que vous pouvez faire dans cette classe ici: https://api.joomla.org/cms-3/classes/Joomla.CMS.Document.HtmlDocument.html

et ici: https://api.joomla.org/cms-3/classes/Joomla.CMS.Document.Document.html

MODIFIER:

Sur la partie mise à jour de votre question: Dans Joomla, vous n'avez pas vraiment besoin de savoir quelle extension ajoute un script dans la tête jusqu'à supprimer ce script ne pose pas de problèmes. Et comme je le vois dans votre cas, vous êtes déterminé à supprimer ce script du <head> De votre site. Je ne connais pas non plus votre niveau d'expert de PHP et Joomla donc je voudrais vous proposer deux approches ici.

D'abord la solution la plus simple et un peu hacky qui n'est pas recommandée par les développeurs Joomla plus sérieux et la raison pour laquelle elle n'est pas recommandée est principalement parce que vous écrirez quelques lignes directement dans le fichier index.php de votre modèle. Si le modèle sera mis à jour, vos quelques lignes de code ajouté seront également supprimées par la mise à jour du modèle. Mais peut-être que vous ne vous en souciez pas pour le moment et après la mise à jour du modèle, vous pouvez toujours recopier ces quelques lignes dans le fichier index.php Si vous le souhaitez.

Donc, placez ces quelques lignes de PHP dans le fichier index.php De votre modèle juste après la ligne: <jdoc:include type="head" />:

if (isset($this->_scripts['/media/system/js/html5fallback.js'])) {
    unset($this->_scripts['/media/system/js/html5fallback.js']);
}

Cela supprimera le chargement indésirable du script dans le <head>.

Maintenant, la deuxième solution Joomla standard pour ce type de tâches crée un plugin système Joomla sur l'événement: 'onBeforeCompileHead' quel événement est déclenché dans le fichier HeadRenderer.php dans Joomla qui fait son nom suggère. (emplacement du fichier dans Joomla: libraries/src/Document/Renderer/Html/HeadRenderer.php)

Depuis quelques semaines, quelqu'un ici a donné un bon exemple de ce type de plugin, je ne répéterai pas l'exemple de code de ce plugin car il est assez explicite après un court laps de temps pour étudier ces deux articles ici:

L'exemple du plugin système: le plugin onAfterRender ne se déclenche que sur le backend

Et la partie du code du plugin ici dans la réponse de ce post que vous devez utiliser dans votre plugin et vous pouvez supprimer n'importe quoi de la tête en utilisant ceci ou quelque chose de très similaire code du plugin:

Comment puis-je supprimer complètement Bootstrap du frontend de Joomla?

Je copie cependant ici la viande de ce plugin:

class plgSystemYourPlugin extends JPlugin
{
    public function onBeforeCompileHead()
    {

        $doc = JFactory::getDocument();

        // Remove the unwanted script
        if (isset($doc->_scripts['/media/system/js/html5fallback.js'])) {
            unset($doc->_scripts['/media/system/js/html5fallback.js']);
        }

    }
}

Ce plugin peut être écrit très rapidement et si vous souhaitez en créer un, vous pouvez étudier le sujet plus ici: https://docs.joomla.org/J3.x:Creating_a_Plugin_for_Joomla

J'espère que ce qui précède vous aidera davantage.

2
Zollie

Joomla a une classe HTMLHelper qui vous permettra de faire beaucoup de modifications à la tête, selon ce que vous voulez faire. Vous pouvez utiliser ses méthodes directement ou utiliser la classe HTMLDocument pour y accéder.

Exemples:

HTMLDocument

  • addHeadLink vous permet d'ajouter un élément de lien à la tête générée.
  • addCustomTag vous permet d'ajouter n'importe quelle chaîne HTML à la tête
  • addFavicon permet d'ajouter un lien favicon

Document (HTMLDocument hérite de cela)

  • addScript et addScriptDeclaration ajouter des javascripts
  • addStylesheet et addStyleDeclaration ajouter CSS
  • setCharset définit le jeu de caractères
  • setLang définit la langue
  • setTitle définit le titre du document

Sans savoir ce que vous essayez de faire, il est difficile de trouver une bonne réponse, mais j'espère que cela vous aidera à atteindre votre objectif, de toute façon. N'hésitez pas à revenir et à modifier votre question avec plus de détails si vous cherchez à faire quelque chose de spécifique qui ne vous aide pas.

0
Arlen