Faire une boucle en PHP

JB_A Messages postés 307 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour,

Je suis sur Joomla et je voudrais modifier un template de menu.
je voudrais que PHP affiche le contenu d'une table en sachant que :


$numerodelelementparent = $mitem->parent;
$element = $mitem->name;

$txt = '<table border="1" cellpadding="0" cellspacing="0"><tr>';


quel est la syntaxe à utiliser afin de dire : tant que $numerodelelementparent est identique, créer une nouvelle ligne ($txt = $txt.'<td>'. $element.'</td>';)

Merci par avance de vos réponses
A voir également:

10 réponses

scriptiz Messages postés 1494 Statut Membre 425
 
$identique = $numerodelelementparent;
$txt = "";

while($numerodelelementparent == $identique)
{
    $txt .= "$txt<td>$element</td>";
    // lire le suivant élément et faire bouger $numerodelelement à la fin
}

0
Alain_42 Messages postés 5413 Statut Membre 894
 
$txt = '<table border="1" cellpadding="0" cellspacing="0"><tr>';
while($numerodelelementparent==$numerodelelementparent_old){

	$numerodelelementparent_old=$numerodelelementparent; //memorisation ancienne valeur
	$numerodelelementparent = $mitem->parent;
	$element = $mitem->name;
	$txt .= '<td>'. $element.'</td>';
	
}

$txt .='</tr>';
0
JB_A Messages postés 307 Statut Membre 5
 
Merci pour vos réponses, néanmoins, cela ne fonctionne pas comme prévu.


Cas 1 : c'est long puis il y a un message d'erreur

$identique = $mitem->parent;
$txt = "";

while($mitem->parent == $identique)
{
    $txt .= "$txt<td>$element</td>";
    // lire le suivant élément et faire bouger $numerodelelement à la fin
}


Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 75497464 bytes) in D:\wamp\www\actionpositive\modules\mod_mainmenu\legacy.php on line 186

Cas 2 : c'est rapide mais n'affiche rien

						
									
while($parent==$identique){
									
	$parent=$mitem->parent;
	$identique = $parent;							
	$element = $mitem->name;


	$txt .= '<td>'. $element .'</td>';
	
}


Cas 3 : Cas 2 mais avec les variables à l'extérieures

	$parent=$mitem->parent;
	$identique = $parent;							
	$element = $mitem->name;								
									
while($parent==$identique){


	$txt .= '<td>'. $element .'</td>';
	
}


Fatal error: Maximum execution time of 30 seconds exceeded in D:\wamp\www\site1\modules\mod_mainmenu\legacy.php on line 179

Merci de vos réponses
0
Alain_42 Messages postés 5413 Statut Membre 894
 
si tu veux que ça s'affiche cas 2 il faut mettre tout à la fin echo $txt;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JB_A Messages postés 307 Statut Membre 5
 
En fait, je ne l'avais pas précisé mais dans les 3 cas, après "}", j'ai :

echo $txt= $txt.'</tr></table></td>';



@ +
0
Alain_42 Messages postés 5413 Statut Membre 894
 
while($parent==$identique){
	$identique = $parent;		//il faut mémoriser le contenu de la  variable $parent avant de la modifier				
	$parent=$mitem->parent;			//cette ligne va modifier la variable $parent					
	$element = $mitem->name;


	$txt .= '<td>'. $element .'</td>';
	
}
0
JB_A Messages postés 307 Statut Membre 5
 
Je viens d'essayer mais rien ne s'affiche.

Alors que si je remplace le code des précédents messages par :

$txt = $txt.'<tr><td><a href="' . $mitem->url . '" IDParent="'.$parent.'" class="' . $menuclass . '"'>' . $mitem->name . '  (ID enfant='.$mitem->id.')</a></td></tr>';


Il n'y a pas de problème, les éléments s'affiche bien et $parent affiche bien un "0" pour les parents et le numéro des parents, pour les enfants.

Les éléments s'affiche sauf que les enfants ne sont pas regroupées par parent d'appartenance mais affichés les un en dessous des autres.

Mon but est de regrouper tous les enfants appartenant à un même parent, dans un même tableau.

Et surtout de pouvoir les afficher.
0
Alain_42 Messages postés 5413 Statut Membre 894
 
//initialisation qui va permettre de rentrer la première fois dans la boucle et de donner une valeur de départ à $parent
$parent=$mitem->parent;
$identique = $parent;
//compteur pour eviter de tomber dans une boucle infinie et la fatal error
$i=0;
while($parent==$identique){
	$i++;
	if ($i>50) exit; //sortie de boucle si infinie
	$identique = $parent;		//il faut mémoriser le contenu de la  variable $parent avant de la modifier
		//mais il faut qu'a chaque boucle il y ait une instruction qui vienne changer qq chose à l'objet $item
		//$item->  ?  = ???
	$parent=$mitem->parent;			//cette ligne va modifier la variable $parent					
	$element = $mitem->name;


	$txt .= '<td>'. $element .'</td>';
	
}
0
JB_A Messages postés 307 Statut Membre 5
 
Bonjour,

Merci de ta réponse mais là plus rien ne s'affiche.

@+
0
Alain_42 Messages postés 5413 Statut Membre 894
 
c'est normal, as tu tenu compte des commentaires que je t'ai mis ?
il faut qu'a chaque passage de la boucle quelque chose change sinon boucle infinie


//initialisation qui va permettre de rentrer la première fois dans la boucle et de donner une valeur de départ à $parent
$parent=$mitem->parent;
$identique = $parent;
//compteur pour eviter de tomber dans une boucle infinie et la fatal error
$i=0;
while($parent==$identique){
	$i++;
	if ($i>50){
		echo "Boucle infine compteur de boucle = ".$i;
	exit; //sortie de boucle si infinie
	}
	$identique = $parent;		//il faut mémoriser le contenu de la  variable $parent avant de la modifier
	
		/////// mais ici, il faut qu'a chaque boucle il y ait une instruction qui vienne changer qq chose à l'objet $item
		//$item->  ?  = ???
		
	$parent=$mitem->parent;			//cette ligne va modifier la variable $parent					
	$element = $mitem->name;


	$txt .= '<td>'. $element .'</td>';
	
}
0