web-dev-qa-db-fra.com

Joomla 3 onContentAfterSave backend ne fonctionne pas

Je veux utiliser onContentAfterSave dans le backend de Joomla mais cela ne fonctionne pas.
Mon code est le suivant:

class plgContentTest extends JPlugin
{

public function onContentAfterSave($context, &$article, $isNew)
{
    $option = JRequest::getVar('option');

    if($option=='com_content'){

        echo 'Test';

     }

   }

}

onContentAfterSave ne fonctionne pas sur le backend?

1
saber

Si vous testez sur la sauvegarde, alors l'écho sur quelque chose peut ne jamais être vu comme presque certainement une redirection est déclenchée après la sauvegarde. Alors essayez d'ajouter une sortie; pour vérifier qu'il ne tire pas vraiment:

class plgContentTest extends JPlugin
{
    /**
    * Loads the application object
    *
    * @var    JApplicationCms
    * @since  3.2
     */
    protected $app = null;

    public function onContentAfterSave($context, &$article, $isNew)
    {
        $option = $this->app->input->get('option');

        if ($option=='com_content')
    {
            echo 'Test';
            exit;
        }

    }

}

Notez que JRequest est obsolète et vous pouvez maintenant injecter dans l'objet d'application Joomla en le déclarant en tant que propriété protégée.

2
Rob Clayburn

Vérifiez les choses suivantes:

  • Le nom de la classe du plugin devrait être: plgContentTest
  • La classe de plugin devrait étendre JPlugin classe
  • Le nom du plugin doit être: test.php
  • Le fichier de plugin doit être dans: /plugins/content/test
  • Le nom du fichier de définition du plugin xml doit être: test.xml
  • Le fichier de définition du plugin xml doit se trouver dans: /plugins/content/test
  • Le plugin doit être installé et activé

Quelques autres astuces:

Vous devriez vérifier le contexte, pas une demande directe:

if ($context != 'com_content.form') {
    return true;
}

Vous pouvez trouver un exemple de plugin de contenu ici: / plugins/content/joomla

Vous devriez définir une variable article comme ceci $article pas ça &$article.

De plus, il serait bien pour vous de fournir la structure de répertoires de votre plugin.

2
Artur Stępień

La plupart des problèmes avec les plugins de contenu sont causés par le nom du plugin. S'il n'est pas nommé et installé correctement, Joomla ne peut pas le trouver et appeler onContentAfterSave .

Prenant Finder plugin comme exemple:

  • Il est installé dans le dossier plugins/content/Finder.
  • Le plugin est nommé Finder.php
  • La classe est PlgContentFinder (étend JPlugin)
  • Il a la fonction onContentAfterSave
1
Anibal