Bonjour,
J'ai un petit problème avec l'affichage des commentaires sur une page d'article. L'index "comment" est vide. Je comprend pas pourquoi.
array(
'Post' => array(
'Post' => array(
'id' => '23',
'name' => 'Prototype',
'slug' => 'prototype',
'content' => '<p>Depuis quelque temps je travail sur mon premier album qui s'appelle Protoype.</p>
',
'type' => 'post',
'online' => '1',
'created' => '2013-07-07 15:39:00',
'media_id' => '52',
'category_id' => '1',
'thumb' => '/uploads/users/1/Untitled_1.png',
'ulink' => array(
'controller' => 'posts',
'action' => 'show',
'id' => '23',
'slug' => 'prototype'
)
),
'Category' => array(
'id' => '1',
'name' => 'Music',
'slug' => 'music',
'post_count' => '3',
'ulink' => array(
'controller' => 'posts',
'action' => 'category',
'slug' => 'music'
)
),
'Thumb' => array(
'id' => '52',
'ref' => 'Post',
'ref_id' => '23',
'file' => '/uploads/users/1/Untitled_1.png',
'position' => '0',
'type' => 'pic',
'icon' => '/uploads/users/1/Untitled_1.png'
)
),
'Comment' => array()
)
L'index Comment est vide et il est posé d'entre remplie des commentaire qui sont lié à l'id de mon article. :(
Voici la requête que je fait sur l'action show() :
$comments = $this->Post->Comment->find('all', array(
'conditions' => array('Comment.post_id' => $post'Post']'id']),
'contain' => array('User'),
'fields' => array('Comment.id', 'Comment.user_id', 'Comment.content','Comment.created','User.username','User.thumb','User.id','Comment.username','Comment.mail')
));
$d'Post'] = $post;
$d'Comment'] = $comments;
Merci de votre aide en avance. :P
Bonjour,
Le debug de $post'Comment'] fonctionne, donc je te propose de partir de là. Reconstruisons ton foreach si tu le veux bien.
<section class="sec-comments">
<?php foreach ($post'Comment'] as $c): ?></div>
<div class="row-fluid">
<section id="comment-<?= $c'id'];?>">
<div class="span2">
<?php if ($c'User']'thumb']): ?>
<?= $this->Html->image($c'User']'thumb'], array('class' => 'avatar')); ?>
<?php endif ?>
</div>
<div class="span6">
<p><strong><?= h($c'username']); ?></strong>, <?= $this->Time->timeAgoInWords($c'created']); ?></p>
<p>
<?= nl2br(h($c'content'])); ?>
</p>
</div>
</section>
</div>
<hr>
<?php endforeach ?>
</section>
je comprends pas : nl2br et $c'User']'thumb'] (je ne le vois pas dans ton debug de $post'comment']
Bonne journée.
Je utilise dans mon model Post
public $hasMany = array('Comment');
dans mon model Comment je utilise un belogongsTo
public $belongsTo = array('User','Post');
Je les trouve j'ai mis le récursive à 0 je les mis à 1 Je les trouve j'ai mis le récursive à 0 je les mis à 1 Les commentaire ne s'affiche pas sur les pages des articles.
Quand je fait un débug de $comments. c'est ça que je vois : array().
Mais quand je fait un debug sur ma page de vue d'un article avec
<?= debug($post'Comment']); ?>
il m'affiche tout les commentaire de l'article en question :
array(
(int) 0 => array(
'id' => '1',
'user_id' => '0',
'username' => 'teste',
'mail' => 'exemple@exemple.com',
'content' => 'ewew',
'post_id' => '23',
'created' => '2013-08-18 17:09:23'
),
(int) 1 => array(
'id' => '2',
'user_id' => '0',
'username' => 'xxz',
'mail' => 'exemple@e.com',
'content' => 'sdsd',
'post_id' => '23',
'created' => '2013-08-18 17:11:52'
),
(int) 2 => array(
'id' => '3',
'user_id' => '0',
'username' => 'dsds',
'mail' => 'exemple@e.com',
'content' => 'dsdssd',
'post_id' => '23',
'created' => '2013-08-18 17:13:03'
),
(int) 3 => array(
'id' => '4',
'user_id' => '1',
'username' => null,
'mail' => null,
'content' => 'Je fait un teste',
'post_id' => '23',
'created' => '2013-08-18 17:13:49'
),
(int) 4 => array(
'id' => '5',
'user_id' => '0',
'username' => 'teste',
'mail' => 'ec@e.com',
'content' => 'exx',
'post_id' => '23',
'created' => '2013-08-20 14:36:34'
)
)
*les commentaire de l'article qui as l'id 23
Désolé, j'avais oublié de mettre le code source de ma vue. Alors voici :
<section class="sec-comments">
<?php foreach ($comments as $c): ?></div>
<div class="row-fluid">
<section id="comment-<?= $c'Comment']'id'];?>">
<div class="span2">
<?php if ($c'User']'thumb']): ?>
<?= $this->Html->image($c'User']'thumb'], array('class' => 'avatar')); ?>
<?php endif ?>
</div>
<div class="span6">
<p><strong><?= h($c'User']'username']); ?></strong>, <?= $this->Time->timeAgoInWords($c'Comment']'created']); ?></p>
<p>
<?= nl2br(h($c'Comment']'content'])); ?>
</p>
</div>
</section>
</div>
<hr>
<?php endforeach ?>
</section>
Il y a pas d'erreur qui s'affiche. Il y a juste rien qui s'affiche.
Bonjour montre nous plutôt la requête de la variable $post. Si il y a une liaison $hasmany , le framework est capable de trouver tout seul les commentaires associés à ton article.
Voici la requête de la variable $post :
$post = $this->Post->find('first',array(
'conditions' => array('online'=>1,'type'=>'post','Post.id' => $id,'Post.created <= NOW()'),
'recursive' => 1
));
Bonjour, en restant sur une seule requête php (un seul find ) et laissant gérer le Framework, je proposerai personnellement de mettre le comportement containable dans ton modèle Post, puis de lui dire de faire les liaisons sur category et comment à cet endroit.
En utilisant heu $this->Post->contain('Comment','Category'); un truc comme ça, je suis plus sur mais dans la doc tu auras la bonne syntaxe.
L'ennui de la variable $recursive, c'est que certes elle fait plus de relation si on l'augmente mais partout , et des fois sur des modèle dont on a absolument pas besoin à cet endroit .
Donc je sais pas si à un endroit tu veux juste afficher la categorie associé... le framework va aller chercher les 54 000 tags associés alors que sur cette page on s en fou.. ça alourdit pour rien la requête (moi exagéré les situations?? jamais XD).
En utilisant le comportement containable , tu peux gérer de manière bien plus précise les relations. En terme de performance on y gagne.