[Joomla 2.5]Code à exécuter sur modification de paramètre d'un module

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

  • [Joomla 2.5]Code à exécuter sur modification de paramètre d'un module

    Bonjour,

    Voilà, j'ai réussis à faire une ébauche de mon premier module. Mais une chose me dérange:
    Mon module créer un code Mootools (java script) qu'il injecte dans le document via la métode :
    Code PHP:
    $document->addScriptDeclaration ($js); 
    lancée depuis le helper.php. Je trouves que le résultat chez le client n'est pas propre, s'il regarde son code html...

    J' aurais voulu créer un fichier *.js via un code php qui s'exécute sur modification des paramètres du module et non à chaque visite du site via le helper.php (pour ne pas surcharger le serveur avec un travail innutil)

    Avez-vous une idée ?
    Merci pour vos réponses. Alain
    Dernière édition par al1pb à 23/07/2012, 07h38
    Un peu de pub: http://www.aplomb.ch

  • #2
    Re : [Joomla 2.5]Code à exécuter sur modification de paramètre d'un module

    Bonjour,

    Tu peux tout simplement créer un fichier php qui rendra du contenu js et l'appeler depuis ton head.
    Ça marche très bien et ça prend très peu de ressources comparé à ce que prend le CMS.
    Mais c'est exécuté à chaque appel de ce fichier. Mais vu qu'il est mis en cache par le navigateur c'est pas entièrement vrai.


    Sinon pour répondre exactement à la demande il faut créer un plugin de type extension et utiliser l'appel onExtensionAfterSave();
    Et bien sûr créer tout le code qui va générer le fichier js.


    Damien
    www.Crac-Design.com

    Commentaire


    • #3
      Re : [Joomla 2.5]Code à exécuter sur modification de paramètre d'un module

      Merci beaucoup de me répondre.
      Envoyé par ZDamienZ Voir le message
      Tu peux tout simplement créer un fichier php qui rendra du contenu js et l'appeler depuis ton head.
      Ça marche très bien et ça prend très peu de ressources comparé à ce que prend le CMS.
      Mais c'est exécuté à chaque appel de ce fichier. Mais vu qu'il est mis en cache par le navigateur c'est pas entièrement vrai.
      Dans ce cas de figure, autant appeler le fichier *.js depuis le helper.php du module via
      Code PHP:
      $document->addScript (chemin/*.js); 
      ce qui appelle mon script seulement quand le module est affiché.


      Envoyé par ZDamienZ Voir le message
      Sinon pour répondre exactement à la demande il faut créer un plugin de type extension et utiliser l'appel onExtensionAfterSave();
      Et bien sûr créer tout le code qui va générer le fichier js.
      Là, tu m'intéresses... Car, je dois mettre à jour mon fichier *.js à chaque modification des paramètres du module (avec un code en php). Peux-tu me dire où je peux trouver de la documentation ?

      Merci d'avance.
      Un peu de pub: http://www.aplomb.ch

      Commentaire


      • #4
        Re : [Joomla 2.5]Code à exécuter sur modification de paramètre d'un module

        Salut,

        Envoyé par al1pb Voir le message
        Dans ce cas de figure, autant appeler le fichier *.js depuis le helper.php du module via
        Code PHP:
        $document->addScript (chemin/*.js); 
        ce qui appelle mon script seulement quand le module est affiché.
        Je crois que tu n'as pas compris.
        Dans tous les cas tu appelles ton fichier. Mais c'est un fichier .php que tu vas appeler pas js.
        Ce fichier php affichera ton code JS.

        Code PHP:
        $document->addScript (chemin/generationjs.php); 
        et dans ton fichier generationjs.php
        Code PHP:
        <?php
        header
        ("Content-type: application/javascript");
        $script "function maFonction(){
            alert('here we are');
        }"
        ;
        echo 
        $script;
        ?>
        Sinon pour le plugin en documentation il y a la doc développeur Joomla http://docs.joomla.org/Developers#Plugins

        Le fonctionnement des plugins entre 1.5 et 2.5 n'a pas changé.

        Après pour ce qui est de l'appel du plugin (pour ton info et connaitre le nom de l'appel) il se trouve dans le fichier /administrator/components/com_modules/models/module.php principalement en ligne 881 et 1021 sur ma version 2.5.6.

        Pour développer avec Joomla les docs sont nécessaires mais on comprend bien mieux les concepts en allant fouiller dans le code

        La deuxième solution est très propre mais beaucoup plus lourde puisqu'il faut créer un plugin, l'installer via le gestionnaire d'extension et le publier.

        Pour faire encore mieux et ne pas avoir le problème du cache de navigateur il faut que tu stockes le dernier nom de ton fichier js généré en ajoutant dans le nom le timestamp de génération ou n'importe quoi pour avoir un nouveau nom.

        Comme ça le navigateur ne voit pas le même nom de fichier et le recharge.

        Damien
        www.Crac-Design.com

        Commentaire


        • #5
          Re : [Joomla 2.5]Code à exécuter sur modification de paramètre d'un module

          Salut et merci de ton aide.
          Envoyé par ZDamienZ Voir le message
          Je crois que tu n'as pas compris.
          Dans tous les cas tu appelles ton fichier. Mais c'est un fichier .php que tu vas appeler pas js.
          Ce fichier php affichera ton code JS.
          Code PHP:
          $document->addScript (chemin/generationjs.php); 
          et dans ton fichier generationjs.php
          Code PHP:
          <?php
          header
          ("Content-type: application/javascript");
          $script "function maFonction(){
              alert('here we are');
          }"
          ;
          echo 
          $script;
          ?>
          Ok d'accord, mais mon but est de faire un module que je voudrais partager par la suite. Donc, ajouter une ligne dans le template n'est pas le top pour un utilisateur joomla. Mais c'est une bonne idée.

          Envoyé par ZDamienZ Voir le message
          Sinon pour le plugin en documentation il y a la doc développeur Joomla http://docs.joomla.org/Developers#Plugins

          Le fonctionnement des plugins entre 1.5 et 2.5 n'a pas changé.

          Après pour ce qui est de l'appel du plugin (pour ton info et connaitre le nom de l'appel) il se trouve dans le fichier /administrator/components/com_modules/models/module.php principalement en ligne 881 et 1021 sur ma version 2.5.6.

          Pour développer avec Joomla les docs sont nécessaires mais on comprend bien mieux les concepts en allant fouiller dans le code

          La deuxième solution est très propre mais beaucoup plus lourde puisqu'il faut créer un plugin, l'installer via le gestionnaire d'extension et le publier.

          Pour faire encore mieux et ne pas avoir le problème du cache de navigateur il faut que tu stockes le dernier nom de ton fichier js généré en ajoutant dans le nom le timestamp de génération ou n'importe quoi pour avoir un nouveau nom.

          Comme ça le navigateur ne voit pas le même nom de fichier et le recharge.
          Là, tu me donne de bonnes pistes. Je vais étudier un peu tout ça tranquillement...

          J'ai un peu réfléchi à mon problème en repeignant ma barrière cet après midi, j'ai eu l'idée suivante:
          - Je créer un paramètre caché (type hidden)
          - Je lui envoie comme contenu tous mes paramètres dans une chaine (string).
          - Dans mon helper du module, je compare cette chaine à tous les autres paramètres.
          - S'il y a une différence, la fonction de création de du fichier *.js est exécutée.
          Mon problème avec cette solution est de sauvegarder durablement le paramètre de type hidden. Je fais $params->set('nomHidden',$totalParametres), ça fonctionne dans la suite du code, mais n'est pas sauvegardé avec les autres paramètres dans la BD.

          C'est très simpa à toi de me venir en aide, je débute...
          A+ Alain
          Un peu de pub: http://www.aplomb.ch

          Commentaire


          • #6
            Re : [Joomla 2.5]Code à exécuter sur modification de paramètre d'un module

            Ton utilisateur ne va pas aller dans ton plugin à part si il a des modifications à faire.
            Donc ce que je ferais, c'est générer à chaque fois mon fichier comme ça pas besoin de vérifier le changement de paramètres

            Ton $params->set('nomHidden','value') vient juste modifier ou créer la variable passée en paramètre de l'objet $params.
            En fait cette méthode (set) fait partie de la classe JObjet si je dis pas de bétises.
            Il ne vient en aucun cas modifier le paramètre du module.

            Si tu veux modifier ton paramètres il faut le faire dans le plugin dans l'appel onExtensionBeforeSave grâce au 2ème paramètre de la méthode.
            Il faudra décoder la propriété params qui une chaine json, modifier ton paramètre et réencoder la chaine.

            Concernant la première solution, tu n'as rien à mettre dans le template l'appel du fichier se fait depuis le module avec $document->addScript (chemin/generationjs.php);
            Ton fichier php qui génère du js, tu peux le mettre dans le répertoire du module.

            Damien
            www.Crac-Design.com

            Commentaire


            • #7
              Re : [Joomla 2.5]Code à exécuter sur modification de paramètre d'un module

              Envoyé par ZDamienZ Voir le message
              En fait cette méthode (set) fait partie de la classe JObjet si je dis pas de bétises.
              Il ne vient en aucun cas modifier le paramètre du module.
              Oui, c'est un objet joomla JRegistry qui gère simplement les données des paramètres qui est supprimé à la fin de la génération du module.

              Envoyé par ZDamienZ Voir le message
              Si tu veux modifier ton paramètres il faut le faire dans le plugin dans l'appel onExtensionBeforeSave grâce au 2ème paramètre de la méthode.
              Il faudra décoder la propriété params qui une chaine json, modifier ton paramètre et réencoder la chaine.

              Concernant la première solution, tu n'as rien à mettre dans le template l'appel du fichier se fait depuis le module avec $document->addScript (chemin/generationjs.php);
              Ton fichier php qui génère du js, tu peux le mettre dans le répertoire du module.
              Cette solution est bien, mais ce qui me dérange, c'est de créer et installer un plugin pour un simple module...

              Le plus simple serrait de laisser la création du script à chaque affichage du module. Le cache va faire son travail en stockant les données pour alléger le travail côté serveur...

              J'ai un peu creusé mon idée de mon message précédent et ai réussi à la mettre en pratique:
              1. Créer un paramètre de contrôle de type hidden dans le fichier *.xml
              2. Comparer le contenu de ce paramètre avec le contenu des paramètres à surveiller
              3. Si il y a une différence, lance la fonction de création du fichier *.js
              4. Dans cette fonction, écrire le paramètre hidden params->set('hidden','nouvelle valeur')
              5. Enregistrer cette modification dans la BD avec une requette UPTDATE sur la table #__modules


              Encore merci pour ton aide Damien
              Je passe le message en Réglé
              Alain
              Un peu de pub: http://www.aplomb.ch

              Commentaire

              Annonce

              Réduire
              Aucune annonce pour le moment.

              Partenaire de l'association

              Réduire

              Hébergeur Web PlanetHoster
              Travaille ...
              X