rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[PHP] concaténation dans une boucle

Posté par Ourse, le samedi 14 juillet 2007 à 19:34:50
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 ?
Configuration: Mac OS X
Firefox 2.0.0.4
Répondre à Ourse  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Posotaz, le samedi 14 juillet 2007 à 20:10:31
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')\">$tit­le</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.
Répondre à Posotaz

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Ourse, le samedi 14 juillet 2007 à 22:11:57
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.
Répondre à Ourse

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Gihef, le dimanche 15 juillet 2007 à 19:26:51
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>";
 
Répondre à Gihef

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Ourse, le lundi 16 juillet 2007 à 17:25:34
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 ;-))
Répondre à Ourse

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Reivax962, le lundi 16 juillet 2007 à 17:38:51
Bonsoir,

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

Merci,

Xavier
Répondre à Reivax962

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Ourse, le lundi 16 juillet 2007 à 22:45:17
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&qu­ot;;         
   }

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


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

<ul>
<li><a href="http://www.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&q­uot;;
		} 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&qu­ot;;
		} 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.
Répondre à Ourse

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Reivax962, le mardi 17 juillet 2007 à 09:36:14
Bonjour,

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

Xavier
Répondre à Reivax962

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Ourse, le mardi 17 juillet 2007 à 19:53:36
Dans le fil, j'ai déjà exposé que j'avais essayé la concaténation suivante :
$page .= "<li><a href=\"$link\" onmouseover=\"cache('map');montre('text')\" onmouseout=\"cache('text');montre('map')\">$tit­le</a>"; 


Dans le html résultant, la partie onmouseover--> onmouseout est ignorée. La ligne s'écrit comme une ligne usuelle de liste.
Répondre à Ourse

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Reivax962, le mardi 17 juillet 2007 à 20:21:20
Ah oui, je l'avais ratée...
Bref, effectivement, il n'y a aucune raison pour que cela ne marche pas.
Si, à la place du bloc complet, tu ne mets que " onmouseout ", sans rien d'autre (je sais, cela n'a aucun sens html, là n'est pas la question), est-ce qu'il apparait en sortie ou pas ?
Répondre à Reivax962

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Ourse, le mardi 17 juillet 2007 à 20:46:40
Je viens d'essayer :
$page .= "<li><a href=\"$link\" onmouseout>$title</a>";


Le mot "onmouseout" est tout simplement ignoré. C'est exactement là le mystère.
Est-ce un problème de syntaxe ou autre chose ?
Répondre à Ourse

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Reivax962, le mercredi 18 juillet 2007 à 09:25:40
Ben... Je ne vois que deux solutions possibles :
- tu n'ouvres pas le même fichier que celui que tu modifies ;
- ton navigateur garde en cache l'ancienne version et ne veut rien savoir. Auquel cas, essaie de bien raffraichir la page, de supprimer tes fichiers temporaires, voire carrément d'accéder à ton site depuis un autre navigateur.
Répondre à Reivax962

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alain42, le mardi 17 juillet 2007 à 15:13:12
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="http://www.astwinds.com/" target="_blank" title="Tous les trucs et Astuces pour Windows Xp et la conception de votre site sur http://www.astwinds.com/">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 http://www.astwinds.com/"> 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
Répondre à Alain42

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Ourse, le mardi 17 juillet 2007 à 19:55:24
Merci Alain. Mais non, une infobulle ne convient pas. J'ai besoin d'afficher un texte plus long et mis en forme, qui doit venir dans un bloc prédéfini et positionné à un endroit précis.
Répondre à Ourse

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alain42, le mardi 17 juillet 2007 à 20:04:21
Alors une piste:

ton lien appelle une foncton javascript /Ajax qui va appeler un script php en lui transmetant les valeurs voulues qui irra chercher les infos et chargera ensuite la réponse dans un div à l'endroit que tu veux dans ta page.

pour ça va voir sur google comment se font les appels AJAX
Répondre à Alain42

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alain42, le mardi 17 juillet 2007 à 22:36:26
voilà une fonction Javascript /Ajax qui devrait te convenir:

<script language="Javascript"type="text/JavaScript&qu­ot;>
// Requette AJAX
function makeRequest(url,valeur,id_ecrire){
	var http_request = false;
		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
        http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
		// lancement de la requete
		http_request.open('POST', url, true);
		//changer le type MIME de la requête pour envoyer des données avec la méthode POST ,  !!!! cette ligne doit etre absolument apres http_request.open('POST'....
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		data="val_sel=valeur;
        http_request.send(data);
}

function traitementReponse(http_request,id_ecrire) {
	var affich="";
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
					// cas avec reponse de PHP en mode texte:
			//chargement des elements reçus dans la liste
			var affich_list=http_request.responseText;
				obj = document.getElementById(id_ecrire); 
                obj.innerHTML = affich_list;
		} 
		else {
                alert('Un problème est survenu avec la requête.');
        }
    }
}
</script>


dans ta page tu met sur le lien onmouseOver=makeRequest('repPhpAjax.php','la_valeur_du_lien'­,'details');


tu mets un <div id="details">
//la apparaitra la réponse
</div>

tu fais un script php:
repPhpAjax.php

avec $valeur_passee=$_POST['valeur'];
variable que tu utilises pour interroger ta base et obtenir le complément d'info que tu mettra dans la variable $reponse

$reponse="..................................";
$reponse.="................................";


echo $reponse;

Cette reponse envoyée ainsi à Ajax sera affichée dans ton div.

Est ce que ça te va ?
Répondre à Alain42

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Reivax962, le mercredi 18 juillet 2007 à 09:23:46
Oui mais là, tu te heurtes à nouveau à son problème, qui est qu'il n'arrive pas à mettre de onmouseover dans son code...
Répondre à Reivax962

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Ourse, le dimanche 22 juillet 2007 à 22:19:16
Bonsoir,

Je reviens pour vous dire que j'ai résolu le problème.

Le code suivant marche très bien :
$page .="<li><a href=\"$link\"";	
		$page .= "onmouseover=\"cache('map');cache('map2');cache('m­ap3');montre('text')\"";	
	
	$page .= "onmouseout=\"cache('text');montre('map');montre('­map2');montre('map3')\">";	
	$page .= "$title</a></li>\n";	


J'ai laissé le problème de côté pendant 48 heures puis j'ai recommencé depuis le début et ça a marché.
Ce qui s'est passé : dans ma bibliothèque de fonctions, je ne mettais pas le code dans la bonne fonction. Il y a en a deux qui se ressemblent beaucoup : une qui fabrique le lien pour le code source et l'autre qui fabrique l'affichage pour le navigateur, je crois. Vraisemblablement, j'ai dû essayer sans m'en rendre compte dans le seconde fonction au lieu de la première.

Merci pour votre aide à tous. Ce qui m'a aidée, c'est que vous ne trouviez pas normal que ça ne marche pas. Cela m'a encouragée à persévérer.
Merci aussi pour la portion de code Ajax. je vais pouvoir l'essayer maintenant, ça m'intéresse.
Répondre à Ourse
Logiciels pertinents trouvés dans les téléchargements
Télécharger PHP Edit 0.6PHP Edit - PHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de...Catégorie: PHP
Licence: Freeware/gratuit
Télécharger WAMP Server 2.0cWAMP Server - WAMP5 (WAMP signifiant Windows Apache Mysql PHP) est une plateforme de développement Web sous Windows. Il vous permet de...Catégorie: Serveurs
Licence: Freeware/gratuit
Télécharger easyPHP 2.0b1easyPHP - EasyPHP est un environnement de travail packagé comprenant le serveur web Apache, le système de gestion de bases de données...Catégorie: Serveurs
Licence: Open Source
Télécharger PSPad 4.5.2PSPad - PSPad est un excellent éditeur de texte. Il est utile pour travailler sur du simple texte, mais aussi sur du HTML, CSS,...Catégorie: Développement
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [PHP] concaténation dans une boucle »