Bonjour,
Depuis pas mal de temps je suis en train de développer ma messagerie interne sur mon site à l'aide de CakePHP.
Cepandant si je suis là c'est que je galère...
J'ai créer une table "messageries" avec id, conversation, user_id, destinataire_id, title, contenu, created, statut_expediteur, statut_destinataire, slug.
En sachant que conversation est l'ID de du fil de discussion.
J'ai réussi à faire ce que je voulais comme créer un fil de discussion.
Le problème est maintenant que je pense qu'en faite que ma table, ne devrait pas du tout fonctionner comme ci-dessus.
J'ai beau chercher partout sur internet personne parle de messagerie interne avec cakephp.
Mon principal problème, est que je n'arrive pas à récupérer l'ID de la personne qui envoie le message, pour ainsi lui répondre.
Si quelqu'un pourrait me guider.
Je vous remercie d'avance.
Bonjour,
Mon problème est résolu.
J'ai changer complètement de structure dans ma base de donnée.
Merci tout de même pour votre aide.
A bientôt.
Il faut que tu fasses deux association sur le même model comme ils font dans la documentation une fois sur message et pareil sur user:
Oui j'ai réussi à faire ça pour pouvoir afficher les différents messages des deux personnes. Mais je n'arrive pas à récupérer l'ID de la personne pour y répondre.
C'est surement très facile mais je ne vois pas du tout.
Bonjour.
J'ai un peu de mal à comprendre une partie de la structure de ta table messageries, surtout les champs : statut_expediteur et statut_destinataire.
Selon leur nom, tu y stockerait si l'un et l'autre sont en ligne ou hors-ligne, pourtant tu parles de messagerie interne et non d'un t'chat.
En sachant que conversation est l'ID de du fil de discussion.
Normalement le champs ID est une clé primaire et est donc généralement unique, j'ai donc du mal à comprendre comment tu peux t'en servir comme référent pour une conversion alors qu'un enregistrement correspond à un message.
Mon principal problème, est que je n'arrive pas à récupérer l'ID de la personne qui envoie le message, pour ainsi lui répondre.
L'user_id de la personne qui envoie un message, tu peux la récupérer via la session lorsqu'il valide le formulaire pour la stocker dans l'enregistrement, je ne vois donc pas où est ton soucis.
Si par contre c'est l'id de la personne à qui l'utilisateur répond que tu veux récupérer et que tu ne veux pas qu'elle apparaisse dans le formulaire de réponse, ni via l'url, tu peux toujours par exemple faire une écriture dans la session via ajax, de cette manière l'action s'effectue en toute transparence, et tu pourras récupérer la valeur depuis la session depuis ton controller sans problème.
Bref, tu as plusieurs possibilités de disponibles, mais nous ne pouvons pas être bien précis avec le peu de renseignements dont nous disposons.
Montres nous un peu ton code, principalement les associations des modèles que tu as fait.
Car sans une base solide sur laquelle s'appuyer, je ne vois pas trop comment nous pourrions t'aider plus efficacement.
Salut merci de vos réponses.
Statut_expediteur et statut_destinataire aura comme valeur "Lu", "Non lu", et autre plus tard.
Voici un screen de la bdd.
Lien vers le screen
user_id est l'id du membre qui envoie le message
destinataire_id est le membre qui reçoit le message.
En faite chaque message est l'ID.
Conversation est l'ID d'un fil de discussion. Comme sur des forums, on a l'ID des messages mais l'ID (conversation) pour le sujet.
Pour de ce qui est de l'Ajax je suis pas chaud du tout. Tu m'as déjà proposer cette solutions en ajax pour un autre sujet concernant plusieurs requêtes dans des foreach et je n'ai toujours pas trouvé comme faire avec l'ajax.
Je m'y collerais plus tard pour le moment j'évite l'ajax.
Pour le model voici le code.
Model Messagerie
<?php
class Messagerie extends AppModel {
public $belongsTo = [
'Expediteur' => [
'className' => 'User',
'foreignKey' => 'user_id'
],
'Destinataire' => [
'className' => 'User',
'foreignKey' => 'destinataire_id'
]
];
}
Model User
public $hasMany = [
'MessagesEnvoyer' => [
'className' => 'Messagerie',
'foreignKey' => 'user_id'
],
'MessageRecu' => [
'className' => 'Messagerie',
'foreignKey' => 'destinataire_id'
],
'Commentaires' => [
'className' => 'Comment',
'foreignKey' => 'user_id'
]
];
Je vous remercie pour votre aide.
Une question que j'avais posé, créer plusieurs tables dans ma bdd ne serait pas t'il plus simple ?
Pour les conventions je m'arrange pour que ça concorde, pour le user_id j'ai mis ça pour éviter de remodifier dans le model pour expediteur_id.
Pour la table c'est moi même qui l'ai rempli manuellement.
Je sais les afficher, là n'est pas le problème. Mon problème c'est comment récupérer l'ID de la personne avec qui je communique.
Je suis conscient que c'est vraiment pas compliquer mais je n'arrive pas à voir comment le faire.
je te conseille de changer user_id par expediteur_id
Je ne voudrais pas dire, mais je crois bien que tu t’emmêle les pinceaux, user c'est en anglais, donc je ne vois pas où est le problème.
Surtout que selon les conventions de CakePHP, ce sont surtout les noms de tables sur lesquels il vaut mieux les mettres en anglais et non pour les champs, mais bon.
Ensuite, c'est assez explicite avec user_id, on comprend facilement que c'est celui qui as soumis len formulaire, par conséquent, qui est l'auteur du message, si l'autre champ était difficile à comprendre encore, je voudrais bien, mais là.
^^ Bon sinon le problème n'est pas là. Moi ça me convient parfaitement, après je pourrais dire chacun sa méthode du moment qu'elle fonctionne.