Salut tout le monde,
J'ai essayé de faire afficher mes commentaires pour mon blog et avec cake php. Le problème est que il ne réussit pas à sélectionner ma table "comments" et d'afficher les commentaire avec l'article en question.

Pour vous éclairez sur mom problème voici les extrait de mon model Post

public $name = 'Post';
    public $actsAs = array('containable');
    public $hasMany = array(
        'Media' => array(
            'dependent' => true
        ),
        'PostTag','Comment'
    );

voici un extrait de mon model Comment :

<?php
class Comment extends AppModel {
    public $name = 'Comment';
    public $belongsTo = 'Post';
}

Comment je peut réglé ce problème qui me bloque tout le temps.

Merci de votre aide en avance

Ps : Je utilise la version 2.0 + de Cake Php

13 réponses


zenkiai
Réponse acceptée

Salut essaye ainsi :
Dans ta fonction show met ceci :

$d'comments'] = $this->Post->Comment->find('all');

et dans ta view :

<?php foreach($comments as $comment): ?>
        <?php echo $comment'Comment']'content']; ?>
      <?php endforeach; ?>

le truc de cette manip, c'est qui va y avoir tous les commentaires de tous tes articles, il faut donc que tu mettes une condition dans ton find, moi j'ai mis ceci :

$d'comments'] = $this->Post->Comment->find('all',array(
            'conditions' => array('Comment.post_id' => $id)
        ));

Au niveau de tes models ca parait bon ou as tu une erreur ?

lakamark
Auteur

@Aiftea : L'erreur c'est quand je veux faire afficher mes commentaire. dans ma vue "show.ctp" grâce à

<?php echo $d"Comment"]; ?>

Voici la fonction show de mon controller Post

function show($id = null, $slug = null) {
        if(!$id)
            throw new NotFoundException('Aucune page ne corresponde à cette ID');
        $post = $this->Post->find('first',array(
            'conditions' => array('Post.id' => $id),
            'recursive' => 0
        ));
        if(empty($post))
            throw new NotFoundException('Aucune page ne corresponde à cette ID');
        if($slug != $post'Post']'slug'])
            $this->redirect($post'Post']'link'],301);
        $d'post'] = $post;
        $this->set($d);
}

Le message d'erreur me dit que :
Notice (8): Undefined variable: d [APP/View/Posts/show.ctp, line 16]

J'espère que tu va comprendre plus sur la source de mon problème.

Quand tu debug ton tableau $d tu obtiens quoi avant de l'envoyer a ta vue ?
Et si tu peux nous montrer ton code de ta vue ça serais un plus ;)

lakamark
Auteur

Quand je fait un débug du tableau $d ça me donne ceci

Array
(
    [post] => Array
        (
            [Post] => Array
                (
                    [id] => 9
                    [name] => Mon deuxième article
                    [slug] => mon-deuxieme-article
                    [content] => <div id="lipsum">
<p style="text-align: justify;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse diam odio, pharetra consectetur eleifend eget, tristique id orci. Fusce vulputate eros eget velit ultricies interdum. Nam at lorem purus, id convallis lectus. Proin dapibus congue orci nec lacinia. Praesent quis libero vel magna condimentum commodo sit amet et nisi. Maecenas vulputate magna nec mauris aliquet a pellentesque elit placerat. Donec id dapibus nulla. Curabitur facilisis fringilla ligula nec interdum. Fusce id lorem augue, at consequat metus.</p>
<p style="text-align: justify;">Ut auctor orci id diam volutpat ac mattis diam molestie. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque sodales neque et nunc rutrum volutpat. Maecenas ultricies quam non orci ornare ultrices. In vel turpis vel elit posuere bibendum sit amet quis sem. Sed vel metus lorem, eget placerat elit. Nam ut luctus lorem. Praesent nec cursus nibh. Praesent arcu lacus, aliquet sed pulvinar non, laoreet eget magna.</p>
<p style="text-align: justify;">Vestibulum arcu ligula, suscipit eget euismod quis, dapibus non dolor. Ut luctus lectus id dolor consequat sollicitudin vel id dui. Donec risus ligula, varius at scelerisque in, porttitor et leo. Vestibulum sit amet leo augue. Mauris egestas sem vitae neque egestas sed eleifend arcu imperdiet. Aenean ultricies eleifend massa, ut tempus dolor consectetur vel. Ut nibh leo, bibendum vel fringilla a, condimentum nec nibh. Nulla facilisi. Morbi gravida adipiscing sagittis. Phasellus elementum dictum neque. Curabitur sed ipsum risus, vel tempus est. Maecenas sit amet orci lectus.</p>
<p style="text-align: justify;">Cras ac nulla a dui suscipit consequat in et nulla. Proin dapibus est et neque molestie posuere. Quisque egestas sagittis tortor, ut tincidunt libero lobortis in. Vivamus at dolor ac purus vestibulum varius. Morbi mollis imperdiet lacus ultricies blandit. Phasellus ullamcorper consequat varius. Quisque in nibh elit, vel sollicitudin sem. Praesent nec felis nunc, eget lacinia lectus. Quisque a libero vel lacus molestie porttitor nec in magna. Duis eu diam id elit suscipit tincidunt. Mauris ac lorem non ipsum tempor gravida vitae quis odio. Suspendisse imperdiet, massa sit amet venenatis commodo, tellus erat lacinia sapien, eleifend mattis risus eros sit amet purus.</p>
<p style="text-align: justify;">Cras vitae vestibulum sapien. Donec sed adipiscing neque. Sed vel felis erat, non interdum quam. Maecenas ut metus neque. Proin convallis volutpat ligula, a facilisis quam eleifend nec. Fusce a ipsum lectus, in dignissim leo. Mauris iaculis mi et ante molestie at sagittis diam semper. Nunc quis elit sit amet nisi malesuada vulputate. Etiam egestas blandit mollis.</p>
<div style="text-align: justify;"> </div>
</div>
                    [type] => post
                    [created] => 2012-03-06 19:35:00
                    [online] => 1
                    [category_id] => 1
                    [link] => Array
                        (
                            [controller] => posts
                            [action] => show
                            [id] => 9
                            [slug] => mon-deuxieme-article
                        )
                )
            [Category] => Array
                (
                    [id] => 1
                    [name] => Audio
                    [slug] => audio
                    [post_count] => 1
                    [link] => Array
                        (
                            [controller] => posts
                            [action] => category
                            [slug] => audio
                        )
                )
        )
)

C'est bien ce qu'il me semblait il n'y a pas de relation avec tes commentaires essaies d'enlever ta ligne ou il y a le recursive.

lakamark
Auteur

Ça ne fonctionne pas

Alors rajouter un comportement containable et inscrire dans ton controller :

$this->Post->contain('Comment');
lakamark
Auteur

Ça fonctionne mais comment je l'envoi à la vue maintenant? Pour afficher les commentaires?

De la meme façon que tu a fait au dessus ton tableau $d doit contenir 'Comment' désormais avec la list les commentaires associé a ton post. Dans ta vue il faudra faire un foreach pour lister tes commentaires.

lakamark
Auteur

Le foreach pour lister les commentaires est incorrect :

<?php foreach($d as $k=>$v): current($v); ?>
              <?php echo $d'Comment']; ?>
        <?php endforeach; ?>

Essaies plutôt :

<?php foreach($d'Comment'] as $comment): ?>
    <?php echo $comment'body']; ?>
<?php endforeach; ?>
lakamark
Auteur

Il y a deux message d'erreur qui s'affichent :

Notice (8): Undefined variable: d [APP/View/Posts/show.ctp, line 16]

et

Warning (2): Invalid argument supplied for foreach() [APP/View/Posts/show.ctp, line 16]