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 :

Recherche syntaxe pour balises xml : description <desc> avec liens hypertextes dans popup


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Points : 38
    Points
    38
    Par défaut Recherche syntaxe pour balises xml : description <desc> avec liens hypertextes dans popup
    Bonjour,

    Je viens de m'inspirer d'un site ou blog pour afficher des données gpx ou xml sur des cartes utilisant OpenLayers.js version 2 : http://www.untourenvelo.ch/Carte_Plein_Ecran.html

    Dans le développement de ce site il est possible d'afficher des données gpx qui sont au format xml, pour les points d'intérêt appelés Waypoints, lorsqu'on clique sur l'un d'eux apparaît dans une fenêtre popup le nom de point.

    Dans mon utilisation je désirerai afficher une donnée complémentaire qui est comprise entre des balises <desc> et qui comporte un lien hypertexte permettant d'atteindre soit des photos ou une page html.

    Je pense avoir localisé dans le fichier "Carte_Plein_Ecran.js" : http://www.untourenvelo.ch/Carte_Plein_Ecran.js où est traité l'affichage de cette fenêtre popup

    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
    StyleGPX = new OpenLayers.StyleMap({
                    "default": new OpenLayers.Style({
    //Icone en fonction du type de waypoint, le nom du fichier png doit être identique au texte dans la balise sym du fichier gpx
                        externalGraphic: "../../images/GPS/${sym}.png",
                        pointRadius: 1,
                        //graphicHeight: 60,
                        graphicYOffset: -25,
                        graphicXOffset: -4,
     
    //Valid values for horizontal alignment: “l”=left, “c”=center, “r”=right.  
    //Valid values for vertical alignment: “t”=top, “m”=middle, “b”=bottom.  
    //Example values: “lt”, “cm”, “rb” 
                        label: "${name}",       
                        labelAlign: 'rb',
                        fontSize: 11,
                        fontFamily: "Arial",
                        fontColor: "black",
                        labelYOffset: 0,
                        labelXOffset: -10,
                        fillColor: "ffcc66",
                        //strokeColor: "#ff00ff",
                        strokeColor: "${CouleurLigne}",
                        strokeWidth: 4, 
                        strokeOpacity: 0.6,
    					cursor:"pointer"
    //Supported values include “circle”, “square”, “star”, “x”, “cross”, and “triangle”.
    //graphicName: "circle",
                    },{context: ConditionsStyle} ),
                    "select": new OpenLayers.Style({
                        externalGraphic: "../../images/GPS/${sym}.png",
                        graphicYOffset: -32,
                        graphicXOffset: -5,
                        pointRadius: 20,
                        fillColor: "#66ccff",
                        strokeColor: "#3399ff",
                        graphicZIndex: 2,
     
                    })
                });
     
     
    StyleGPX.styles["default"].defaultStyle.externalGraphic = "";
    StyleGPX.styles["default"].defaultStyle.pointRadius = 2;
    StyleGPX.styles["default"].defaultStyle.label = "";
    Mon fichier xml à cette forme

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <gpx version="1.1" creator="Locus Android"
     xmlns="http://www.topografix.com/GPX/1/1"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
     xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"
     xmlns:gpxtrkx="http://www.garmin.com/xmlschemas/TrackStatsExtension/v1"
     xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1"
     xmlns:locus="http://www.locusmap.eu">
    <wpt lat="27.759667" lon="-10.606667">
    <name><![CDATA[Nom du waypoint]]></name>
    <sym>peinture-1</sym>
    <desc><a href="http://lien url vers le site web"" target="_blank">Lien vers le site</a></desc>
    </wpt>
    <gpx>
    C'est un fichier que j'ai déjà utilisé sur Locusmap sur une tablette sous Android. Si nécessaire je peux modifier la syntaxe entre les balises <desc>

    Quelles seraient la ou les lignes à ajouter dans ce fichier "Carte_Plein_Ecran.js" qui permettraient l'affichage de ce lien hypertexte ?

    Dans d'autres affichages de waypoints sur des cartes que j'ai créées utilisant également OpenLayers.js, ce sont des fichiers html avec des lignes pour chaque waypoints qui me permettent l'affichage de ce lien dans la fenêtre popup

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    vectorLayer5.addFeatures(feature);
    var feature = new OpenLayers.Feature.Vector(
    new OpenLayers.Geometry.Point(-10.609385,26.283814).transform(epsg4326, projectTo),
    {description:"MP-Tifariti<br><a style='background-color: #ffcc99;' href='lien html'  target='_blank;'>Lien vers le site</a>"},
    {externalGraphic: 'markers/mp-1.png', graphicHeight: 25, graphicWidth: 20, graphicXOffset:-10, graphicYOffset:-25  }
     );
    Je m'intéresse à la possibilité d'utiliser des fichiers gpx qui serait plus aisée dans la mise en œuvre, car je dois traiter plusieurs centaines de waypoints avec ces liens.

    Je vous remercie de votre aide

    Bernard

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Je pense que l'affichage de cette popup n'est pas géré où je le pensais mais à ce niveau dans le fichier : http://www.untourenvelo.ch/Carte_Plein_Ecran.js

    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
     
    function onFeatureSelect(event) {
                var feature = event.feature;
                // Since KML is user-generated, do naive protection against Javascript
                //var content = "<h4>"+feature.attributes.name + "</h4>" + feature.attributes.description;
                var content = feature.attributes.name;
                if (content.search("<script") != -1) {
                    content = "Content contained Javascript! Escaped content below.<br />" + content.replace(/</g, "&lt;");
                }
                popup = new OpenLayers.Popup.FramedCloud("MyPopUp", 
                                         feature.geometry.getBounds().getCenterLonLat(),
                                         new OpenLayers.Size(100,100),
                                         content,
                                         null, 
                                         true, 
                                         onPopupClose);
                feature.popup = popup;
                map.addPopup(popup);
            }
    J'ai modifié la ligne : var content = feature.attributes.name + feature.attributes.description;

    Ainsi que le fichier gpx

    Code xml : 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
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <gpx version="1.1" creator="Locus Android"
     xmlns="http://www.topografix.com/GPX/1/1"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
     xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"
     xmlns:gpxtrkx="http://www.garmin.com/xmlschemas/TrackStatsExtension/v1"
     xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1"
     xmlns:locus="http://www.locusmap.eu">
    <wpt lat="30.765091" lon="-5.712607">
    <name><![CDATA[GR-Abdi n'Ilemchane]]></name>
    <sym>gravure-1</sym>
    <desc>site</desc>
     <link href="lien html">
     <text> "Lien site" </text>
     <type>lien</type>
     </link>
    </wpt>
    </gpx>

    En ce moment quand je clique sur ce waypoint j'ai cette fenêtre popup

    Nom : fenetre-popup-1.jpg
Affichages : 69
Taille : 8,3 Ko

    Il semble y avoir du mieux mais je ne suis pas encore arrivé au but recherché...

    Bernard

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    j'ai l'impression que c'est cette ligne label: "${name}" qui prend en compte ce qui doit s'afficher, ligne #13 du premier code que tu as inséré.

    [Edit]
    Effectivement !! mais si l'on regarde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var content = "<h4>"+feature.attributes.name + "</h4>" + feature.attributes.description;
    il n'existe pas de champ description mais desc et autres dans ton fichier.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Points : 38
    Points
    38
    Par défaut
    Bonjour NoSmooking,

    Je te remercie, j'avais vu ta première réponse et découvre ta deuxième.

    Comme tu l'écris il n'y a que des balises <desc> </desc>, j'ai essayé de remplacer dans le fichier xml cette balise par <description> </description>, je n'ai plus l'erreur "undefined" par contre je n'arrive pas trouver la syntaxe à introduire pour que ce soit reconnu comme un lien.

    Dans mes fichiers html qui fonctionnent également sous openlayers.js version 2.13 la syntaxe est celle indiquée ci-dessous que j'ai mise en bas du premier post

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {description:"MP-Tifariti<br><a style='background-color: #ffcc99;' href='lien html'  target='_blank;'>Lien vers le site</a>"},
    J'ai essayé plusieurs combinaisons dans le fichier xml entre les balises <description>, mais pour le moment j'ai en affichage soit du texte, soit mes waypoints n'apparaissent plus la carte, mais plus cette erreur "undefined"

    Un petit pas de plus vers la solution, enfin j'espère... Je ne me décourage pas comme ça

    Bonne soirée et merci de t'être penché sur ma recherche

    Bernard

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Tu devrais écrire dans ton XML en passant par une section CDATA
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <desc><![CDATA[<a href="http://lien url vers le site web"" target="_blank">Lien vers le site</a>]]></desc>

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Points : 38
    Points
    38
    Par défaut
    Bonsoir NoSmooking,

    Je te remercie de ta réponse, je viens d'essayer la syntaxe proposée dans le fichier xml, j'ai dans la fenêtre popup en plus du nom du waypoint : "Undefined"

    Pour le moment toutes les syntaxes que j'ai essayées ont échoué...

    Pourtant cette API peut gérer l'affichage de liens dans les fenêtres popup, car en html ça fonctionne. C'est probablement l'interprétation en javascript qui doit poser problème

    Bonne soirée

    Bernard

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Points : 38
    Points
    38
    Par défaut
    Bonsoir NoSmooking,

    Ça y est ça fonctionne

    En poursuivant mes recherches j'ai trouvé des lignes de codes différentes pour gérer la fenêtre popup

    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 onFeatureSelect(event) {
        var feature = event.feature;
        var layerName = event.feature.layer.name;
        var content = "unInitialized";
        // alert ('selected this feature='+feature.id+ '<br/>Atributos: '+feature.attributes.description);
        if ( (feature.attributes.name > '') || (feature.attributes.description > '') ) {
            content = feature.attributes.name + '<br/>'+feature.attributes.description;
        } else {
            if (feature.cluster) {
                content = feature.attributes.count + ' ' + layerName ;
                for (var i = 0; i < feature.attributes.count; i++) {
                        var feat = feature.cluster[i];
                        content += '<br/>'+feat.attributes.name;
                }
            } else {
                content = 'NOT a cluster either';
            }
        }
     
        popup = new OpenLayers.Popup.FramedCloud("chicken", 
                                 feature.geometry.getBounds().getCenterLonLat(),
                                 new OpenLayers.Size(100,100),
                                 content,
                                 null, true, onFeatureUnselect);
        popup.setBackgroundColor('white');
        feature.popup = popup;
        map.addPopup(popup);
    	    // GLOBAL variable, in case popup is destroyed by clicking CLOSE box
        lastfeature = feature;
        // alert ('select'+lastfeature.name);
    }
    Puis en utilisant la syntaxe que tu m'as proposée en mettant les balises <description> à la place de <desc> maintenant j'ai bien le lien hypertexte dans la fenêtre, ouf... comme quoi il ne faut pas perdre espoir d'aboutir

    La difficulté est de rechercher la solution en modifiant le fichier en javascript et la syntaxe du lien dans le fichier xml, ça fait énormément de combinaisons à essayer

    Encore merci et bonne soirée

    Bernard

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 30/07/2009, 23h09
  2. recherche syntaxe pour afficher une video dynamique
    Par ploufleouf74 dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2009, 15h37
  3. Bouton pour ajouter un lien hypertexte dans un champ
    Par Fredo67 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/01/2008, 11h43
  4. [RegEx] Expression régulière pour balises XML
    Par vodasan dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2008, 08h31
  5. charger un xml avec liens hypertextes
    Par lecirederf dans le forum Flash
    Réponses: 12
    Dernier message: 23/10/2006, 15h03

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