Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour, voilà j'utilise ZF pour afficher des news, donc il me faut un "affichage inversé", de manière à afficher en premier la dernière news.
J'ai ceci en controller :
public function indexAction() { $this->view->title = "Informations"; $news = new News(); $this->view->news = $news->findInverse(); }
en modèle :
public function findInverse() { $result = $this->getAdapter()->query('SELECT * FROM news ORDER BY id DESC'); return $result->fetchAll(); }
en vue :
<!DOCTYPE html PUBLIC "-//W3C//Dtr XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/Dtr/xhtml1-strict.dtr"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> </head> <body> <p><a href="<?php echo $this->url(array('controller'=>'index', 'action'=>'ajouter')); ?>">Ajouter une information</a></p> <?php foreach($this->news as $news) : ?> <div class="post"> <h1 class="title"><?php echo $this->escape($news->titre);?></h1> <p class="byline"><small> Posté le <?php echo $this->escape($news->date);?> <a href="<?php echo $this->url(array('controller'=>'index', 'action'=>'modifier', 'id'=>$news->id));?>">Modifier</a> <a href="<?php echo $this->url(array('controller'=>'index', 'action'=>'supprimer', 'id'=>$news->id));?>">Supprimer</a> </small></p> <div class="entry"><p><?php echo $this->escape($news->contenu);?></p></div> </div> <?php endforeach; ?> </body> </html>
Or à l'affichage j'ai une succession d'erreur du type :
Notice: Trying to get property of non-object in C:\Program Files\EasyPHP 2.0b1\www\application\views\scripts\index\index.phtml on line 10
Je ne comprends pas ce qui ne va pas, lorsque je fais un fetchAll traditionnel avec le même code dans la vue tout se passe bien mais pas là, si vous pouviez m'aider parceque là je bloque.
Dernière modification par squallmat (26-06-2008 14:56:09)
Hors ligne
A vue de nez je dirais que ta fonction te rend un array et pas un objet.
fait un print_r dans ta vue de this->news pour vérifier...
Hors ligne
le print_r me renvoie :
Array ( [0] => Array ( [id] => 7 [titre] => zefdzef [date] => 0000-00-00 [contenu] => dfzefe ) [1] => Array ( [id] => 6 [titre] => seconde news ààà [date] => 0000-00-00 [contenu] => test ééé ) [2] => Array ( [id] => 1 [titre] => Ouverture du site [date] => 2008-06-10 [contenu] => et voilà le site est là ) )
edit : je me suis trompé en écrivant le code tout à l'heure ^^
Dernière modification par squallmat (25-06-2008 18:59:44)
Hors ligne
Personne pour m'aider ?
Hors ligne
c'est siimple en fait, ta fonction te renvoie un array et plus un objet,
donc dans ta vue, au lieu de faire
$news->titre
tu dois faire
$news['titre']
Hors ligne
Salut,
Ce que tu peux faire aussi, c'est lors de ton instanciation de ta database déclarer comme quoi tout retour de donnée doit être un objet.
Exemple:
... $db = Zend_Db::factory($config->database->adapter, $config->database->params->toArray()); $db->setFetchMode(Zend_Db::FETCH_OBJ); $db->query("SET NAMES 'utf8'"); ...
A+
Hors ligne
Si ta classe News "extends" Zend_Db_Table", je crois que tu pourrais coder ta méthode findInverse() ainsi
public function findInverse() { return $this->fetchAll(null/*where*/, /*orderby*/ 'id DESC'); }
Hors ligne
Parfait ça marche, j'ai utilisé la solution de Mr.MoOx ^^ (je n'ai pas testé les autres solutions désolé :p)
Mais merci beaucoup pour vos réponses tout le monde mon problème est réglé , je suis encore débutant en php je n'avais pas pensé au $news['titre'] mais c'est vrai que maintenant ça me paraît bien stupide :p
Hors ligne
Pages: 1