Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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:
public function listAction(){ // $news = new Application_Model_NewsMapper(); // $this->view->entries = $news->fetchAll(); }
Puis dans ma vue:
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:
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; }
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
Déjà, à première vue, il faudrait que tu déclares tes tableaux avant ton foreach...
prenons un exemple :
[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 ! 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 ?
[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
Salut Alcide,
Effectivement faire la boucle seulement dans la vue est suffisant.
Petit recap:
Controller:action j'affiche tous les articles
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!
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