J'ai créé un plugin système pour l'événement onAfterRender mais je ne peux pas le faire exécuter. Je suis sur Joomla 3.9
Voici l'exemple de code du plugin
<?xml version="1.0" encoding="utf-8"?>
<!--
/**
* @copyright Copyright (c) 2018 myvendorcustomscripts. All rights reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
-->
<extension type="plugin" version="1.0" group="content" method="upgrade">
<name>plg_system_myvendorcustomscripts</name>
<author>myvendor</author>
<creationDate>October 2018</creationDate>
<copyright>Copyright (c) 2018 myvendorcustomscripts. All rights reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
<authorEmail></authorEmail>
<authorUrl></authorUrl>
<version>1.0.0</version>
<description>
<![CDATA[
]]>
</description>
<files>
<filename plugin="myvendorcustomscripts">myvendorcustomscripts.php</filename>
<filename>index.html</filename>
</files>
<languages>
<language tag="en-GB">en-GB.plg_system_myvendorcustomscripts.ini</language>
<language tag="en-GB">en-GB.plg_system_myvendorcustomscripts.sys.ini</language>
</languages>
<config>
<fields name="params">
<fieldset name="basic">
</fieldset>
</fields>
</config>
</extension>
Et
<?php
/**
* @copyright Copyright (c) 2018 myvendorcustomscripts. All rights reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
// no direct access
defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
/**
* content - MyVendorCustomScripts Plugin
*
* @package Joomla.Plugin
* @subpakage myvendorcustomscripts.MyVendorCustomScripts
* @since
*/
class plgSystemMyVendorCustomScripts extends JPlugin
{
/**
* Constructor.
*
* @param $subject
* @param array $config
* @since
*/
public function __construct(&$subject, $config = array())
{
// call parent constructor
parent::__construct($subject, $config);
}
public function onAfterRender()
{
$app = JFactory::getApplication();
}
public function onBeforeCompileHead()
{
$app = JFactory::getApplication();
$document = $app->getDocument();
foreach ($document->_styleSheets as $index => $value) {
if (strpos($index, 'fonts.googleapis.com')) {
unset($document->_styleSheets[$index]);
}
if (strpos($index, 'simple-line-icons')) {
unset($document->_styleSheets[$index]);
}
// $styleSheet = $styleSheet;
}
}
}
Cependant, les fonctions ne sont jamais exécutées lorsque je navigue sur le frontend, mais elles sont exécutées lors de la navigation sur le backend. C'est vraiment étrange et je ne comprends pas la raison. Il semble sur la documentation que cela devrait même se déclencher toujours
Le code que vous avez actuellement fonctionne. Vous avez juste besoin d'effacer le cache de page et de revoir la page. Tu verras fonts.googleapis.com
les liens sont supprimés. Cela peut ou peut ne pas être correct selon le reste de votre code.
Lorsque le plug-in System - Page Cache est activé, la première page de chargement (déterminée par l'URL) est rendue normalement avec tous les événements de plug-in attendus déclenchés et stockés dans le cache pendant l'événement onAfterRespond
. Sur la page suivante, le plugin récupère la page du cache, la pousse vers l'application et ferme l'application. Cela se produit lors de l'événement onAfterInitialise
. Aucun autre événement n'est déclenché. Sauf onAfterRespond
si le débogage est activé.
Le code que vous avez actuellement dans onBeforeCompileHead
fonctionne en fait très bien car vos modifications sont appliquées avant que la page ne soit stockée dans le cache.
Cependant, dans le cas où vous souhaitez ajouter du code qui n'est pas sûr pour le cache, par exemple code qui change d'un visiteur à l'autre ou d'un code généré de manière aléatoire, vous pouvez désactiver sélectivement le cache à l'aide de l'événement onPageCacheSetCaching
.