Gestion des événements de plugin

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Gestion des événements de plugin

    Bonjour à tous.

    J'essaie de développer mon premier plugin, et je rencontre un petit souci.
    J'ai parcouru un peu la doc Joomla, et plus particulièrement la liste des événements pour plugins : https://docs.joomla.org/Plugin/Events
    et je me demande s'il est possible de déclencher mon plugin sur une page composant (type Community Builder, K2, ou autre) ?

    L'idée, c'est que je veux exécuter une mise à jour sur d'autres table de ma base de données lorsqu'un membre modifie son profil (géré par Community Builder).
    A la base, je suis parti sur un plugin de type "user", avec un événement "onUserAfterSave".
    Et ça fonctionne plutôt pas mal : quand un membre met à jour son profil, le plugin s'exécute correctement, et ma base est bien mise à jour.

    Mais le souci, c'est que l'événement "onUserAfterSave" se déclenche (a priori, vu ce que je comprends) avant la mise à jour des tables Community Builder.
    Donc je ne mets pas à jour ma base avec les bonnes données... Il faut sauvegarder une 2eme fois pour avoir les bonnes infos...

    Je souhaiterais donc déclencher ma mise à jour après la mise à jour du profil Community Builder.
    Je pensais qu'il était possible, dans mon plugin, de déclencher mon bout de code lorsque je sors de ma page d'édition de profil CB, et que je reviens sur la page de profil CB.
    J'ai regardé un peur du côté de l'événement "onContentPrepare", pour voir la liste des contextes disponibles, et identifier le contexte qui correspond à la page que je veux cibler.

    J'ai fait un petit plugin de test qui affiche le contexte sur les pages type "article" de Joomla, mais rien sur les pages type "composant" (CB, K2, etc.).
    Bref, je patauge


    Est-ce que quelqu'un pourrait me dire si je suis sur la bonne voie, et comment déclencher mon plugin sur la page désirée, ou s'il existe une autre (meilleure) façon de procéder ?

    Merci d'avance pour votre aide.
    Dernière édition par plastic1st à 12/03/2019, 17h06

  • #2
    Je suis pas développeur, mais il y a un excellent livre consacré à 100% aux plugins Joomla : https://www.yireo.com/books/programm...a-plugins-book
    Un message d’erreur sur votre site Joomla ... ayez le reflexe de consulter lla base de connaissance : https://kb.joomla.fr

    Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ : https://www.joomla.fr/association/adherer

    Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

    Commentaire


    • #3
      Hello.

      Chaque composant a ses triggers (ou pas).

      Dans le cas de CB c'est le cas.

      La doc que tu as lue concerne le framework de Joomla.
      Mais là tu veux attraper une mise à jour d'un user de CB.

      Il est normal que CB commence par lancer la fonction d'enregistrement du user de joomla, car CB doit bien récupérer l'id de l'user pour faire son propre enregistrement et le lier avec celui de la table #__users de Joomla.

      Donc dans ton cas, ce n'est pas un plugin de Joomla que tu dois faire mais un plugin de CB à placer dans /components/com_comprofiler/plugin/user/plug_lenomdetonplugin/

      Mais la logique de programmation n'est pas tout à fait identique et la documentation de CB pas trop à jour.

      Il faut donc t'inspirer d'un autre plugin dans le dossier de CB.

      Un truc du genre (juste pour donner une idée, pas testé) :
      Code PHP:
      <?php

      if ( ! ( defined'_VALID_CB' ) || defined'_JEXEC' ) || defined'_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }

      global 
      $_PLUGINS;

      use 
      Joomla\CMS\Component\ComponentHelper;

      use 
      Joomla\CMS\Factory as JFactory;
      use 
      Joomla\CMS\Table\Table as JTable;

      $_PLUGINS->registerFunction'onAfterUserUpdate''UserAfterSave','getMonPluginTab' );
      $_PLUGINS->registerFunction'onAfterNewUser''UserAfterSave','getMonPluginTab' );
      $_PLUGINS->registerFunction'onAfterUpdateUser''UserAfterSave','getMonPluginTab' );
      $_PLUGINS->registerFunction'onAfterDeleteUser''userDelete','getMonPluginTab' );

      class 
      getMonPluginTab extends cbTabHandler {

              protected 
      $_Tchamps_gskiuser = array();

              protected 
      $_PrefixFormFields "";
              var 
      $installed true;

              var 
      $_MyDir '';

              protected 
      $_myplugin_params;


              function 
      __construct()
          {
                  
      $lang JFactory::getLanguage();
                  
      $lang->load('plug_monplugin',$this->_MyDir);

                  
      parent::__construct();


          }

          function 
      userDelete($user$success) {
              if(!
      $this->installed){ return $this->errorMessage;}

              if (!
      $success) return;

                      
      $CLuser =JTable::getInstance('Users''MaTable');
                      if(
      $CLuser->load(array('jid' => $user->user_id))){
                          
      $CLuser->delete();
                      }
          }

             function 
      UserAfterSave($user$rowExtra$Bool)
             {
                  global 
      $_CB_framework$_PLUGINS;

                  
      $app JFactory::getApplication();

                  if(empty(
      $user->user_id) OR !$this->installed){
                      
      $Msg JText::_('CBPLG_GSKITITRES_FORBIDEN_ACTION');
                      
      $_PLUGINS->_setErrorMSG$Msg );
                      
      $_PLUGINS->raiseError);
                      
      JFactory::getApplication()->enqueueMessage($Msg'error');
                      return 
      false;
                  }

                  
      $my JFactory::getUser();

                  if(!
      $Bool){ // lors d'un enregistrement $my->id == 0 et $Bool = true
                      
      if ($my->id != $user->user_id && !$my->get('isRoot')){
              
      /* Accès non autorisé, ce n'est pas l'user courrant, ni un admin */
                          
      $Msg JText::_('CBPLG_GSKITITRES_FORBIDEN_ACTION_FOR_USER');
                          
      $_PLUGINS->_setErrorMSG$Msg );
                          
      $_PLUGINS->raiseError);
                          
      //JFactory::getApplication()->enqueueMessage($Msg, 'error');
                          
      return false;
                      }
                  }
                  
      $CLuser =JTable::getInstance('Users''MyTable');

                  if(!
      $CLuser->load(array('jid' => $user->user_id))){
                      
      $CLuser->reset();
                  }

      ....            


                  if(!
      $CLuser->store()){
                      
      //JError::raiseWarning('', JText::sprintf('COM_GSKITITRES_STORE_GSKIUSER_ERROR',$my->id));
                      
      $_PLUGINS->_setErrorMSGJText::sprintf('COM_GSKITITRES_STORE_GSKIUSER_ERROR',$my->id) );
                      
      $_PLUGINS->raiseError();
                      return 
      false;

                  }

                  return 
      null;
             }        

      }
      Dernière édition par roland_d_alsace à 11/03/2019, 20h33
      plastic1st likes this.
      A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
      Rejoignez le Joomla Users Groupe Alsace...
      roland_d_alsace va-t-il devenir roland_du_grand_est ?

      Commentaire


      • #4
        Merci roland_d_alsace pour ta réponse détaillée.
        C'est super sympa de ta part d'avoir pris le temps de bien m'expliquer la marche à suivre.
        J'ai une bonne base de départ.
        Je vais analyser tout ça et me mettre au boulot.

        Commentaire


        • #5
          Encore un énorme merci à toi roland_d_alsace !
          Mon plugin fonctionne, et c'est en grande partie grâce à toi !

          Commentaire


          • #6
            Bonjour

            C'est sûr que la réponse fournie par Roland était superbe; quasi du prêt à l'emploi. Bravo Roland !
            Christophe (cavo789)
            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
            Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
            Mes logiciels OpenSource : https://www.avonture.be

            Commentaire

            Annonce

            Réduire
            1 sur 2 < >

            C'est [Réglé] et on n'en parle plus ?

            A quoi ça sert ?
            La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

            Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

            Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
            Comment ajouter la mention [Réglé] à votre discussion ?
            1 - Aller sur votre discussion et éditer votre premier message :


            2 - Cliquer sur la liste déroulante Préfixe.

            3 - Choisir le préfixe [Réglé].


            4 - Et voilà… votre discussion est désormais identifiée comme réglée.

            2 sur 2 < >

            Assistance au forum - Outil de publication d'infos de votre site

            Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

            Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

            Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

            UTILISER À VOS PROPRES RISQUES :
            L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

            Problèmes connus :
            FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

            Installation :

            1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

            Archive zip : https://github.com/AFUJ/FPA/zipball/master

            2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

            3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

            4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

            5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

            6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
            et remplacer www. votresite .com par votre nom de domaine


            Exemples:
            Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
            Télécharger le script fpa-fr.php dans: /public_html/
            Pour executer le script: http://www..com/fpa-fr.php

            Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
            Télécharger le script fpa-fr.php dans: /public_html/cms/
            Pour executer le script: http://www..com/cms/fpa-fr.php

            En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

            Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
            Voir plus
            Voir moins

            Partenaire de l'association

            Réduire

            Hébergeur Web PlanetHoster
            Travaille ...
            X