Bonjour à tous,

Je développe un petit site perso. Celui ci se compose assez classiquement de tables Posts, Users, ...
J'aimerai proposer aux visiteurs du site un petit formulaire directement en fin de chacun des articles Posts pour envoyer un mail à l'auteur du Post.
Quelle est la façon la plus simple de procéder ?

Merci à vous.

Raphaël

3 réponses


Lartak
Réponse acceptée

Bonjour.

J'aimerai proposer aux visiteurs du site un petit formulaire directement en fin de chacun des articles Posts pour envoyer un mail à l'auteur du Post.

Pour commencer, je ne crois pas que l'auteur sera content de recevoir des tas de mails de cette manière, surtout que d'après ce que tu dis, ce sont les visiteurs qui peuvent lui envoyer un mail, ce qui veut donc dire, n'importe qui, même ceux qui ne sont pas inscrit.
C'est de cette manière que commence les SPAM.
Fais plutôt un simple système de commentaires sur les articles.

Sinon, ce n'est pas compliqué si tu es par exemple sur l'affichage d'un article (post), tu mets ton formulaire avec en champ caché par exemple l'id de l'article, tu peux tout simplement cibler le formulaire sur l'action actuelle, ensuite dans l'action dans le controlleur, tu fais une vérification si des données sont postées et si c'est le cas, tu récupéres l'id de l'utilisateur en faisant une requête sur l'id de l'article, puis tu récupères son adresse email.
Pour finir tu envoies le mail avec le composant Email.

eRaph
Auteur

Merci Lartak pour ta réponse. Je vais effectivement réfléchir par rapport aux risques liés au SPAM.
Une autre solution peut consister comme tu le dis à des "commentaires privés", visibles uniquement par l'auteur du post, et l'auteur du commentaire. C'est un peu plus compliqué à mettre au point.

Non, pas spécialement plus compliqué.
Si tu veux afficher les commentaires à la suite de l'article, tu peux faire quelque chose comme ça, en ajoutant l'id de l'auteur du sujet dans l'enregistrement du commentaire.

$this->Post->id = $id;
if (!$this->Post->exists()) {
    throw new NotFoundException('Post invalide');
}
$author_id = $this->Post->field('user_id');
$post = $this->Post->find('first', [
    'conditions' => ['Post.id' => $id], 
    'contain' => [
        'Comment' => [
            'conditions' => [
                'OR' => ['Comment.user_id' => $this->Auth->user('id'), 'Comment.author_id' => $author_id]
            ]
        ]
    ]
]);
$this->set(compact('post'));

author_id étant bien sûr l'auteur de l'article.
Ceci est juste un exemple, je pense qu'il n'est pas nécessaire de t'expliquer les conditions que j'ai passé dans la requête, elle sont suffisament explicite à mon avis.