Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/02/2011, 09h05   #1
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Par défaut Récupérer le résultat d'une fonction récursive

Bonjour !

J'utilise la class vtemplate pour mon site.
Pour ceux qui ne connaissent pas : je déclare des variables {#VAR} dans mon html que je valorise dans mon php :
Code :
$vtp_menu->setVar($_menu,"VAR", 'DuContenu' );
J'aimerai créer un menu dynamique en récupérant les différents liens du menu via ma base de données.
Pour obtenir menus/sous-menus/sous sous menus (l'arborescence complète quoi), j'ai créé une fonction récursive :

Code :
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
29
 
function RecursiveMenu($origine)
{
	$i = 0;
	$req = 'SELECT * FROM Menus WHERE Menu_origine ='.$origine;
	$res = mysql_query($req);
	$nb = mysql_num_rows($res);
	while($row = mysql_fetch_array($res))
	{
		// Titre catégorie
		if($row['Menu_origine'] == 0)
			echo '<li><a href="">'.$row['Menu_nom'].'</a>';
		else
		{
			// Si premier lien d'un sous menu
			if($i == 0)
			{	
				echo '<ul><li><a href="'.$row['Menu_url'].'">'.$row['Menu_nom'].'</a></li>';
			}
			else
				echo '<li><a href="'.$row['Menu_url'].'">'.$row['Menu_nom'].'</a></li>';
			// Si dernier lien d'un sous menu
			if($i == ($nb-1))
				echo '</ul></li>';
		}
		$i++;
		RecursiveMenu($row['Menu_id']);
	}	
}
Je souhaiterai ensuite mettre le résultat de cette fonction dans mon html (dans ma variable {#MENU}.

J'ai donc fait :
Code :
$vtp_menu->setVar($_menu,"MENU.MENU", RecursiveMenu(0) );
Le problème étant que les echo de ma fonction font que mon menu ne s'affiche pas dans la variable {#MENU} mais tout en haut de ma page html.

Alors comment pourrais-je récupérer dans une variable tout le résultat de ma fonction pour ensuite le mettre dans ma variable {#MENU} ?

Si je mets un $reponse = ''; en haut de ma fonction et que j'ajoute mon menu dedans, ça ne fonctionnera pas comme la variable sera remise à vide à chaque fois que j'ai un sous menu :/ (appel à la fonction dans la fonction -> récursivité quoi ^^)

Un peu d'aide ne serait pas de trop, merci !
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 09h24   #2
Membre régulier
 
Inscription : juin 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 66
Points : 86
Points : 86
Il suffit d'utiliser "return".

Code :
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
29
30
function RecursiveMenu($origine)
{
	$i = 0;
	$req = 'SELECT * FROM Menus WHERE Menu_origine ='.$origine;
	$res = mysql_query($req);
	$nb = mysql_num_rows($res);
        $repone = '';
	while($row = mysql_fetch_array($res))
	{
		// Titre catégorie
		if($row['Menu_origine'] == 0)
			$repone .= '<li><a href="">'.$row['Menu_nom'].'</a>';
		else
		{
			// Si premier lien d'un sous menu
			if($i == 0)
			{	
				$repone .= '<ul><li><a href="'.$row['Menu_url'].'">'.$row['Menu_nom'].'</a></li>';
			}
			else
				$repone .= '<li><a href="'.$row['Menu_url'].'">'.$row['Menu_nom'].'</a></li>';
			// Si dernier lien d'un sous menu
			if($i == ($nb-1))
				$repone .= '</ul></li>';
		}
		$i++;
		$repone .= RecursiveMenu($row['Menu_id']);
	}
        return $reponse;
}
Tu concatènes au lieu de mettre les "echo".
Ensuite, à la fin de la fonction, tu retournes la chaîne concaténée.
Blount est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/02/2011, 10h06   #3
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
J'y avais pensé et donc testé mais j'avais oublié de mettre $reponse .= devant l'appel à ma fonction !

Merci beaucoup !!
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h12.


 
 
 
 
Partenaires

Hébergement Web