Amis de Grafikart bonsoir,
Je poursuis ma quête de la réalisation de mon premier site complet grace à CakePhP 2.0.
J'ai un problème dans ma partie blog, j'ai une liste de mes articles avec le début de leurs contenus. Quand je clic sur un article, je bascule sur la vue "voir.ctp" , dans cette vue j'ai l'article affiché au complet avec en dessous l'ensemble des commentaires et pour finir, si vous êtes connecté, un formulaire de type textarea pour écrire votre propre commentaire.
Tout ça j'arrive à le faire je vous montrerai le code en dessous. Ensuite, si vous avez déjà posté un article, vous pouvez cliquer sur un petit bouton éditer qui redirige vers le textarea avec le commentaire pré rempli dedans.
C'est ça que je n'arrive pas à faire j'ai tenté ceci :
(PostsController):
<?php function voir($id){ //l'id de l'article écrit au complet dans ma vue voir.ctp
if(!empty($this->request->data)){//la partie pour écrire un nouveau commentaire
$this->Comment->save($this->request->data);
$this->Session->setFlash("Votre commentaire a bien été enregistré !", "notif");
}
$this->layout = 'default';
$b = $this->Post->find('first', array('conditions' => array('Post.id' => $id), 'contain' => array('Comment' => array('User'), 'Category'
)
));
$this->set('article', $b); // je récupere l'article, ses commentaires et les auteurs qui sont forcément des membres de mon site
}?>
(CommentsController) :
<?php
function log_editc($id){//l'id de mon commentaire que je transmet par le lien du bouton edité
$this->Comment->id = $id;
$this->request->data = $this->Comment->read();
$this->render('voir');// le probleme c'est que cette fonction me renvoie sur /log/Comments/editc/37 par exemple
}
?>
Le problème est bien là, ca me renvoie sur /log/Comments/editc/37 alors que l'adresse de ma page devrait être /log/Posts/voir/ $l'id du posts.
Question comment faire pour faire circuler plusieurs $id sur cette page et plusieurs fonction dans l'adresse...
Je sais pas si vous avez compris mon usine à gaz
Dite le moi si je me trompe, Pour réaliser ceci, tu vas devoir passer pas du js et de l'ajax :/
Cf un post que j'ai ouvert il n'y a pas longtemps
Sinon un lien vers ton commentaire à éditer sur une autre page, mais sur la page actuelle c'est pas possible sans js
Edit :
Sinon dans ton posts controller, tu fais une requete sur les commentaire poster par la personne
$comm= $this->Post->Commentaire->find('list',array(
'conditions' => array(
'Commentaire.user_id' => $this->Auth->user('id')),
'Commentaire.post_id' => $id,
));
Tu auras ainsi une variable avec les comms de l'utilisateur,
Ensuite dans ta vue tu fais une condition: if($comm) et tu affiche un bouton pour l'éditer.
Mais après niveau mise en forme js obligatoire.
Salut Xcid, si c'est possible sans JS j'ai trouvé du boulot dans l'apres midi, il suffit de passer dans la fonction voir deux parametres regarde :)
<?php function voir($id, $idC=null){// $id c'est pour l'article et $idc c'est l'id du commentaire que je transmet en cliquant sur le bouton editer
if(!empty($this->request->data)){
if($this->Post->Comment->validates()){
$this->Post->Comment->save($this->request->data);
$this->Session->setFlash("Votre commentaire a bien été enregistré !", "notif");
}else{
$this->Session->setFlash("Votre commentaire n' pas été enregistré !", "notif", array('type' => 'error'));
}
}
if ($idC != null){
$this->Post->Comment->id = $idC;
$this->request->data = $this->Post->Comment->read();
}
$this->layout = 'default';
$b = $this->Post->find('first', array('conditions' => array('Post.id' => $id), 'contain' => array('Comment' => array('User'), 'Category'
)
));
$this->set('article', $b);
}
?>
Oui la voici (je te préviens c'est le bordel)
<?php
echo '<div class="article">';
echo '<div class="presentation">'.$this->Html->image("/theme/img/images.jpg").'</div>';
echo '<div class="contenuA"><h3>'.$this->Html->image("/theme/img/epingle.png").''.$article"Post"]"titre"].'</h3>';
echo '<p><span class="dateP">'.date('d / m / Y', strtotime($article'Post']'created'])).'</span> | <span class="tag">'.$article'Category']'titre'].'</span> | <span class="commentaire">commentaires (<span class="nbreC">';?><?php echo $this->requestAction(array('log'=> false, 'controller' => 'Comments', 'action' =>'nbreC', $article'Post']'id']));?><?php echo '</span>).</span></p>'; ?>
<?php echo '<p>';
echo $this->Markitup->parse($article'Post']'contenu']);
echo '</p>';
echo '</div>';
echo '</div>';
if(!empty($article'Comment'])){
echo '<h2>Commentaires</h2>';
}
foreach($article'Comment'] as $c):
echo '<div class="comment">';
echo '<div class="avatar">'.$this->Html->image("/theme/img/elodie.png").'</div>';
echo '<div class="contenuC"><h4><span class="auteur">'.$c'User']'username'].'</span> a écrit <span class="dateP"> le '.$c'created'].'</span>';
if(AuthComponent::user('id') == $c'User']'id']):
echo $this->Html->link($this->Html->image("/theme/img/editA.png", array('class' => 'editC')),
array('log' => false, 'controller' => 'Posts', 'action' => 'voir', $article'Post']'id'], $c'id']), array('escape' => false));
echo $this->Html->link($this->Html->image("/theme/img/del.png", array('class' => 'editC')),
array('log' => false, 'controller' => 'Comments', 'action' => 'delete'), array('escape' => false));
endif;
echo '</h4>';
echo '<p>'.$c'contenu'].'</p>';
echo '</div>';
echo '</div>';
endforeach;
?>
<?php
if(AuthComponent::user('id')):
echo $this->Html->script('/js/markitup/jquery.markitup.js');
echo $this->Html->script('/js/markitup/sets/bbcode/set.js');
echo $this->Form->create('Comment', array('url' =>array('controller' => 'posts', 'action' => 'voir', $article'Post']'id'])));
echo '<h3>Laisser un commentaire :</h3>';
echo '<p>';
echo $this->Markitup->editor('Comment.contenu', array( 'set' => 'bbcode', 'parser' => '/posts/preview/bbcode', 'label' => false, /*'value' => "",*/ 'error' => 'ecrivez !'));
echo $this->Form->input('post_id', array('type' => 'hidden', 'value' => $article'Post']'id']));
echo $this->Form->input('user_id', array('type' => 'hidden', 'value' => AuthComponent::user('id')));
echo $this->Form->submit('/theme/img/envoyer.png', array('div' => false, 'class' => 'submit'));
echo '</p>';
endif;
?>
Sinon par rapport à mon controller dans mon post précédent, j'arrive pas à editer le commentaire, je veux dire par là que quand je modifie le contenu d'un commentaire et que je valide, ça m'en crée un nouveau, ça ne modifie pas le message voulu. (et je n'arrive toujours pas à mettre des règles de validations dans mon model commentaire).
'Je vais finir par y arriver petit à petit :p'
Salut Tapesec,
As tu résolu le problème de tes règles de validations du model Comment.php et du faite que le commentaire se rajoute au lieu de se modifier.
J'ai en faite exactement les mêmes soucis que toi.
Merci