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

Bibliothèques et frameworks PHP Discussion :

[Smarty] Boucle récursive Smarty array()


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 145
    Par défaut [Smarty] 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.

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 145
    Par défaut
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Cela me semble une très bonne solution mais tu pourrais ne faire qu'un seul appel dès le départ.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ul>{include file="c_liste_recursive.tpl" element=$tree}</ul>

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 145
    Par défaut
    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?

  5. #5
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Il faudrait voir ce que donne le code php résultant ( templates compliés ) pour se rendre compte de l'éventuelle perte de performance.

  6. #6
    Membre Expert
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2004
    Messages : 715
    Par défaut
    Désolé ... trop compliqué pour moi !!



    @++

Discussions similaires

  1. [PHP 5.0] Boucle récursive pour effectuer un fil d'ariane avec requête
    Par eltyty dans le forum Langage
    Réponses: 9
    Dernier message: 10/07/2009, 17h45
  2. syntaxe boucle for (was : array.filter : différence ie / fx)
    Par Peanut dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/02/2009, 09h28
  3. Système d'affiliation et boucle récursive
    Par okoweb dans le forum Langage
    Réponses: 7
    Dernier message: 18/08/2008, 08h50
  4. [ DEBUTANT ] Problème exercice boucle + récursive
    Par arnaud405 dans le forum Caml
    Réponses: 37
    Dernier message: 06/11/2007, 01h39
  5. Réponses: 2
    Dernier message: 28/08/2006, 13h16

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