Comment améliorer ce réseau social


-I Préambule
-II Améliorons l'application existante
-III Ajoutons la possibilité de mettre des +1 à des posts
(en cours de rédaction)-IV Ajoutons la possibilité de commenter

III Ajoutons la possibilité de mettre des +1 à des posts

III.A Introduction

Pour ce faire, nous allons faire en deux étapes: dans un premier temps créer un module de "like" qui permettra d'ajouter un "j'aime", et de compter les existants.
Dans un second temps nous intégrerons celui-ci dans le module posts

III.B Créer la couche modèle "likes"

Dans un premier temps, générer la classe model de la table "likes"
Dans le builder, cliquer sur "Créer la couche modèle", sélectionnez le profil "socialnetwork", puis cliquez sur "Likes".
Valider avec le bouton "Génerer"

III.C Ajouter des méthodes à notre classe model_likes

Il nous faut une méthode pour ajouter un "j'aime", une ensuite pour compter ceux-ci

Editez la classe model model/mode_likes.php
Ajoutez cette méthode addOnPost qui prend en paramètre l'id du post ainsi que celui du user qui aime.

  
public function addOnPost($iPost_id,$iUser_id){
   $this->execute('DELETE FROM Likes WHERE user_id=? AND post_id=?',$iUser_id,$iPost_id);
   $this->execute('INSERT INTO Likes (user_id,post_id) VALUES (?,?)',$iUser_id,$iPost_id);
}
    


Ajoutez une méthode countByPost qui prend en paramègre l'id du post pour retourner le nombre de "j'aime"

  
public function countByPost($iPost_id){
   $oRow $this->findOne('SELECT count(*) as total FROM '.$this->sTable.' WHERE post_id=?',$iPost_id );
   return $oRow->total;
}
    



III.D Créer le module intégrable like

Le module que nous désirons doit pouvoir s'intégrer facilement dans notre affichage de posts et permettre deux choses : afficher le nombre de "j'aime" ainsi que permettre pour le membre de cliquer sur "j'aime"

Dans le builder, cliquez sur créer un module intégrable, saisissez "like" comme module et entrez "show" comme action


Modifions ensuite la vue show module/like/view/show.php

  
<form action="" method="POST">
   <input type="hidden" name="post_id" value="<?php echo $this->iPost_id?>"/>
   <p style="text-align:right"><a href="#" onclick="submit();return false;"><strong><?php echo $this->iCount?></strong> J'aime</a> </p>
</form>
   

Ici nous avons à la fois l'affichage du nombre de "J'aime" et un bouton pour soumettre le formulaire pour ajouter un "j'aime"

Modifions ensuite l'action _show() module/like/main.php

  
   
public function _show($iPost_id){
      
       
//on verifie si le formulaire n'a pas ete soumis
       $this->processAdd($iPost_id);
      
       
//on recupere le nombre de "j'aime"
       $iCount=model_Likes::getInstance()->countByPost($iPost_id);
  
       $oView
=new _view('like::show');
       $oView->iCount=$iCount;
       $oView->iPost_id=$iPost_id;
      
       
return $oView;
   }
    


Puis ajoutons la méthode pour traiter le formulaire

  
   
private function processAdd($iPost_id){
      
       
//si le formulaire n'a pas ete soumis on ne fait rien
       if(!_root::getRequest()->isPost()){
           return null;
       }
      
       
//cette ligne c'est bien ajouter un "j'aime" sur le post et pas tous les posts
       if(_root::getParam('post_id')!=$iPost_id){
           return null;
       }
      
       $iUser_id
=_root::getauth()->getAccount()->id;
      
       
//ajout d'un "j'aime" sur le post
       model_Likes::getInstance()->addOnPost($iPost_id,$iUser_id);
      
   
}
    



III.E Intégrons notre module like dans l'affichage des posts

Editez l'action _list() de notre module posts module/Posts/main.php

  
   
public function _list(){

      $tPosts=model_Posts::getInstance()->findListByUser($this->user_id);
      
      $oView
=new _view('Posts::list');
      $oView->tPosts=$tPosts;
      $oView->tIndexdUsers=model_Users::getInstance()->getListIndexed();
  
      
//instanciation du module like
      $oView->oModuleLike=new module_like;

      return $oView;
   }
    


Editez la vue de listage des posts module/Posts/view/list.php
Pour y ajouter le code pour afficher le module like pour le posts

  
<?php echo $this->oModuleLike->_show($oPosts->id)->show()?>
   


ce qui donne:

  
<p>&nbsp;</p>
<?
php if($this->tPosts):?>
<?php 
foreach($this->tPosts as $oPosts):?>
       <?php $oDateTime=new plugin_datetime($oPosts->date.' '.$oPosts->time);
       $iDeltatime() - $oDateTime->getMkTime();
      
       $sDelta
=null;
      
       $iDuration
=(60*60*24);
       $iDay= (int)($iDelta $iDuration );
       if( $iDay ){
           $sDelta $iDay.'j ';
          
           $iDelta 
-= ($iDuration $iDay);
       }
      
       $iDuration
=(60*60);
       $iHour= (int)($iDelta $iDuration );
       if( $iHour ){
           $sDelta .= $iHour.'h ';
          
           $iDelta 
-= ($iDuration $iHour);
       }
      
       $iDuration
=(60);
       $iMinute= (int)($iDelta $iDuration );
       if( $iMinute ){
           $sDelta .= $iMinute.'m ';
          
           $iDelta 
-= ($iDuration $iMinute);
       }
      
       
if($iDelta 0){
           $sDelta .= $iDelta.'s '  
       
}
      
  
       ?>

<div>
<div style="float:right;padding:2px;border:4px solid #67807c;border-radius: 0px 0px;width:400px;margin-bottom:4px;">

<h1 style="text-align:right;margin-top:0px;border-radius: 0px 0px;"><?php echo $oPosts->title ?></h1>
<p style="font-style:italic;margin:0px;text-align:right">le <?php echo $oPosts->date ?> &agrave; <?php echo $oPosts->time ?> (il y a <?php echo $sDelta?>) </p>
<p><?php echo $oPosts->body ?></p>

<?php echo $this->oModuleLike->_show($oPosts->id)->show()?>

</div>
<div style="float:right;margin-right:10px;text-align:right">
<h2><a href="<?php echo _root::getLink('mainShare::profil',array('user_id'=>$oPosts->user_id))?>"><?php echo $this->tIndexdUsers[$oPosts->user_id]->firstname ?> <?php echo $this->tIndexdUsers[$oPosts->user_id]->lastname ?></a></h2>
<img style="width:50px" src="<?php echo $this->tIndexdUsers[$oPosts->user_id]->profilPicture ?>"/>
</div>
<div style="clear:both"></div>
</div>
<?php endforeach;?>
<?php 
endif;?>
   


Et voila le résultat:


Téléchager le zip

Téléchargez l'archive du projet à cette étape en cliquant ici
A copier dans le répertoire data/genere du mkframework


Lire la suite : IV Ajoutons la possibilité de commenter