web-dev-qa-db-fra.com

Impossible d'ajouter du Javascript au plugin

Cela fait environ une heure que j'essaie d'obtenir un seul javascript ajouté à la tête via mon plugin système, et je suis en quelque sorte en train de me tirer les cheveux de la raison pour laquelle ils ne s'affichent pas.

Voici ce que j'ai dans mon fichier plugin php jusqu'à présent:

    <?php
//no direct access
defined('_JEXEC') or die;

class PlgJoomlaKey extends JPlugin
{
    public function onAfterRender ()
    {
        //only going to run these in the backend for now
        if ($app->isSite()) {
            return;
        }
        $document = JFactory::getDocument();
        $document->addScript(JUri::root().'plugins/system/joomlakey/joomlakey.js' );
    }
}

Je fais évidemment quelque chose de mal, mais je ne sais pas quoi. J'ai essayé autant de fonctions différentes que onAfterRender que je pourrais voir fonctionner, mais aucune de celles-ci ne semble rien changer. J'ai modifié le chemin du fichier dans tous les sens, mais cela ne semble pas être le problème (en plus, il devrait l'ajouter, je verrais au moins le (mauvais) chemin dans la tête).

Je sais que le plugin est en cours de chargement, car je peux taper, par exemple, break juste au-dessus du commentaire de //only going to run ... qui rompt ensuite mon site lorsque je recharge - le plugin est donc en cours d’exécution, mais pour une raison quelconque, le script n’est pas placé dans la tête comme il se doit.

2
Jon

Comme le nom de l'événement onAfterRender dit:

Cet événement est déclenché après que le framework a rendu l'application.

Donc, l'application a déjà été rendue, vous ne pouvez plus la modifier. Vous pouvez utiliser onBeforeRender , mais puisque vous ajoutez JS à <head>, le plus logique serait d'utiliser l'événement onBeforeCompileHead .

Cet événement est déclenché avant que l'infrastructure ne crée la section Head du document.

Et vous avez probablement un rapport d'erreur erroné. Vous n'avez pas défini $app.

Code final

public function onBeforeCompileHead()
{
    //only going to run these in the backend for now
    $app = JFactory::getApplication();
    if ($app->isSite()) {
        return;
    }

    $document = JFactory::getDocument();
    $document->addScript(JUri::root().'plugins/system/joomlakey/joomlakey.js' );
}
3
Rene Korss