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 31/01/2008, 11h47   #1
Membre du Club
 
Inscription : mai 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 142
Points : 54
Points : 54
Par défaut Boucle récursive Smarty array()

bonjour,
j'ai un tableau multi-dimensionnel, dont je ne connais pas la profondeur pour chacun des éléments.
je voudrai faire une boucle récursive dans mon template Smarty pour afficher une nouvelle liste (<ul>) à chaque nouveau tableau, histoire de réaliser un sorte d'arborescence quoi...
le problème c'est que je ne vois pas comment crée une boucle récursive avec {foreach} et/ou {section}.
merci d'avance pour votre aide.
yanice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 16h34   #2
Membre du Club
 
Inscription : mai 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 142
Points : 54
Points : 54
je me répond à moi-même
alors j'ai trouvé une solution, un peu lourde mais qui à le mérite de fonctionner en attendant mieux.
je boucle une première fois sur mon tableau et si je trouve un nouveau tableau dans celui-ci, je fais un include d'un template qui contient une nouvelle liste qui se rappelle lui-même s'il contient encore un nouveau tableau...etc...
allez voir ce lien :
http://www.phpinsider.com/smarty-for...opic.php?t=291

mon tableau complet ($tree) correspond à ça (volontairement compliqué):
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Array (
    [0] => Array (
        [id] => 16 [nom] => Rubrique 1
    )
    [1] => Array (
        [id] => 1 [nom] => Rubrique 2 [children] => Array (
            [0] => Array (
                [id] => 5 [nom] => Rubrique 2.1
            )
            [1] => Array (
                [id] => 9 [nom] => Rubrique 2.2 [children] => Array (
                    [0] => Array (
                        [id] => 18 [nom] => Rubrique 2.2.1
                    )
                )
            )
            [2] => Array (
                [id] => 2 [nom] => Rubrique 2.3[children] => Array (
                    [0] => Array (
                        [id] => 4 [nom] => Rubrique 2.3.1[children] => Array (
                            [0] => Array (
                                [id] => 7 [nom] => Rubrique 2.3.1.1
                            )
                        )
                    )
                )
            )
        )
    )
    [2] => Array (
        [id] => 6 [nom] => Rubrique 3
    )
    [3] => Array (
        [id] => 3 [nom] => Rubrique 4 [children] => Array (
            [0] => Array (
                [id] => 8 [nom] => Rubrique 4.1
            )
        )
    )
    [4] => Array (
        [id] => 10 [nom] => Rubrique 5 [children] => Array (
            [0] => Array (
                [id] => 11 [nom] => Rubrique 5.1
            )
        )
    )
    [5] => Array (
        [id] => 17 [nom] => Rubrique 6
    )
)
le code de mon premier template :
Code :
1
2
3
4
5
6
7
8
<ul>
{foreach from=$tree item=element}
   <li>{$element.nom}</li>
   {if $element.children}
   <ul>{include file="recursive_liste.tpl" element=$element.children}</ul>
   {/if}
{/foreach}
</ul>
le code du template recursive_liste.tpl :
Code :
1
2
3
4
5
6
{foreach from=$element item=element}
   <li>{$element.nom}</li>
   {if $element.children}
   <ul>{include file="c_liste_recursive.tpl" element=$element.children}</ul>
   {/if}
{/foreach}
toutefois, si quelqu'un a une meilleure idée, je suis preneur, je préfererai que tout soit dans le même template.
merci
yanice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 16h57   #3
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Cela me semble une très bonne solution mais tu pourrais ne faire qu'un seul appel dès le départ.


Code :
1
2
 
<ul>{include file="c_liste_recursive.tpl" element=$tree}</ul>
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 17h14   #4
Membre du Club
 
Inscription : mai 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 142
Points : 54
Points : 54
en fait oui, tout bêtement ça fonctionne aussi.
ce qui me gêne c'est plus le fait de faire un include à chaque fois, je ne pense pas que niveau perf ce soit le mieux.
vous en pensez quoi?
yanice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 18h17   #5
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Il faudrait voir ce que donne le code php résultant ( templates compliés ) pour se rendre compte de l'éventuelle perte de performance.
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 23h12   #6
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
Désolé ... trop compliqué pour moi !!



@++
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h18.


 
 
 
 
Partenaires

Hébergement Web