IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer le résultat d'une fonction récursive


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Points : 207
    Points
    207
    Par défaut
    Il suffit d'utiliser "return".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    J'y avais pensé et donc testé mais j'avais oublié de mettre $reponse .= devant l'appel à ma fonction !

    Merci beaucoup !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Additionner résultats d'une fonction récursive
    Par Invité dans le forum Langage
    Réponses: 9
    Dernier message: 07/02/2012, 18h30
  2. Réponses: 2
    Dernier message: 11/03/2011, 22h17
  3. Réponses: 3
    Dernier message: 27/08/2009, 15h36
  4. Récupérer le résultat d'une fonction dans une balise html
    Par Hayato dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/06/2006, 18h04
  5. Réponses: 6
    Dernier message: 08/06/2006, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo