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

MVC PHP Discussion :

PartialLoop sur un resultSet


Sujet :

MVC PHP

  1. #1
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut PartialLoop sur un resultSet
    bonjour,

    je cherche a appliqué un partialLoop sur un resulset.

    Pour expliquer mon raisonnement jusqu'à maintenant je faisais une boucle dans mon template et je générais le code dedans. genre (en simplifier):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #dans l'action
    $table = new Model_Table;
    $data = $table->fetchAll();
    $this->view->data = $data;
     
    #dans le template
    <?php foreach($this->data as $data):?>
        <div><?=$data?></div>
    <?php endforeach; ?>
    Ensuite j'ai découvert les partial et je fais dans mon template:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #dans le template
    <?php foreach($this->data as $data):?>
        <?=$this->partial('common/partial.phtml',array('data'=>$data))?>
    <?php endforeach; ?>
     
    #dans common/partial.phtml
    <div><?=$this->data?></div>
    mais j'ai lu sur la doc que c'était pas très optimal pour le rendement car ça lance une instance de partial a chaque boucle. Et il conseille d'utiliser partialLoop.
    j'ai donc fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #dans le template
    <?=$this->partialLoop('common/partial.phtml',$this->data)?>
     
    #dans common/partial.phtml
    <div><?=$this->data?></div>
    Quelqu'un vois comment faire ?

  2. #2
    darthmower
    Invité(e)
    Par défaut
    Bonjour,

    Ce n'est pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #dans common/partial.phtml
    <div><?=$this->data?></div>
    mais:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #dans common/partial.phtml
    <div><?=$this->key?></div>
    <div><?=$this->value?></div>
    sachant que key et value sont deux clef d'un tableau à deux dimensions de type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    array(
        array('key' => 'Truc', 'value' => 'Machin'),
        array('key' => 'Bidule',    'value' => 'Foo'),
    );
    Cf: http://zendframework.com/manual/fr/z...w.helpers.html dans la partie Exemple 60.5. Utiliser PartialLoop pour effectuer le rendu d'éléments itératifs.

    Gripsou

    PS: Je ne sais pas trop ce que tu voulais savoir donc si je répond à côté je m'en excuse.

  3. #3
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Citation Envoyé par guiyomh Voir le message
    Quelqu'un vois comment faire ?
    C'est simple, ton partialLoop fait déjà ton foreach. L'utilisation est très simple, regarde ici :
    http://zendframework.com/manual/fr/z...w.helpers.html

    Considérons le script partiel suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <!--partialLoop.phtml-->
        <dt><?php echo $this->key ?></dt>
        <dd><?php echo $this->value ?></dd>
    Et le "modèle" suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $model = array(
        array('key' => 'Mammifère', 'value' => 'Chameau'),
        array('key' => 'Oiseau',    'value' => 'Pingouin'),
        array('key' => 'Reptile',   'value' => 'Asp'),
        array('key' => 'Poisson',   'value' => 'Flounder')
    );
    Dans votre script de vue, vous pouvez maintenant appeler l'aide PartialLoop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <dl>
    <?php echo $this->partialLoop('partialLoop.phtml', $model) ?>
    </dl>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <dl>
        <dt>Mammifère</dt>
        <dd>Chameau</dd>
     
        <dt>Oiseau</dt>
        <dd>Pingouin</dd>
     
        <dt>Reptile</dt>
        <dd>Asp</dd>
     
        <dt>Poisson</dt>
        <dd>Flounder</dd>
     
    </dl>

  4. #4
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    oui mais tout les exemple que vous donner, se font avec un tableau de donnée.
    Or moi je souhaite fournir un Zend_Db_Rowset.

    Dans la doc ils disent que c'est possible, mais ils ne montre pas vraiment d'exemple comme ça.

    $view->partial()->setObjectKey('model');
    mais 'model' c'est quoi ?
    • un objet (dans mon cas je mettrais $this->data),
    • un string correspondant au nom de la variable (dans mon cas je mettrais 'data')

    Hé du coup comment je récupère ça dans mon 'partial template' ?

  5. #5
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Mais si tu veux avoir un tableau, tu peux utiliser la methode toArray() des rowsets.

  6. #6
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    je sais, mais c'est pas ce que je veux !

    Je veux pouvoir conservé mon objet pour appelé certaine méthode comme findParentRow ...

    De plus avec la méthode toArray() on aurais des clé numérique. on aurais un truc du genre
    array(
    [0] =>array('champs1'=>'',...),
    [1] =>array('champs1'=>'',...),
    [2] =>array('champs1'=>'',...),
    ...
    );
    et je vois pas comment les exploiter dans le partial

  7. #7
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Tu peux tout à fait utiliser partialLoop() avec un rowset 'data' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->partialLoop('common/partial.phtml', $this->data); ?>
    Si tu le fait de cette façon, les champs sont directement accessibles comme des propriétés dans le script de vue partial.phtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->mon_champ_1 ; ?>
    Si tu veux conserver un objet dans tons script de vue, il faut le préciser comme tu l'as vu avec setObjectKey(), par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php echo $this->partialLoop()->setObjectKey('data')
                ->partialLoop('common/partial.phtml', $this->data); ?>
    Et dans ton script partial.phtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->data->mon_champ_1 ; ?>

  8. #8
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    merci je vais essayé ça et je vous verrais un retour.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2
    Par défaut
    Bonjour,
    Bien que ce sujet soit (assez) vieux, je me permets de le déterrer, car je rencontrais le même problème que guiyomh.
    Je tiens donc à dire que la solution proposée par Eusebe fonctionne parfaitement !

Discussions similaires

  1. Update dans une boucle sur un resultset
    Par ptr83 dans le forum JDBC
    Réponses: 0
    Dernier message: 07/04/2010, 11h38
  2. recherche sur un ResultSet
    Par Jcpan dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 14/01/2009, 09h03
  3. Boucle sur un resultSet
    Par thomas2929 dans le forum JDBC
    Réponses: 9
    Dernier message: 09/06/2008, 16h55
  4. problém d'itération sur un resultset
    Par aymen83 dans le forum Langage
    Réponses: 13
    Dernier message: 08/05/2008, 08h53
  5. erreur sur un ResultSet.
    Par mimi51340 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 02/05/2008, 14h51

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