Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-09-2011 16:59:31

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

[RESOLU][ZEND_DB] findDependentRowset iteration

Bonjour,

j'aimerai afficher sur une page une liste d'articles avec les commentaires associés.
Mais je ne trouve la bonne méthode:

Pour afficher mes articles:

Code:

 
public function listAction(){
//        $news = new Application_Model_NewsMapper();
//        $this->view->entries = $news->fetchAll();
    }

Puis dans ma vue:

Code:

 
Les News <br />
<dl>
    <?php foreach ($this->entries as $entry): ?>
    <dt><?php echo $this->escape($entry->titre) ?></dt>
    <dd><?php echo $this->escape($entry->texte) ?></dd>
    <a href="<?php echo $this->url(array('controller'=>'commentairesnews',
    'action'=>'create', 'id'=>$this->escape($entry->id)));?>">Ajouter un commentaire</a>
    <?php endforeach ?>
</dl>

Mais si je veux intégrer les commentaires des utilisateurs , j'essaye de faire ce qui suis sans succès:

Code:

 
public function listAction(){
        $dbitem = new Application_Model_DbTable_News();
        $rows = $dbitem->fetchAll();
        foreach ($rows as $row) {
            $listerow[] = $row;
            $listedependentrow = $row->findDependentRowset('Application_Model_DbTable_Commentairesnews');
        }
        $this->view->entries = $listerow;
        $this->view->entries2 = $listedependentrow;
    }

Code:

 
Les News <br />
<dl>
    <?php foreach ($this->entries as $entry): ?>
    <dt><?php echo $this->escape($entry->titre) ?></dt>
    <dd><?php echo $this->escape($entry->texte) ?></dd>
    <a href="<?php echo $this->url(array('controller'=>'commentairesnews',
    'action'=>'create', 'id'=>$this->escape($entry->id)));?>">Ajouter un commentaire</a>
        <?php foreach ($this->entries2 as $entry2): ?>
            <?php //if ($this->escape($entry->id) = $this->escape($entry2['news_id']){?>
                <dt><?php echo $this->escape($entry2->texte) ?></dt>
            <?php //}?>
        <?php endforeach ?>
    <?php endforeach ?>
</dl>

La méthode est bonne ou il faut voir cela sous un autre angle? Quelqu'un peut me mettre sur la voie? ;-)

Dernière modification par bandit_rouge (02-09-2011 11:15:10)

Hors ligne

 

#2 01-09-2011 23:24:13

Alcide_
Membre
Lieu: Brest
Date d'inscription: 20-03-2010
Messages: 31
Site web

Re: [RESOLU][ZEND_DB] findDependentRowset iteration

Déjà, à première vue, il faudrait que tu déclares tes tableaux avant ton foreach...
prenons un exemple :

Code:

[lang=php]
/*si fetchAll retourne un Zend_Db_Table_Rowset vide*/
$rows = $dbitem->fetchAll();
/*on ne rentre donc pas dans le foreach*/
foreach ($rows as $row) {
    $listerow[] = $row;
}
/*et alors, que vaux $listerow ? */
$this->view->entries = $listerow;

donc déclare $listerow et $listedependentrow avant ta boucle.

Une deuxième chose, tu utilises $listedependentrow dans ta boucle comme une variable et non pas comme un tableau... Des petits crochets ne serait pas de trop ! smile D'ailleurs, même sans erreurs de syntaxes, ta boucle sur $this->entries2 dans ta vue n'est pas logique car tu récupères un rowset à chaque itération...

Troisième chose, tu fais 2 fois la même boucle, pourquoi ne la fais-tu pas juste dans ta vue ?

Code:

[lang=php]
<dl>
    <?php foreach ($rowset as $row): ?>
        <dt><?php echo $this->escape($row->titre); ?></dt>
        <dd><?php echo $this->escape($row->texte); ?></dd>
        <a href="<?php echo $this->url(array('controller' => 'commentairesnews',
        'action' => 'create', 'id' => $this->escape($row->id))); ?>">
            Ajouter un commentaire
        </a>
        <?php foreach ($row->findDependentRowset('DbTable_Commentairesnews') as $depRow): ?>
            <dt><?php echo $this->escape($depRow->texte); ?></dt>
        <?php endforeach ?>
    <?php endforeach ?>
</dl>

Hors ligne

 

#3 02-09-2011 11:13:26

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

Re: [RESOLU][ZEND_DB] findDependentRowset iteration

Salut Alcide,

Effectivement faire la boucle seulement dans la vue est suffisant.
Petit recap:

Controller:action j'affiche tous les articles

Code:

   public function listAction(){
       //$news = new Application_Model_NewsMapper();
       $news = new Application_Model_DbTable_News();
       $this->view->entries = $news->fetchAll();
    }

et dans ma vue:j'affiche les commentaires associés dans la boucle!

Code:

Les News <br />
<dl>
    <?php foreach ($this->entries as $entry): ?>
    <dt><?php echo $this->escape($entry->titre) ?></dt>
    <dd><?php echo $this->escape($entry->texte) ?></dd>
    <a href="<?php echo $this->url(array('controller'=>'commentairesnews',
    'action'=>'create', 'id'=>$this->escape($entry->id)));?>">Ajouter un commentaire</a>
            <?php foreach ($entry->findDependentRowset('Application_Model_DbTable_Commentairesnews') as $depRow): ?>
                <dt><?php echo $this->escape($depRow->texte); ?></dt>
            <?php endforeach ?>
    <?php endforeach ?>
</dl>

Simple comme bonjour ;-)
Merci pour ta réponse

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages