Plugin de contenu - plusieurs instaces dans le même article

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

  • Plugin de contenu - plusieurs instaces dans le même article

    Bonjour,

    J'avance doucement sur un plugin de lecture de MP3.
    La plupart des éléments sont développés même si j'ai encore quelques problèmes avec le CSS...

    Ma question porte sur, comme l'indique le titre, de multiples instances du même plugin dans un article.

    En effet, quand j'appelle deux fois mon plugin dans un article (ou plusieurs articles contenant le plugin sur la même page), le clic sur un élément de la première instance provoque la bonne action mais l'affichage est modifié sur la dernière instance.

    D'où ma question : est-ce que quelqu'un peut me donner des indications sur ce qu'il faut faire pour discriminer les différentes instances d'un plugin ?

    Je pense qu'il s'agit d'un problème de nommage de l'élément (ils portent tous le même nom !). Mais je ne sais pas comment faire prendre des noms différents aux classes, id... en fonction du nombre de fois qu'il a été appelé...
    Administrateur de sites Web sous Joomla et depuis peu développeur de plugins
    Sites sous Joomla 3.4.8 (à la date d'écriture de la signature). Maintien permanent à la dernière version

  • #2
    Re : Plugin de contenu - plusieurs instaces dans le même article

    J'ai eu un problème similaire. En fait, ton formulaire est surement identifié par un ID, tu dois donc, à l'aide de PHP, par exemple, ajouter un suffixe à ton ID.

    Par exemple :

    Premier conteneur :
    ID="case1"

    Deuxième conteneur :
    ID="case2"

    Ce qui se traduit en PHP par :

    <?php var = xx ?>
    ID="case<?php echo(var)?>"

    En gros, voila l'idée, mais tu peux remplacer la valeur de var, par un ID du DIV contenant par exemple, encore faut il que ton ID change, selon la répétition de ton formulaire. Dans tous les cas, tu dois trouver un élément qui différencie l'instance 1 de la deuxième, etc... et t'en servir pour renommer l'ID de ton formulaire.

    Mais comme tu ne n'en dis pas trop sur ton problème, je suis peut-être totalement à côté.

    Commentaire


    • #3
      Re : Plugin de contenu - plusieurs instaces dans le même article

      Il existait un "truc" en programmation objet (C++).
      Il s'agissait d'un champ d'une classe dont la valeur est partagée entre toute les instances de cette classe (ce n'était ni public, ni protected, ni private ; mais une autre définition qui permettait ceci).
      Est-ce qu'il n'existe pas la même chose en PHP ?
      Je pourrais utiliser ce champ pour ajouter une "précision" sur l'identifiant...
      Administrateur de sites Web sous Joomla et depuis peu développeur de plugins
      Sites sous Joomla 3.4.8 (à la date d'écriture de la signature). Maintien permanent à la dernière version

      Commentaire


      • #4
        Re : Plugin de contenu - plusieurs instaces dans le même article

        Bonjour,

        Il existait un "truc" en programmation objet (C++).
        Le "truc" en question, pour les variables d'instance, sont les variables de type static. PHP 5 connaît également ce type.

        Mais dans le cas qui nous intéresse, il serait bon de savoir si le player mp3 est basé sur la balise html5 audio ou pas.
        Si utilisation html5 audio http://www.w3schools.com/tags/ref_av_dom.asp donne les méthodes embarquées et il n'y a pas de risque que plusieurs instances aient des effets perturbateurs mutuels.

        Par contre, si on utilise un JavaScript externe et qu'une seule instance du JavaScript est chargée (bonne pratique), chaque élément déclencheur doit avoir un ID unique (par exemple une div du document) et on doit passer cet ID au script http://stackoverflow.com/questions/2...le-having-plai
        Pas de demande de support par MP.
        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

        Commentaire


        • #5
          Le plugin est développé en HTML5.

          J'ai le fichier PHP qui remplace le contenu de la balise l'appelant dans l'article.
          Ce fichier crée l'interface graphique en fonction d'un CSS ; le choix du CSS dépend d'une option passée dans la balise d'appel. Il crée également la balise AUDIO avec des paramètres passés dans la balise d'appel.

          J'ai un fichier JS (JQuery) qui permet de contrôler (lecture, pause, stop, volume, position dans le morceau) l'écoute.

          Dans la version actuelle, aucun problème ne se pose s'il n'y a qu'une instance du plugin.
          En revanche, les contrôles de toutes les instances agissent sur la dernière instance.

          Le problème est du au fait que toutes les balises audio sont passées avec le même "id".
          Il faut donc que je change cette valeur à chaque création d'une nouvelle instance.

          Ce à quoi j'ai pensé :
          1) Dans le fichier PHP, créer un champ texte hidden (<INPUT id="varGlobale" type="hidden"... />) à la création de la première instance de plugin sur la page :
          - ce champ n'est créé que s'il n'existe pas déjà (je ne connais pas la méthode)
          - ce champ a une valeur initiale à 1 (value=1)
          - ce champ est incrémenté s'il existe déjà (varGlobale.value=varGlobale.value+1 ; mais je ne sais pas comment savoir s'il existe déjà)
          2) Dans le fichier PHP, donner un "id" à l'objet "audio" dépendant de cette valeur
          - création de l'objet audio : au lieu de $varRetour .= "<AUDIO id='audio'... ; ce serait $varRetour .= "<AUDIO id='audio" . varGlobale.value . "' ...
          - création des controles : je rajoute dans la balise image onclic='setAudioId(varGlobale.value)'
          3) Dans le fichier JS, créer une variable globale "varControle"
          - Avec la fonction "setAudioId", cette variable est modifiée
          - Toutes les fonctions agissent sur l'objet dont l'id est "audio" . varControle

          Avez-vous un avis sur cette méthode ?
          Administrateur de sites Web sous Joomla et depuis peu développeur de plugins
          Sites sous Joomla 3.4.8 (à la date d'écriture de la signature). Maintien permanent à la dernière version

          Commentaire


          • #6
            Re : Plugin de contenu - plusieurs instaces dans le même article

            Utiliser dans le code PHP une classe (logiquement en OOP ça devrait déjà être le cas). Dans cette classe, une variable d'instance statique...
            Code PHP:
            class maClasseAudio
            {
                static 
            $inst 0;

                protected 
            $song null ;

                public function 
            __construct$song "" )
                {
                    
            self::$inst++ ;
                    
            $this->song $song ;
                    
            // reste de l'init...
                
            }

                public function 
            monProcess()
                [
                    
            // ton traitement ici, avec retour de la chaîne à injecter
                
            }
            // class maClasseAudio 
            par exemple. A toi de générer dans le process les ids nécessaires.
            Pas de demande de support par MP.
            S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

            Commentaire

            Annonce

            Réduire
            Aucune annonce pour le moment.

            Partenaire de l'association

            Réduire

            Hébergeur Web PlanetHoster
            Travaille ...
            X