Bonjour,
j'aurais besoin d'un petit coup de main, svp
j'ai rajouter un système de commentaire au mvc(a à z) avec le nombre de commentaire par post dans la fonction view
et j'ai crée une vars 'totalcomments' dans ma fonction view qui me donne le nombre de commentaire par post.
jusque la tous fonctionne
PostController.php
function index(){
$perPage = 3;
$this->loadModel('Post');
$condition = array('online' => 1,'type'=>'post');
$d'posts'] = $this->Post->find(array(
'conditions' => $condition,
'fields' => 'Post.id,Post.name,Post.slug,Post.created,Category.name as catname,Post.content,Category.slug as catslug',
'order' => 'created DESC',
'limit' => ($perPage*($this->request->page-1)).','.$perPage,
'join' => array('categories as Category'=>'Category.id=Post.category_id')
));
$d'total'] = $this->Post->findCount($condition);
$d'page'] = ceil($d'total'] / $perPage);
$this->set($d);
}
function view($id, $slug) {
// Pour l'affichage du post voulu
$this->loadModel('Post');
$d'post'] = $this->Post->findFirst(array(
'fields' => 'Post.id,Post.content,Post.name,Post.slug,Post.created,Category.name as catname,Category.slug as catslug',
'conditions' => array('Post.online' => 1,'Post.id'=>$id,'Post.type'=>'post'),
'join' => array('categories as Category'=>'Category.id=Post.category_id')
));
// Pour l'affichage des commentaires
$this->loadModel('Comment');
$d'comments'] = $this->Comment->find(array(
'conditions' => array('posts_id' => $id),
'fields' => 'Comment.id,Comment.pseudo,Comment.mail,Comment.content,Comment.created',
'order' => 'Comment.created DESC',
'join' => array('posts as Post' => 'Post.id=Comment.posts_id')
));
$condition = array('posts_id' => $id);
$d'totalcomments'] = $this->Comment->findCount($condition);
if(empty($d'post'])){
$this->e404('Page introuvable');
}
if($slug != $d'post']->slug){
$this->redirect("posts/view/id:$id/slug:".$d'post']->slug,301);
}
if($this->request->data){
if($this->Comment->validates($this->request->data)){
$this->request->data->posts_id = $id;
$this->request->data->created = date('Y-m-d H:i:s');
$this->Comment->save($this->request->data);
$this->Session->setFlash('Le commentaire a bien été créé');
$this->redirect("posts/view/id:$id/slug:".$slug);
}else{
$this->Session->setFlash('Merci de corriger vos informations','error');
}
}
$this->set($d);
}
pour le recupere dans ma view.php dans view/posts/ j'ai juste a ajouter la vars 'totalcomments'
et j'obtien le nombre de commentaire.
<?php echo $totalcomments; ?>
Mais le truc est que je voudrai aussi pouvoir utiliser cette vars 'totalcomments' dans ma view/index.php
mais ici je coince....
comment faire pour pouvoir utiliser la vars 'totalcomments'?
j'ai essayer quelque truc du genre mais sans succes :(
<?php echo $request->Comments->totalcomments; ?>
ou
<?php echo $comments->totalcomments; ?>
ou
<?php echo $this->request->totalcomments; ?>
est ce que quelqu'un aurais une idée svp ?
Bonjour,
Tu peux créer une fonction private dans ton objet
private function getComments($id) {
// Pour l'affichage des commentaires
$this->loadModel('Comment');
$d'comments'] = $this->Comment->find(array(
'conditions' => array('posts_id' => $id),
'fields' => 'Comment.id,Comment.pseudo,Comment.mail,Comment.content,Comment.created',
'order' => 'Comment.created DESC',
'join' => array('posts as Post' => 'Post.id=Comment.posts_id')
));
$condition = array('posts_id' => $id);
$d'totalcomments'] = $this->Comment->findCount($condition);
return $d;
}
et tu l'appel dans tes autres fonction
$d'comments'] = $this->getComments($id);
et dans tes views, tu aura les 2 variables
$comments'comments'];
$comments'totalcomments'];
Bonjour,
Le plus simple, tu fait une boucle de tes posts.
foreach($d'posts'] as $k => $v) {
$d'posts']$k] = $v;
$d'posts']$k]'comments'] = $this->getComments($v->id);
}
L'erreur Cannot use object of type stdClass as array est simple à corriger cela veut dire que tu as une erreur de syntaxe en effet tu appelle l'objet comme si c'était un tableau ;).
Pour appeler un tableau tu fais ceci:
$d'comments']
Pour appeler un objet tu fais ceci:
$d->comments
Ceci est bien entendu un simple exemple il te suffit de modifier la ligne 3 grâce aux indications que je viens de te donner et le tour est joué.
re salut, vraiment personne aurais une idée ?
est ce que je suis obliger de rajouter dans ma fonctionne index la partie comment que j'ai dans ma fonction view ?
pour pouvoir récupéré la variable ?
ou
moi se que je voudrai faire c'est au niveau de index faire un truc du genre
get_Var(donc dans le même Controller, sélectionner la fonction voulu 'view' , et récupéré la variable voulu 'totalcomments')
<?php echo get_Var('view', 'totalcomments'); ?>
je vous remerci d'avance pour toutes suggestions
actuelement je nage :(
Ho reelement merci exothermique pour ta solution,
j'arrive bien comme avant, a recuperer ces variables dans view.php
<?php echo $comments'comments']; ?>
<?php echo $comments'totalcomments']; ?>
mais dans index.php j'ai un souci
voila ma partie index de mon PostsController
/**
* Blog, liste les articles
**/
function index(){
$perPage = 3;
$this->loadModel('Post');
$condition = array('online' => 1,'type'=>'post');
$d'posts'] = $this->Post->find(array(
'conditions' => $condition,
'fields' => 'Post.id,Post.name,Post.slug,Post.created,Category.name as catname,Post.content,Category.slug as catslug',
'order' => 'created DESC',
'limit' => ($perPage*($this->request->page-1)).','.$perPage,
'join' => array('categories as Category'=>'Category.id=Post.category_id')
));
$d'total'] = $this->Post->findCount($condition);
$d'page'] = ceil($d'total'] / $perPage);
$d'comments'] = $this->getComments($id);
$this->set($d);
}
mais probleme car je n'ai pas de $id dans index()
comment faire pour recuperer le nombre de commentaire par post dans l'index ?
je suis un peu perdu X
aurais tu une nouvelle piste svp ?
apres ca , je pense toucher la fin hehe
merci d'avance
hello , encore une fois , vraiment merci de m'avoir repondu si vite :p
par contre la ligne 3 que tu me presente, me renvoye cette erreur
"Cannot use object of type stdClass as array"
vraiment merci pour tous
heu en faite , je me rend compte que c'est pas vraiment ca l'erreur mais plutôt qu'il ne trouve pas 'comments'
( ! ) Notice: Undefined variable: comments in C:\wamp\www\tuto\view\posts\index.php
sinon je vois que j'ai bien les commentaires pour chaque post en faisant un debug($d) dans index
Array
(
[posts] => Array
(
[0] => stdClass Object
(
[id] => 34
[name] => coucou
[slug] => voila
[created] => 2013-06-09
[catname] => Jeux vidéos
[content] =>
hkjhkjhkjhjk
[catslug] => jeux-videos
)
[1] => stdClass Object
(
[id] => 33
[name] => voila un nouveau teste
[slug] => nouveau-teste
[created] => 2013-06-05
[catname] => Music
[content] =>
RiTE, when added to the Winner software, redirects the realtime text stream to a user-selected program. For example, a user may redirect a text stream to a chat box. This facilitates instant response to questions posed to a celebrity in the chat room. A more prevalent use of rapid text entry is in the medical transcription market where it is very important to update the medical records quickly and efficiently.
[catslug] => music
)
[comments] => Array
(
[0] => Array
(
[comments] => Array
(
[0] => stdClass Object
(
[id] => 21
[pseudo] => ghgfhg
[mail] => hhgfhfghfgh
[content] => hgfhfghfg
[created] => 2013-06-14 22:49:34
)
[1] => stdClass Object
(
[id] => 20
[pseudo] => gfddddddddg
[mail] => gfdfgd
[content] => gfdgg
[created] => 2013-06-14 20:15:14
)
[2] => stdClass Object
(
[id] => 19
[pseudo] => fgdgfdgd
[mail] => gfdgdfg
[content] => gfdgdfgdf
[created] => 2013-06-13 17:42:03
)
[3] => stdClass Object
(
[id] => 18
[pseudo] => dfsfsd
[mail] => fsdfsdsdf
[content] => fdsfsd
[created] => 2013-06-13 14:54:44
)
)
[totalcomments] => 4
)
[1] => Array
(
[comments] => Array
(
[0] => stdClass Object
(
[id] => 16
[pseudo] => gfdgfdgfdgdf
[mail] => gfdgdfgfdg
[content] => gfdgdfgdfg
[created] => 2013-06-13 13:30:27
)
[1] => stdClass Object
(
[id] => 14
[pseudo] => boby
[mail] => boby@gmail.com
[content] => ca dechire
[created] => 2013-06-13 00:13:09
)
)
[totalcomments] => 2
)
)
)
[total] => 2
[page] => 1
)
et dans ma view index je recupere la variable comme tu me l'avais evoquer
<span class="comments"><a href=""><?php echo $comments'totalcomments']; ?></a></span>
mais ca passe pas :(
encore merci de bien vouloir m'aider
De rien tout le plaisir était pour moi en ces jours de révisions je voulais m'évader un peu xD.