Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Templates > Smarty
Smarty Forum d'entraide sur le moteur de templates Smarty. Avant de poster -> FAQ Smarty et Cours Smarty
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 02/03/2008, 21h03   #1
Membre du Club
 
Inscription : mars 2008
Messages : 37
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 37
Points : 63
Points : 63
Par défaut Faire un menu dynamique

Bonjour à tous les zéros !

Je développe actuellement un site en utilisant le moteur de templates smarty

Mon problème viens du menu principale.
J'ai dans une base de donnés tous les titres de chaque menus et sous-menus.
Je souhaite avec des templates afficher le menu de cette façon :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
<ul>
 <li>menu1
  <ul>
   <li>sous-menu1</li>
   <li>sous-menu2
    <ul>
     <li>sous-menu1</li>
     <li>sous-menu2</li>
    </ul>
   </li>
  </ul>
 </li> 
 <li>menu2
  <ul>
   <li>sous-menu1</li>
   <li>sous-menu2</li>
  </ul>
 </li>
</ul>
Le problème est que je ne connais pas à l'avance le nombre de niveau qu'il peut y avoir.
Voici le code php pour récupérer le menu :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
function sous_menu($menu_pere,$oSmarty)
{
        $retour_sous_menu = mysql_query('SELECT * FROM menu WHERE id_menu_pere='.$menu_pere['id_menu'].' ORDER BY ordre_menu');
        while($donnee_sous_menu = mysql_fetch_array($retour_sous_menu))
        {
                $oSmarty->append('sous_menu', $donnee_sous_menu);
                if($donnee_sous_menu['nb_sous_menu']!=0)
                        sous_menu($donnee_sous_menu);
        }
}
 
$retour_menu_princ = mysql_query('SELECT * FROM menu WHERE id_menu_pere=0 ORDER BY ordre_menu');
while($donnee_menu_princ = mysql_fetch_array($retour_menu_princ))
{
        $oSmarty->append('donnee_menu', $donnee_menu_princ); 
        if($donnee_menu_princ['nb_sous_menu']!=0)
        {
                sous_menu($donnee_menu_princ,$oSmarty);
        }
}
$oSmarty->display('menu.tpl');
Merci d'avance pour vous réponse.

Droup
Droup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 10h05   #2
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
Bonjour,

J'ai trouvé cette solution (que je n'ai pas testée...) ici : http://smarty.incutio.com/?page=Smar...AndSuggestions

Citation:
Envoyé par http://smarty.incutio.com/?page=SmartyDocsErrorsAndSuggestions
atat 05/25/2003.by <verbo at inbox dot lv>
Q: any idea how to make a tree structure with Smarty?
A: [by Nico Edtinger http://alpha.edtinger.at/] Simple - use recursive templates. I.e. if you have an array:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
$foo = array(
  '1' => array(
    '1.1' => null,
    '1.2' => null
  ),
  '2' => null,
  '3' => array(
    '3.1' => array(
      '3.1.1' => null
    ),
    '3.2' => null
  )
);
Your tree.tpl looks like this:
Code :
1
2
3
4
5
6
7
8
9
{if $tree}
<ul>
{foreach from=$tree key="name" item="subtree"}
  <li>
    {$name} {include file="tree.tpl" tree=$subtree}
  </li>
{/foreach}
</ul>
{/if}
And then include it in your master.tpl:
Code :
1
2
<h1>My Tree</h1>
{include file="tree.tpl" tree=$foo}
En clair, l'auteur propose de faire un include de template qui s'appelle lui-même...

Voilà dis nous ce que ça donne !!
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 19h01   #3
Membre du Club
 
Inscription : mars 2008
Messages : 37
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 37
Points : 63
Points : 63
Merci eric190,
Ce matin j'avais trouvé cette solution : http://www.developpez.net/forums/sho...d.php?t=483359, mais j'avais remplacé foreach, par section, mais là j'avais un problème. En fait si j'avais un menu de la sorte :[LIST][*]1
  • 1.1
    • 1.1.1
  • 1.2
Le 1.2 ne s'affichait pas, car la ligne
{include file="c_liste_recursive.tpl" element=$element.children}
modifie la variable element, contrairement à forerach qui lui la garde !
En regardant ta réponse j'ai put trouver d'où venait mon erreur.
Merci, ça fonctionne très bien.
Droup 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 08h10.


 
 
 
 
Partenaires

Hébergement Web