IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[DOM] Interaction entre PHP et Javascript


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 114
    Points : 61
    Points
    61
    Par défaut [DOM] Interaction entre PHP et Javascript
    J'hésitais à poster ce topic dans PHP mais il a plus sa place ici je pense.
    Je sais très bien que le PHP s'exécute côté serveur et le javascript côté client.

    J'expose le topo :

    • J'ai un tableau en PHP que je parcourt avec la fonction foreach()
    • J'ai une vidéo en flash et des chapitres
    • J'aurai aimé mettre en évidence la case des chapitres lorsque je suis bien entre le début et la fin du chapitre.

    Voilà mon code simplifié :

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var currentPosition = 0; 
     
    function positionListener(obj) { 
        currentPosition = obj.position;
    }
    currentPosition est donc la position sur la vidéo en dixième de seconde.


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php foreach ( $chapters as $chapter ) { ?>
                        <div class='chapter'>
                            <!-- Affiche les informations du chapitre -->
                                <!-- Titre, description, etc... -->
                            <!-- Affiche la durée du chapitre -->
                            <div class='chap_duration'>
                                Début :<?php echo $chapter['debut'] ?>
                                Fin :<?php echo $chapter['fin'] ?>
                            </div>
                        </div>
                    <?php } ?>


    Ce que j'aurai aimé, c'est de modifié le css des div 'chapter' et 'chap_duration' lorsque la variable 'currentPosition' du javascript se trouve comprise entre les variables '$chapter['debut']' et '$chapter['fin']' du PHP.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    il faut visualiser ce que font chacun de leur coté php et javascript ...

    php génère le code html javascript ... puis l'envoie au client ...
    donc ta boucle foreach est terminée avant d'arriver chez le client ...

    qu'est ce qui determine la fin d'un chapitre ?
    c'est du flash ???

    si c'est le cas il faudrait en jouer de l'action script qui lui se passe coté client ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 114
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    il faut visualiser ce que font chacun de leur coté php et javascript ...

    php génère le code html javascript ... puis l'envoie au client ...
    donc ta boucle foreach est terminée avant d'arriver chez le client ...

    qu'est ce qui determine la fin d'un chapitre ?
    c'est du flash ???

    si c'est le cas il faudrait en jouer de l'action script qui lui se passe coté client ...
    La fin du chapitre est quand la variable javascript 'currentPosition' vaut la variable PHP $chapter['fin'] mais du foreach, c'est à cause du foreach que je bloque :/

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    ce n'est pas comme cela que tu pourras le gerer ...
    comme dit plus haut le for each est terminé avant que la page n'arrive chez le client !!!
    il faudra le faire au moyen d'eun combinaison entre actionscript et javascript ...
    quoi que même tout en AS devrait marcher ...

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div class='chap_duration'>
         Début :<?php echo $chapter['debut'] ?>
         Fin :<?php echo $chapter['fin'] ?>
    </div>
    Puisque tu affiches les variables en question sur ta page, il est possible de les récupérer avec JavaScript puis de tester l'égalité dans une fonction périodique.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Beef la boucle for est terminée quand la page arrive coté client il faut juste passer à js les variables au moyen d'action script ... php ne peut rien à ce niveau là

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Je le sais bien, ce que je veux dire, c'est que la valeur de ses variables php sont affichées dans la page HTML, donc récupérables via le DOM avec JavaScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div class='chap_duration'>
         Début :<?php echo <span>$chapter['debut']</span> ?>
         Fin :<?php echo <span>$chapter['fin']</span> ?>
    </div>
    Ensuite, coté JavaScript, en imaginant que la variable chapitres par exemple pointe sur une div de classe 'chap_duration', tu peux obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var debut = chapitre.getElementsByTagName('span')[0].innerHTML;
    var fin = chapitre.getElementsByTagName('span')[1].innerHTML;

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    oui mais comme la page arrive en bloc ça ne donnera rien
    C'est en passant par AS qu'il faut passer une variable à javascript sur la page pour signaler la fin du chapitre ...
    puis avec un setInterval courrant sur la page on teste le changement de la variable ...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 114
    Points : 61
    Points
    61
    Par défaut
    Je ne connait rien à l'AS D:

    Je pense avoir trouvé, c'est assez barbare mais ça doit fonctionner.

    Je récupére mes valeurs de fin et de début dans un tableau PHP puis dans un tableau javascript et là je compare avec la variable currentPosition.

    EDIT : Voilà en gros ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?php 
    // Récupère les Mark in/out des chapitres
    for ( $i = 0 ; $i < count( $chapters) ; $i ++ ) {
            $mark_in[$i] = $chapters[$i]['Chapter']['mark_in']/25;
            $mark_out[$i] = $chapters[$i]['Chapter']['mark_out']/25;
    } ?>
    <script type="text/javascript">
    <!--
    <?php
    // Crée un tableau javascript des Mark in/out 
    foreach( $mark_in as $cle => $valeur )
    {
        echo "mark_in[$cle] = '$valeur';";
    } 
     
    foreach( $mark_out as $cle => $valeur )
    {
        echo "mark_out[$cle] = '$valeur';";
    }
    ?>
    var currentPosition = 0; 
     
    function positionListener(obj) { 
    	currentPosition = obj.position;
    	for ( i = 0 ; i < count(mark_in) ; i++ )
    	{
    		if ( currentPosition >= mark_in[i] && currentPosition <= mark_out[i] )
    		{
    			var tmp = $("#test" + i ).get(0);
    			if (tmp) { tmp.innerHTML = ">"; }
     
    		}
    	}
    }
    Pour ma page de test j'ai 3 chapitresn j'ai crée un petit span :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <span id="test<?php echo $i ?>"></span>
    Le $i du test vaut bien 0 pour le premier chapitre et est donc comme la première valeur des tableau mark_in et mark_out du javascript.

    Le problème c'est que ça ne marche pas, ça fait longtemps que j'ai pas touché à du JS aussi :d

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    tout dépend de ce que tu souhaites faire au final
    je pensais qu'il s'agissait de faire s'enchainer les flash coté client ...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 114
    Points : 61
    Points
    61
    Par défaut
    # J'aurai aimé mettre en évidence la case des chapitres lorsque je suis bien entre le début et la fin du chapitre.
    J'ai pas été très clair, en fait j'ai des div pour chaque chapitre (mon foreach), avec comme id chapitre+$i, et j'aurai aimé changer le style de ce div si la position de la vidéo est comprise dans ce chapitre.

    Pas de flash :p

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 114
    Points : 61
    Points
    61
    Par défaut
    Je double poste car j'ai trouver la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function positionListener(obj) {
    	var mark_in = new Array;
    	<?php
            // Crée un tableau javascript des Mark in/out 
            foreach( $mark_in as $cle => $valeur )
            {
                echo "mark_in[$cle] = '$valeur';\n";
            } 
            ?>
    	var mark_out = new Array;
    	<?php
            foreach( $mark_out as $cle => $valeur )
            {
                echo "mark_out[$cle] = '$valeur';\n";
            }
            ?>
    	var long = <?php echo $long ?>; 
    	currentPosition = obj.position;
    	var i = 0;
    	for ( i = 0 ; i < long ; i++ )
    	{
    		if ( currentPosition >= mark_in[i] && currentPosition <= mark_out[i] )
    		{
    			// Code à ajouter
    		}
    		else
    		{
    			// Code à ajouter
    		}
    	}
    }
    Pour info j'utilise le player flash JW Player.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] interaction entre php et javascript
    Par gabay dans le forum Langage
    Réponses: 5
    Dernier message: 21/08/2008, 12h12
  2. [DOM] Petit conflit entre PHP et javascript
    Par sliderman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/04/2008, 17h05
  3. [PHP-JS] Communication entre Php et Javascript
    Par tlardoux dans le forum Langage
    Réponses: 3
    Dernier message: 08/09/2007, 13h39
  4. Réponses: 1
    Dernier message: 15/05/2006, 22h22
  5. Interaction entre PHP et Word/Excel
    Par NomUtilisateurDejaPris dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/04/2006, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo