[PHP] concaténation dans une boucle

Fermé
Ourse Messages postés 7 Date d'inscription samedi 14 juillet 2007 Statut Membre Dernière intervention 22 juillet 2007 - 14 juil. 2007 à 19:34
Ourse Messages postés 7 Date d'inscription samedi 14 juillet 2007 Statut Membre Dernière intervention 22 juillet 2007 - 22 juil. 2007 à 22:19
Bonjour,

J'utilise une boucle PHP pour afficher une liste de liens.
Voici l'extrait de la boucle concerné :
$title = $article["title"];
		$link = $article["link"];
		$description = $article["description"];
		$page .= "<li><a href=\"$link\">$title</a>";
		if($description != false)
		{
			$page .= "<br>$description";
		}
		$page .= "</li>\n";			
		
		if($type==0)
		{
			$page .="</b><br />";
		}


Je voudrais ajouter un rollover sur chaque lien.

Donc, j'essaie de rajouter dans la concaténation, la chaîne :
onMouseOver=\"cache('map');montre('text')\"  onMouseOut=\"cache('text');montre('map')\"


J'ai essayé plusieurs formes de concaténation. Ça ne marche pas.

Pouvez-vous m'aider svp ?

2 réponses

Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
14 juil. 2007 à 20:10
Bonsoir Ourse,

Ca dépend aussi du code JavaScript, c'est peut-être lui qui est en tort.

Le onmouseover et le onmouseout sont bien mis à l'intérieur du "<a>", avant ou après le "href" ?

$page .= "<li><a href=\"$link\" onmouseover=\"cache('map');montre('text')\" onmouseout=\"cache('text');montre('map')\">$title</a>";

Donc il faut bien que ton HTML contienne deux balises identifiées "text" et "map" et que je JavaScript (par un document.getElementById("lenomdelabalise")) utilise la propriété visibility, mise à "visible" dans un cas et "hidden" dans l'autre.

Quoiqu'il en soit c'est le résultat final en HTML qui compte. Donc compare le code retourné par le script avec tes attentes. Et au fait je ne suis pas certain que "onmouseout" et "onmouseover" prennent des majuscules mais dans ce cas précis ça ne devrait pas avoir d'incidence.
0
Bonsoir Posotaz et merci.

Oui, j'ai bien isolé la source du problème.
Le javascript fonctionne très bien et les div text et map existent :
la portion que j'essaie d'insérer dans le php, je l'ai d'abord testée sur un autre lien de la même page, mais codée "en dur". Elle donne exactement le comportement attendu.

Je viens d'essayer avec la ligne que tu proposes. Cela donne le même résultat étonnant que j'avais moi avant de poser la question ici :

la portion [onmouseover=\"cache('map');montre('text')\" onmouseout=\"cache('text');montre('map')\"] semble ignorée. La liste de liens s'écrit dans le navigateur client comme si elle n'existait pas !
J'ai bien vérifié sur le serveur que le code php avait été uploadé dans sa version corrigée.

C'est un vrai mystère ! Je ne comprends pas.
0
Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 778
15 juil. 2007 à 19:26
Bonjour,

Tu te simplifierais peut-être la vie en utilisant des CSS ?
Le style s'appliquant aux <a> munis de la “class="liens_liste"”, seuls ceux de la liste seront concernés.

Par exemple :
  a.liens_liste {
    color : #fff;
    text-decoration : underline overline;
    }
  a.liens_liste:hover {
    color : #000;
    text-decoration : none;
    }
etc. (avec des images c'est aussi possible).

et
  $page .= "<li><a class="liens_liste" href=\"$link\">$title</a>";
0
Ourse Messages postés 7 Date d'inscription samedi 14 juillet 2007 Statut Membre Dernière intervention 22 juillet 2007
16 juil. 2007 à 17:25
Merci Gihef, mais ma question porte sur du contenu dynamique, pas sur du style.
D'ailleurs, j'utilise bien les CSS, très pratiques, tu as raison.
Et mes feuilles de styles sont valides W3C ;-) Mon code XHTML 1.1 aussi ;-))
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 juil. 2007 à 17:38
Bonsoir,

Tu pourrais nous montrer ce que donne ton code php ?
Et un bout du code html généré ?

Merci,

Xavier
0
Ourse Messages postés 7 Date d'inscription samedi 14 juillet 2007 Statut Membre Dernière intervention 22 juillet 2007 > Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
16 juil. 2007 à 22:45
Bonsoir Xavier,

Voici la portion de code PHP concernée. Elle est dans une <div> :

$page .="<ul>\n";

   foreach($recents as $article)
   {
      $type = $article["type"];
      if($type == 0) continue;
      $title = $article["title"];
      $link = $article["link"];
      $page .= "<li><a href=\"$link\">$title</a></li>\n";         
   }

   $page .="</ul>\n";
   return $page; 
}


Le html retourné est une liste. En voici un extrait :

<ul>
<li><a href="https://xxxvideoporn.xxx/">Article 1</a></li>
<li><a href="http://www.yyy/">Article 2</a></li>
[ETC]
</ul>


Je voudrais insérer dans le code PHP un instruction de rollover pour permettre d'afficher au 1er plan, dans un bloc voisin qui contient une image (z-index:0), un autre bloc (z-index=1)avec des informations complémentaires sur l'article dont on survole le titre ; cela permettrait à l'utilisateur de savoir si l'article l'intéresse vraiment avant qu'il ne clique.


Côté code javascript, c'est du tout classique et cela fonctionne très bien sur un lien simple (hors de la liste produite par php )

<script language="javascript">
  function montre(id) {
	  if (document.getElementById) {
		  document.getElementById(id).style.visibility="visible";
		} else if (document.all) {
		  document.all[id].style.visibility="visible";
		} else if (document.layers) {
		  document.layers[id].visibility="visible";
		} } 
		
    function cache(id) {
	  if (document.getElementById) {
		  document.getElementById(id).style.visibility="hidden";
		} else if (document.all) {
		  document.all[id].style.visibility="hidden";
		} else if (document.layers) {
		  document.layers[id].visibility="hidden";
		} }
</script>




Donc, je voudrais insérer, dans le code de chaque ligne de la liste, donc dans le code PHP qui fabrique cette liste :

onMouseOut="cache('map');montre('text')" onMouseOut="cache('text');montre('map')"


map et text sont respectivement les id des zones image et texte qui doivent alterner.

Merci par avance.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > Ourse Messages postés 7 Date d'inscription samedi 14 juillet 2007 Statut Membre Dernière intervention 22 juillet 2007
17 juil. 2007 à 09:36
Bonjour,

En fait c'est surtout le code qui ne marche pas qui m'intéresse ;)

Xavier
0
Alain42 > Ourse Messages postés 7 Date d'inscription samedi 14 juillet 2007 Statut Membre Dernière intervention 22 juillet 2007
17 juil. 2007 à 15:13
Est ce qu'une infoBull t'irrai:

Mettre des informations a l'aide d'une bulle lorsque vous passez votre souris sur un lien

Bien souvent vous souhaitez informer l'internaute sur le lien d'une page. Cette information consiste a expliquer par un court texte le contenu de la page avant de cliquer sur le lien:

* <a href="url de votre lien" target="_blank" title="texte souhaité pour expliquer le lien"></a>
* Exemple avec ce lien (Placez juste votre souris sur le lien sans cliquer et attendez que l'infobulle s'affiche ):

* Trucs et Astuces Astwinds

Voici la balise pour obtenir ce résultat:
<a href="https://1map.com/fr/astwindscom" target="_blank" title="Tous les trucs et Astuces pour Windows Xp et la conception de votre site sur https://1map.com/fr/astwindscom">Trucs
et Astuces Astwinds</a>

<a href= ouvre la balise du lien

"url de votre lien" lien de la page vers laquelle pointe votre lien. Dans ce cas le lien pointe sur la page d'accueil d'Astwinds

target="_blank" votre page s'ouvrira dans une autre fenêtre

title="Tous les trucs et Astuces pour Windows Xp et la conception de votre site sur https://1map.com/fr/astwindscom"> Texte que vous souhaitez afficher lorsque l'internaute passe la souris sur le lien sans cliquer

Le texte en bleu est le texte visible du lien sur votre page

</a> ferme la balise du lien
0