1. #1
    Membre habitué
    Homme Profil pro
    Assistant statisticien
    Inscrit en
    juillet 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Assistant statisticien
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2009
    Messages : 98
    Points : 138
    Points
    138

    Par défaut Chat avec le mkframework

    Bonjour, j'aimerais créer un chat avec le framework.

    Voilà mes tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    CREATE TABLE `conversations` (
      `id` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `conversations` (`id`) VALUES
    (1);
    
    CREATE TABLE `conversations_users` (
      `id` int(11) NOT NULL,
      `user_id` int(11) NOT NULL,
      `conversation_id` int(11) NOT NULL,
      `readt_at` datetime NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    --  table `conversations_users`
    --
    
    INSERT INTO `conversations_users` (`id`, `user_id`, `conversation_id`, `readt_at`) VALUES
    (1, 1, 1, '2018-02-20 15:13:28'),
    (2, 14, 1, '2018-02-20 15:13:47');
    
    CREATE TABLE `messages` (
      `id` int(11) NOT NULL,
      `msg_from` varchar(150) NOT NULL,
      `conversation_id` int(11) NOT NULL,
      `content` text NOT NULL,
      `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    -- Déchargement des données de la table `messages`
    --
    
    INSERT INTO `messages` (`id`, `msg_from`, `conversation_id`, `content`, `created_at`) VALUES
    (1, 'vincent.jue', 1, 'bonjour', '2018-02-20 13:07:42'),
    (2, 'beatrice.dijoux', 1, 'Bonjour', '2018-02-20 15:14:00');
    
    ALTER TABLE `conversations`
      ADD PRIMARY KEY (`id`);
    
    ALTER TABLE `conversations_users`
      ADD PRIMARY KEY (`id`);
    
    ALTER TABLE `messages`
      ADD PRIMARY KEY (`id`);
    j'ai une page messagerie::list qui liste tous les utilisateurs qui peuvent communiquer entre eux.
    quand je clique sur un des noms une page messagerie::show&id=1 ( avec l'id du user )
    j'aimerais enregistré un message pour cette personne en base

    Voilà mon controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <?php 
    class module_messagerie extends abstract_module{
    	
    	public function before(){
    		$this->oLayout=new _layout('bootstrap');
    		
    		$this->oLayout->addModule('menu','menu::index');
    	}
    	
    	
    	public function _list(){
    		
    		$tUsers = model_users::getInstance()->findAll();
    
    		$oView=new _view('messagerie::list');
    		$oView->tUsers=$tUsers;
    
    		$this->oLayout->add('main',$oView);
    	}
    
    	public function _show(){
    		$tUsers = model_users::getInstance()->findAll();
    		$oUserShow = model_users::getInstance()->findById( _root::getParam('id') );
    
    		
    
    		$oView=new _view('messagerie::show');
    		$oView->tUsers=$tUsers;
    		$oView->oUserShow=$oUserShow;
    		
    		$oPluginXsrf=new plugin_xsrf();
    		$oView->token=$oPluginXsrf->getToken();
    
    		$tMessage=$this->processSave();
    		$oMessages=new row_messages;
    
    		$this->oLayout->add('main',$oView);
    	}
    
    	
    
    	private function processSave(){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
    		
    		/*$oPluginXsrf=new plugin_xsrf();
    		if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    			return array('token'=>$oPluginXsrf->getMessage() );
    		}*/
    	
    		$iId=_root::getParam('id',null);
    		if($iId==null){
    			$oMessages=new row_messages;	
    		}else{
    			$oMessages=model_messages::getInstance()->findById( _root::getParam('id',null) );
    		}
    		
    		$tColumn=array('msg_from','conversation_id','content','created_at');
    		foreach($tColumn as $sColumn){
    			$oMessages->$sColumn=_root::getParam($sColumn,null) ;
    		}
    		
    		
    		if($oMessages->save()){
    			//une fois enregistre on redirige (vers la page liste)
    			_root::redirect('messagerie::list');
    		}else{
    			return $oMessages->getListError();
    		}
    		
    	}
    
    	public function after(){
    		$this->oLayout->show();
    	}
    	
    	
    }
    Comment dois je procédé au niveau de process_save

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 103
    Points : 19 131
    Points
    19 131
    Billets dans le blog
    17

    Par défaut

    J'ai un doute concernant l'idée de l'appli:

    On a une liste de user, nous on est connectéé avec un autre user

    Quand on cliquer sur un utilisateur, on ouvrer une "page" en conversation direct avec celui-ci ?
    On en profite pour créer une conversation en base ? (dans la table conversations)
    il faut en meme temps créer 2 entres dans conversation_users ? une pour chacun des deux users qui discutent ?

    Si oui, on arrive donc sur une page ou on a en haut un div affichant tous les messages echangés avec ce user, et en bas un grand champ input pour pousser un nouveau message, c'est bien ça ?

    Sur cette page, au bouton submit, on peut appeler un processSave() qui fera un ajout dans la table message

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public function processSave(){
     (...)
     
     
     $oMessage=new row_messages();//il faut creer lee classes modeles pour chaque table via le builder
     $oMessage->msg_from=''monUserConnecte ?';
     $oMessage->conversation_id=$laVariableDeLaConversationCree;
     $oMessage->content=_root::getParam('leNomDuChampDuGrandChampInput');
     
     $oMessage->save();
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

Discussions similaires

  1. Réaliser un Chat avec support IP
    Par Sub0 dans le forum Développement
    Réponses: 12
    Dernier message: 14/07/2006, 10h59
  2. [xp] chat avec un logiciel open source ?
    Par sali dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 19/02/2006, 14h45
  3. Comment créer un chat avec VB 6 ?
    Par magic8392 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 21/10/2005, 15h37
  4. Le chat (avec les sockets) sans frames.
    Par azmeuk dans le forum Syntaxe
    Réponses: 1
    Dernier message: 18/10/2005, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo