Bonsoir,

J'ai mis en place le plugin Comment de notre ami Grafikart. Bon apparement tout fonctionne... presque. Je rencontre 2 problèmes.

Premièrement quand je post un commentaire j'ai cette erreur :

Notice (8): Undefined variable: model [APP/Plugin/Comment/Controller/CommentsController.php, line 7]
Notice (8): Undefined variable: username [APP/Plugin/Comment/Controller/CommentsController.php, line 7]
Notice (8): Undefined variable: model [APP/Plugin/Comment/Controller/CommentsController.php, line 7]
Notice (8): Undefined variable: mail [APP/Plugin/Comment/Controller/CommentsController.php, line 7]
Notice (8): Undefined variable: model [APP/Plugin/Comment/Controller/CommentsController.php, line 8]

Mais si je reviens sur ma page et que je la rafraîchie, mon commentaire est bien affiché... Il est bien sauvegardé dans la base de donnée. Je le récupère bien (après actualisation de la page) et tout s'affiche très bien. J'ai juste cette erreur quand on envoi.

Deuxièmement, si j'ai bien compris. Si un utilisateur est loggé, il devrait récupérer les infos (username, mail...) non ?
Car quand je suis connecté, je dois rentré ces infos, il ne le détecte pas.

Avez-vous déjà rencontrer ce problème ?
Avez-vous une idée du pourquoi du comment ?

D'avance merci.

13 réponses


SwithFr
Auteur

Un petit up ?

On veut avoir le code des lignes concernés j'ai pas le plugin...

SwithFr
Auteur

Voilà le CommentsController.php :

<?php
class CommentsController extends AppController{
    public function beforeFilter(){
        parent::beforeFilter();
        $this->paginate = array(
            'fields' => array("Comment.username","Comment.mail","$model.$username","$model.$mail","Comment.content","Comment.id"),
            'contain'=> array($model),
            'order' => 'Comment.id DESC'
        );
    }
    function add(){
        $referer = $this->referer().'#commentForm';
        if(!empty($this->request->data)){
            $user_id = $this->Auth->user("id");
            // We add new datas
            $this->request->data'Comment']'ip'] = $this->getIp();
            $this->request->data'Comment']'user_id'] = $user_id ? $user_id : 0;
            $this->Comment->create($this->request->data, true);
            $model = ClassRegistry::init($this->request->data'Comment']'ref']);
            // Can we comment this model ?
            if(!$model->Behaviors->attached('Commentable')){
                $this->Session->setFlash(__("Impossible de commenter ce contenu"), "flash", array('class' => 'error'), 'commentForm');
                return $this->redirect($referer);
            }
            // Does this record exists ?
            if(!$model->exists($this->request->data'Comment']'ref_id'])){
                $this->Session->setFlash(__("Impossible de commenter ce contenu"), "flash", array('class' => 'error'), 'commentForm');
                return $this->redirect($referer);
            }
            if($this->request->data'Comment']'parent_id'] != 0 && !$this->Comment->exists($this->request->data'Comment']'parent_id'])){
                $this->Session->setFlash(__("Impossible de répondre à ce commentaire"), "flash", array('class' => 'error'), 'commentForm');
            }
            // Does this comment validates ?
            if( $this->Comment->validates() || ($user_id && !empty($this->request->data'Comment']'content'])) ){
                // Spam is configured ?
                if(Configure::read('Plugin.Comment.akismet') && !$user_id){
                    $is_spam = $this->Comment->isSpam();
                    if(!Configure::read('Plugin.Comment.keepSpam') && $is_spam){
                        $this->Session->setFlash(__("Ce commentaire a été considéré comme spam et ne sera pas sauvegardé"), "flash", array('class' => 'error'), 'commentForm');
                        return $this->redirect($referer);
                    }elseif($is_spam){
                        $this->Comment->data'Comment']'spam'] = 1;
                    }
                }
                $this->Session->setFlash(__("<strong>Merci</strong> votre commentaire a bien été sauvegardé"), "flash", array('class' => 'success'), 'commentForm');
                $this->Comment->save(null, false);
                return $this->redirect($referer);
            }else{
                $this->Session->setFlash(__("Certains champs n'ont pas été rempli correctement, merci de corriger vos erreurs"), "flash", array('class' => 'error'), 'commentForm');
                return $this->redirect($referer);
            }
        }
    }
    private function getIp(){
        $ip;
        if (getenv("HTTP_CLIENT_IP"))
        $ip = getenv("HTTP_CLIENT_IP");
        else if(getenv("HTTP_X_FORWARDED_FOR"))
        $ip = getenv("HTTP_X_FORWARDED_FOR");
        else if(getenv("REMOTE_ADDR"))
        $ip = getenv("REMOTE_ADDR");
        else
        $ip = false;
        return $ip;
    }
    function admin_index(){
        $comments = $this->paginate('Comment');
        $this->set(compact('comments'));
    }
    function admin_delete( $id ){
        $this->Comment->delete($id);
        return $this->redirect($this->referer());
    }
}

Tu l'as chargé comment dans le bootstrap?

SwithFr
Auteur

Avec la ligne suivante :

CakePlugin::loadAll();

J'ai plusieurs plugins, donc je load tout ;)

oui mais si je regarde la configuration que préconise Grafikart:

CakePlugin::loadAll(array(
        'Comment' => array('bootstrap' => true)
      ));

Il y a un fichier de config à charger, que tu peux modifier si les champs dans ta base (et la table) sont differents que les champs qu il a mis par default

C'est le fichier dans le dossier Config du plugin qui te permet de parametrer ce que tu veux

SwithFr
Auteur

Et bien j'ai essayé avec cette préconisation justement. Y a du mieux et du moins bien. Je respecte le plus souvent les conventions que suit grafikart donc mes champs sont nommés exactement pareil. Donc pas besoins de modifier la config.

En mettant bootstrap true, les champs pseudo et mail n'apparaissent plus pour ajouter un commentaire. Mais cette fois l'erreur est toujours là mais la sauvegarde ne se fait pas. Si je me deonnecte, les champs pseudo et mail sont là et quand j'envoie un commentraire, toujours l'erreur mais la sauvegarde se fait bien.

A voir les impacts des nouvelles versions de cakePHP depuis la publication de ce plugin ...

SwithFr
Auteur

Hum ça va être chiant alors ^^

Sauf erreur de config de ta part , regarde de nouveau la doc associé, on sait jamais, c sans doute les modifs du framework qui va falloir repercuter sur le plugin

SwithFr
Auteur

J'ai bien tout vérifier ^^. Mais comme j'ai commencé avec cake y a pas trop longtemps, je ne connais pas les différences avec les anciennes version :( Donc je vois mal où chercher de ce côté là.

D'ailleurs je viens de remarquer un truc. il n'y a rien d'indiqué pour comment faire pour mettre en place la réponse aux commentaires.

EDIT: Quand j'essai d'accèder à la page ..admin/comment/comments/index j'ai la fameuse erreur...

On peut essayer de mettre un debug, die dans le fichier de configuration pour voir si il est bien appeler.

Et si le seul problème du plugin est le chargement des variables, tu peux toujours les définir en haut du controller et voir si ça fonctionne, si l'unique problème est le chargement de cette configuration, faudra réflechir à comment faire pour la charger correctement, le framework a surement évolué , ça cause des petits bugs