Bonjour,
petit soucis de boucle sur un menu déroulant utilisant un xml :
Mon code php appelle mon xml et affiche le menu déroulant qui a pour forme relative <menu deroulant niveau 1><menu déroulant niveau 2><menu déroulant niveau 3>. Rien de bien compliqué. Pourtant, ma derniere boucle foreach (foreach ($data->category[$i]->catlevel1->catlevel2 as $item){) renvoie systématiquement le dernier catlevel 2 sur les menus supérieurs.
A savoir :
ma catégorie massage qui fait partie de bien-etre>bougie>massage se retrouve et s'affiche dans bien-etre>huile>massage et ne prend pas en compte la rubrique bien-etre>huile>parfume (le soucis se reporte sur toutes les sous catégories de bien-etre) comme elle devrait le faire, enfin , je croyais...

$row_CategoryRoot=7;

$menu ='<ul id="menu">';
$menu .='<li> <a>e-Shopping</a>
    <ul class="menuderoulant">';

$string=file_get_contents("arbo.xml");
$data = new SimpleXMLElement($string);
for ($i = 0; $i <= $row_CategoryRoot; $i++) {
	$menu .= '<li><a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'">'.$data->category[$i]->name;
	$menu .= '<ul class="menuderoulant2">';
   	foreach ($data->category[$i]->catlevel1 as $item){
		$menu .= '<li><a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'/'.$item->slug.'">'.$item->name;
		$menu .= '<ul class="menuderoulant3">';
    	//echo  '-'.$item->name.'<br>' ;
		foreach ($data->category[$i]->catlevel1->catlevel2 as $item){
			$menu .= '<li><a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'/'.$data->category[$i]->catlevel1->slug.'/'.$item->slug.'">'.$item->name.'</li>';
    		//echo  '--'.$item->name.'<br>' ;
		}
	$menu .= '</ul></li>';
	}
	$menu .= '</ul></li>';
}

$menu .= '</ul></li></ul>';
echo $menu;


mon arbo.xml :

<?xml version="1.0" encoding="iso-8859-1"?>
<categories>
  <category>
    <slug>bien-etre</slug>
    <name>Bien-être</name>
    <catlevel1>
      <slug>bougies</slug>
      <name>Bougies</name>
      <catlevel2>
        <slug>massage</slug>
        <name>Massage</name>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>huiles</slug>
      <name>huiles</name>
      <catlevel2>
        <slug>parfume</slug>
        <name>Parfumé</name>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>encens</slug>
      <name>encens</name>
      <catlevel2>
        <slug>baseA</slug>
        <name>BaseA</name>
      </catlevel2>
      <catlevel2>
        <slug>baseB</slug>
        <name>BaseB</name>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>huile-de-massage</slug>
      <name>Huile de massage</name>
      <catlevel2>
        <slug>comestible</slug>
        <name>Comestible</name>
      </catlevel2>
      <catlevel2>
        <slug>classique</slug>
        <name>Classique</name>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>stimulants</slug>
      <name>Stimulants</name>
      <catlevel2>
        <slug>homme</slug>
        <name>Homme</name>
      </catlevel2>
      <catlevel2>
        <slug>femme</slug>
        <name>Femme</name>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>peinture-corporelle</slug>
      <name>Peinture corporelle</name>
      <catlevel2>
        <slug>comestible-2013-09-07-</slug>
        <name>Comestible</name>
      </catlevel2>
    </catlevel1>
  </category>
  <category>
    <slug>lingerie</slug>
    <name>Lingerie</name>
    <catlevel1>
      <slug>masculin</slug>
      <name>Masculin</name>
    </catlevel1>
    <catlevel1>
      <slug>feminin</slug>
      <name>Féminin</name>
    </catlevel1>
  </category>
  <category>
    <slug>pret-a-porter</slug>
    <name>Prêt-à-porter</name>
    <catlevel1>
      <slug>pret-a-porter-feminin</slug>
      <name>Pour elle</name>
    </catlevel1>
    <catlevel1>
      <slug>pour-lui</slug>
      <name>Pour lui</name>
    </catlevel1>
  </category>
  <category>
    <slug>bijoux</slug>
    <name>Bijoux</name>
  </category>
  <category>
    <slug>espace-cul-turel</slug>
    <name>Cul'turel</name>
  </category>
  <category>
    <slug>humour</slug>
    <name>Humour</name>
  </category>
</categories>
re,
suite recherche et toujours pas de solution...
J'ai bien vérifier mon xml à l'aide de print_r($data); et toutes mes catégories niveau 1 2 et 3 sont bien présentes et s'affichent correctement au print_r. Le soucis me semble-t-il est bien dans la boucle. Y aurait-il qlq'un pour relever la bouteille à la mer?
Merci!
Suite et relative fin ou baseline "One ugly piece of coding"...
Donc, relecture du document xml et intuition bizarre ont fait que j'en suis arrivé à encoder ceci :

//echo count($data->category->catlevel1->children());
$myCount = 0;
//print_r($data);
for ($i = 0; $i <= $row_CategoryRoot; $i++) {
	echo '<a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'">'.$data->category[$i]->name.'</a><br>';
   	foreach ($data->category[$i]->catlevel1 as $item){
		echo '--<a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'/'.$item->slug.'">'.$item->name.'</a><br>';
		
		foreach ($data->category[$i]->catlevel1[$myCount]->catlevel2 as $item){
			echo '----<a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'/'.$data->category[$i]->catlevel1->slug.'/'.$item->slug.'">'.$item->name.'</a><br>';
			$myCount +=1;
    		//echo  '--'.$item->name.'<br>' ;
		}
	
	}
	
}


En bref, j'ai rajouté une variable $myCount qui commence à 0 et s'incrémente avec le foreeach et va donc chercher le category[$i]->catlevel1[$myCount]->catlevel2 comme il faut.
N'en déplaise aux puristes mais cela fonctionne. Si l'un d'entre vous sait le pour qui du pour quoi avec un code plus intelligent, je suis preneur.

En espérant que cela pourra peut-être en inspirer en vue d'un bredcrumb sur Virutemart!
Smiley cligne
Salut anybody home?
Je vais finir par comprendre le xml/php
version quasi finale du code :

for ($i = 0; $i <= $row_CategoryRoot; $i++) {
	echo '<a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'">'.$data->category[$i]->name.'</a><br>';
   	foreach ($data->category[$i]->catlevel1 as $item){
		echo '--<a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'/'.$item->slug.'">'.$item->name.'</a><br>';
		
		foreach ($item->catlevel2 as $item){
			echo '----<a href="index.php/component/virtuemart/'.$data->category[$i]->slug.'/'.$data->category[$i]->catlevel1->slug.'/'.$item->slug.'">'.$item->name.'</a><br>';
    		//echo  '--'.$item->name.'<br>' ;
		}
	}
}

en fait, il suffisait de renomer les choses par leur nom, et puis voila, j'ai remplacé ma derniere boucle par foreach ($item->catlevel2 as $item){ parce que ce qu je cherchais, c'etait l'item de la boucle!
Allez, A+.