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

Langage PHP Discussion :

[PHP-JS] Générer grille d'image cliquables mais dans un autre langage


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 41
    Points : 25
    Points
    25
    Par défaut [PHP-JS] Générer grille d'image cliquables mais dans un autre langage
    Bonjour,

    mon site affiche une carte, découpé en images cliquable (pour s'y déplacer), tous marche bien, je génère à l'aide du php le code html pour intégrer chacune des cases sur la page web.

    Le problème c'est que pour afficher jusqu'à 200 cases, ça fait beaucoup de code html!!! (ça prend un certain temps à télécharger le code...)

    voici comment j'ai fait :

    Code php : 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
     
    for($i=1; $i<=$nbTotalCases; $i ++){
     
    echo "
    	<li> 
    	<a href='#' id='".$i."'";
    	$valide = testCase($caseJoueur, $i, $tabMap);
    	if($valide){ 
    	      echo "onclick='changeCase(this.id);'>";} 
                 else{ echo ">";}	?>
     
    <?php     if($caseJoueur == $i){ 
    	        echo "<img src='".$pathPosition."' border='0'";} ?>
     
    <?php     if ($valide){ 
    	        echo "<img src='".$pathMouseOff."' id='cases"; 
    	        echo $i; 
    	        echo "' onMouseOver='on(this.id)' onMouseOut='off(this.id)' border='0'
    	        style='filter: alpha(opacity=25)' />";
    	} ?>
    <?php     echo "</a></li>"; 
     
    	if(($i%$nbLargeur==0) AND ($i!=$nbTotalCases)){
    	        echo"</ul><ul id='bloc'>";
    	}
    ?><?php		
    }
    ?>
    ce qui donne en html :

    par exemple pour la case 133 non cliquable:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <li><a href='#' id='133'></a></li>
    et la case 134 qui est cliquable :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <li><a href='#' id='134'onclick='changeCase(this.id);'> 
    <img src='./map/map2/vide.gif' id='cases134' 
    onMouseOver='on(this.id)' 
    onMouseOut='off(this.id)' 
    border='0' style='filter: alpha(opacity=25)' /></a></li>
    Donc pour 200 cases, on retrouve 200 fois ce texte, ça fait beaucoup au final!!! J'aimerai maintenant codé ceci par exemple en javascript ou un autre langage de sorte à ce que ce code soit généré sur le pc du visiteur, et non sur le serveur en php. Celà permettrai d'économiser des ressources serveur, et d'avoir moins de code html à envoyer.


  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Points : 128
    Points
    128
    Par défaut Css
    Tu peux l'alléger avec du css :

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .imgCliquable {
    background-image: url("./map/map2/vide.gif") ;
    border-style : none;
    filter: alpha(opacity=25);
    }

    Ton image cliquable devient :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <li><a href='#' id='134' onclick='changeCase(this.id);'> 
    <img class="imgCliquable" id='cases134' 
    onMouseOver='on(this.id)' 
    onMouseOut='off(this.id)' /></a></li>

    Je pense qu'il doit être possible également d'associer les évènements souris à une classe d'objet...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Et pourquoi ne pas faire des boucles php?

    J'ai un systeme a peu pres identique et j'ai fais des boucles imbriqués avec une id qui est id="YYXX" ce qui te permet de te retrouver dans ton tableau en dynamique.

  4. #4
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    Citation Envoyé par titfab
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <li><a href='#' id='134' onclick='changeCase(this.id);'> 
    <img class="imgCliquable" id='cases134' 
    onMouseOver='on(this.id)' 
    onMouseOut='off(this.id)' /></a></li>
    Un peu de rigueur dans e code HTML parce que là c'est pas top :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <li><a href="#" id="134" onclick="changeCase(this.id);"> 
    <img class="imgCliquable" id="cases134" 
    onmouseover="on(this.id)" 
    onmouseout="off(this.id)" /></a></li>
    Citation Envoyé par zulot
    Et pourquoi ne pas faire des boucles php?
    Parce que le PHP génère du HTML et que son souci est justement d'en générer moins.

    Pour ton souci maxfive7, ce que tu peux faire c'est donner une classe à tes images cliquables, récupérer cette classe via un script Javascript et utiliser à ce moment les fonction d'évènement.

    Pour ce qui est de l'opacité, utilise ceci dans un CSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    filter: alpha(opacity=25)
    opacity:0.25
    -khtml-opacity;0.25
    -moz-opacity;0.25
    ainsi tu auras une image translucide dans tous les navigateurs (ce n'est pas CSS).

    Au niveau de ton code PHP, il y a une erreur je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php     if($caseJoueur == $i){ 
    	        echo "<img src='".$pathPosition."' border='0'";} ?>
     
    <?php     if ($valide){ 
    	        echo "<img src='".$pathMouseOff."' id='cases"; 
    	        echo $i; 
    	        echo "' onMouseOver='on(this.id)' onMouseOut='off(this.id)' border='0'
    	        style='filter: alpha(opacity=25)' />";
    	} ?>
    avec ce code tu pourrais te retrouver avec ceci :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src='ton_chemin_$pathPosition' border='0' <img src='ton_chemin_$pathMouseOff' id='casesxxx' ...;
    donc avec 2 balises img imbriquées bizarrement.

    PS : pourquoi fermes-tu les balises PHP pour les réouvrir juste après ???
    PS 2 : en HTML on fait <balise attribut="valeur" ...> et non pas <balise attribut='valeur' ...>

  5. #5
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut !

    Ce qui prend du temps au chargement de la page, c'est certainement les 200 images de quelques Ko qui doivent être téléchargées dans le cache du navigateur pour être ensuite affichées.

    Voici une autre technique que tu peux essayer : avoir une seule image (la carte complète) et utiliser la balise html <map> qui te permet de définir des zones cliquables sur cette image.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <img usemap="#Map" src="ma_carte.gif" border="0" width="560" height="559" />
    <map name="Map">
    <area shape="poly" coords="90,110,97,109" href="page1.html" />
    <area shape="poly" coords="79,219,94,218" href="page2.html" />
    <area shape="poly" coords="90,219,34,218" href="page3.html" />
    </map>
    Chaque balise <area> correspond à une zone cliquable, il te suffit donc de les mettre dans ta boucle avec les bons paramètres !

    En espérant que ca t'aide à résoudre ton problème !

    A++

Discussions similaires

  1. [WD-2010] Remplacer un mot par le même MAIS dans une autre couleur
    Par goldvin dans le forum Word
    Réponses: 4
    Dernier message: 16/01/2012, 01h30
  2. [MySQL] Mettre une image cliquable sur un lien en PHP
    Par qmike dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/07/2010, 12h54
  3. Réponses: 7
    Dernier message: 10/06/2009, 22h29
  4. [PHP-JS] Image cliquable via echo
    Par Martony74 dans le forum Langage
    Réponses: 11
    Dernier message: 24/10/2008, 00h07
  5. [PHP-JS] Affichage d'une image dans une popup à la taille
    Par urbanspike dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2005, 20h53

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