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 :

déboguage d'une fct censée afficher la photo des personnes quand la souris survole leur nom


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut déboguage d'une fct censée afficher la photo des personnes quand la souris survole leur nom
    Bonsoir,

    qqun aurait-il la patience de décortiquer le code suivant ? Je ne peux montrer le site correspondant car c'est un intranet. En gros, on récupère des infos (nom, adresse, téléphone, URL photo...) sur des employés (à partir d'un fichier XML), dont on souhaite afficher la photo qd la souris survole leur nom. Tout marche bien (récupération des infos et affichage du nom de chq employé ; le pb, c'est que qd la souris survole le nom des employés, c'est systématiquement la photo du 1er qui s'affiche. Et j'ai beau avoir passé plusieurs jours dessus, rien n'y fait . J'ai rajouté ds le code des commentaires pour indiquer où tout va bien et où se situe le pb. Si qqun pouvait regarder ça, ça serait charitable. (Les variables "h_xxx" sont des variables système)

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <script></script>
      <title>Member ID - Author : Laurent Schmitt - All rights
    reserved le 2 (et plus) octobre 2009</title>
      <style>.photo div.popup{visibility: hidden;
    z-index: 10;
    top: 120px;
    left: 200px;
    position: absolute;
    background-color:white;
    border-color:black;
    }
    span:hover.photo div.popup{
    visibility: visible;
    }
    span .photo div:hover.popup{
    visibility: visible;
    }
      </style>
    </head>
    <body>
    <script>
    function extract_First_LastName(ch)
    {
    //
    // Cette fct marche (inutile de s'attarder)
    //
    var chaineCN=ch.indexOf("CN=");
    var blanc=ch.indexOf(" ");
    var coma=ch.indexOf(",");
    var FirstName=ch.substring(chaineCN+3,blanc);
    var LastName=ch.substring(blanc+1,coma);
    //mise en forme
    var URL='http://ids.schneider-electric.com/global/corp/ecd.nsf/EmployeesCard?readviewentries&startkey='+LastName+'%2C%20'+FirstName+'&count=3';
    return URL;
    }
    //
    //
    //
    function extract_NotesID(ch) // nom au format 'CN=Laurent Schmitt,OU=FR,O=Schneider'
    {
    //
    // Cette fct marche (inutile de s'attarder)
    //
    ch=ch.replace("CN=","");ch=ch.replace(",OU=","/");
    do { // retirer tous les ",O=" (il peut y en avoir plusieurs)
    ch=ch.replace(",O=","/");
    }
    while (ch.indexOf(",")!=-1);
    //document.write(ch+"<br>");
    return ch;
    } // nom au format 'Laurent Schmitt/FR/Schneider'
    function loadsesa(username){ // nom au format 'CN=Laurent Schmitt,OU=FR,O=Schneider'
    var sesa="h_sesaList";
    var xmlsesa = new ActiveXObject("Microsoft.XMLDOM");
    xmlsesa.async="false";
    xmlsesa.load(extract_First_LastName(username)); // appel URL de l'annuaire international
    var sesaArray = new Array();
    var topEntry=xmlsesa.selectSingleNode("viewentries");
    var entry=xmlsesa.selectSingleNode("viewentries/viewentry");
    var ind=0;
    if (entry!=null){
    do {
    var sUnid = entry.getAttribute('unid');
    var Item = entry.childNodes.item(2); /* "2" correspond à la colonne du xml contenant le code SESA ds un fichier de ce type : http://ids.schneider-electric.com/global/corp/ecd.nsf/EmployeesCard?readviewentries&startkey=Schmitt%2C%20Laurent */
    var name = Item.getAttribute('name');
    var sItemText = Item.text;
    var value = sItemText;
    sesaArray[ind] = value;
    //document.write("SESA["+ind+"]="+sesaArray[ind]+"<br>");
    entry=entry.nextSibling;
    ind++;
    } // do
    while (entry!=null)
    }
    return sesaArray; // renvoie un tableau de codes SESA selon le paramètre "count" de l'URL
    }
    //
    //
    //
    function display_photo(photo,prenom,nom)
    {
    //
    // Cette fct marche (inutile de s'attarder) ; j'utilise un code html + js 
    // fortement échappé (\).
    //
    if (photo.length>0) {
    while(photo.indexOf(" ")!=-1)
    {
    photo=photo.replace(" ","%20");
    }
    document.write("<font color=\"blue\"><\/font>");
    document.write("<span onmouseover=\"document.getElementById(\'popupid\').style.visibility = \'visible\';\"><span");
    document.write(" class=\"photo\">"+prenom+" "+nom+"<span");
    document.write(" onmouseout=\"document.getElementById(\'popupid\').style.visibility = \'hidden\';\">");
    document.write("<div style=\"visibility: hidden;\" class=\"popup\"");
    document.write(" id=\"popupid\"><span><img");
    document.write(" src="+photo+"><\/span><br><\/div>");
    document.write("<\/span><\/span><\/span><\/font><br>");
    }
    else { document.write("<br>");}
    }
    //
    //
    //
    function load_personal_data(sesa){
    //
    // Le pb est là : malgré la boucle qui est censée parcourir plusieurs employés, le nom de chacun est correct
    // par contre la photo qui s'affiche qd la souris survole ce nom est la même pour tous les employés !
    //
    var i=0,URL,sesa,xmlsesa;
    var sesainfo = new Array(2);
    sesainfo[0] = new Array(2);
    sesainfo[1] = new Array(2);
    var topEntry,entry;
    var nomemploye,prenomemploye,adresseemploye,villeemploye,siteemploye,telemploye,cellemploye,mailemploye,value;
    for (i=0;i<sesa.length;i++) { // parcourir tous les codes SESA (c'est avec ça qu'on identifie informatiquement chaque employé)
    // construire l'URL avec les infos donn&eacute;es par le code SESA du type :
    // http://ids.schneider-electric.com/global/corp/ecd.nsf/xmlemployeesactivebyguid?readviewentries&amp;StartKey=SESA21805&amp;count=1)
    // appeler l'URL (cette URL va chercher un fichier XML, contenant plein d'infos sur l'employé)
    sesa="h_sesaList";
    xmlsesa = new ActiveXObject("Microsoft.XMLDOM");
    xmlsesa.async="false";
    xmlsesa.load(URL); // appel URL du code XML à partir du code SESA
    //pour chq item intéressant,
    // récupérer la valeur
    topEntry=xmlsesa.selectSingleNode("viewentries");
    entry=xmlsesa.selectSingleNode("viewentries/viewentry");
    //var sUnid2 = entry.getAttribute('unid');
    nomemploye=entry.childNodes.item(2);
    prenomemploye=entry.childNodes.item(4);
    adresseemploye=entry.childNodes.item(26);
    villeemploye=entry.childNodes.item(30);
    siteemploye=entry.childNodes.item(25);
    telemploye=entry.childNodes.item(14);
    cellemploye=entry.childNodes.item(16);
    mailemploye=entry.childNodes.item(10);
    idnotesemploye=entry.childNodes.item(9);
    urlphotoemploye=entry.childNodes.item(37);
    sesainfo[i][0] = nomemploye.text;
    sesainfo[i][1] = prenomemploye.text;
    sesainfo[i][2] = adresseemploye.text;
    sesainfo[i][3] = villeemploye.text;
    sesainfo[i][4] = siteemploye.text;
    sesainfo[i][5] = telemploye.text;
    sesainfo[i][6] = cellemploye.text;
    sesainfo[i][7] = cellemploye.text;
    sesainfo[i][8] = idnotesemploye.text;
    sesainfo[i][9] = urlphotoemploye.text;
    display_photo(urlphotoemploye.text,prenomemploye.text,nomemploye.text);
    // Le problème est que malgré la boucle, la photo affichée est la même pour tous les employés
    } // end for
    return sesainfo;
    }
    </script>
    //
    //
    //
    <table border="0" width="100%">
      <tbody>
        <tr>
          <td class="h-fieldHeaderEdit-bgtext">
          <script>
    var sesaArray=loadsesa(h_LastEditorDistinguishedName);
    extract_NotesID(h_LastEditorDistinguishedName);
    load_personal_data(sesaArray);
          </script></td>
        </tr>
      </tbody>
    </table>
    </body>
    </html>

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Par défaut
    Je sais pas si le problème vient de là mais y'a un truc que je trouve vraiment bizarre: tu déclares un tableau à 2 dimensions de 2 cases sur 2 cases et ensuite tu utilises des coordonnées qui sortent du tableau.

    Il me semble que je t'avais répondu à comment déclarer un tableau ou je t'avais mit cet exemple de déclaration, mais c'était pour un tableau de 2 cases sur 2 cases.

    Après il faut adapter ça à la taille que tu veux.

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse ; donc le pb est là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [sesainfo[0] = new Array(2);
    sesainfo[1] = new Array(2);
    et ce sont la taille de ces deux tableaux qu'il faudrait augmenter ?

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Par défaut
    Bonjour,

    Tu déclares des variables locales mais je n'y retrouve pas 'urlphotoemploye' (par contre value est déclarée mais pas utilisée). N'aurais-tu pas une variable globale de même nom ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var nomemploye,prenomemploye,adresseemploye,villeemploye,siteemploye,telemploye,cellemploye,mailemploye,value;

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Merci pour vos 2 réponses : je les testerai dès que le serveur utilisé pour le site intranet remarche (pour l'instant, il est HS).
    Je n'ai pas de variable "value" globale ; j'ai remplacé sa déclaration par celle de "urlphotoemploye" ; j'ai également passé les tableaux sesainfo[0 et 1] à des tailles respectives de 3 et 9. De plus, j'ai corrigé un bug que vous ne m'aviez pas signalé : ds la fct à pb, il y avait une variable locale qui portait le même nom que le paramètre ("sesa").
    Je suis impatient de pouvoir tester tout ça. J'avais bien essayé de tout reproduire en local pour tester la fct, mais je n'y suis pas arrivé (en tout cas, ce que vous m'avez signalé expliquerait bien le pb : c'est juste la photo qui ne s'affiche pas correctement alors que les noms sont corrects : et c'est justement les 2 1ers paramètres du tableau ; la seule chose bizarre est que un des noms qui s'affiche est sur la 3e ligne du tableau...)

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Par défaut
    C'est tout à fait la réflexion que je me suis faite à vrai dire.

    Si au passage tu as toujours un doute sur comment t'as déclaré ton tableau, il te faut faire comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var sesainfo = new Array[3]
    sesainfo[0] = new Array[9]
    sesainfo[1] = new Array[9]
    sesainfo[2] = new Array[9]

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

Discussions similaires

  1. [AC-2007] Photo des personnes
    Par titi57 dans le forum IHM
    Réponses: 6
    Dernier message: 08/08/2013, 14h16
  2. Réponses: 1
    Dernier message: 07/02/2013, 15h10
  3. [1.x] Afficher la liste des personnes connectées
    Par babyboy6492 dans le forum Symfony
    Réponses: 4
    Dernier message: 29/11/2010, 18h42
  4. [MySQL] Afficher les photos des annonces
    Par yanng dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 09/03/2009, 00h24
  5. Afficher les photos des salariés dans un état
    Par cedricvmtubes dans le forum IHM
    Réponses: 4
    Dernier message: 14/01/2009, 13h42

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