Ex plugin classique

De TheliaDoc
Version du 14 février 2012 à 11:05 par Roadster31 (discuter | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Nous allons créer un plugin "commentaires".

Celui-ci permettra aux internautes d'ajouter des commentaires sur une fiche produit.
Une nouvelle boucle permettra d'afficher ces commentaires et une interface d'administration de les supprimer si besoin.

Nous allons créer un répertoire "commentaires" contenant 2 fichiers :

- Commentaires.class.php (notre classe pour le plugin)
- commentaires_admin.php


Commençons par la classe.

Voici son allure générale :


<?php

include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsClassiques.class.php");
	
	
	class Commentaires extends PluginsClassiques{

		public $id;
		public $nom;
		public $message;
		public $ref;
		public $date;
		
		const TABLE = 'commentaires';

		public $table = self::TABLE;

		public $bddvars = array("id", "nom", "message", "ref", "date");
		
		public function __construct(){
			parent::__construct("commentaires");	
		}

		public function charger($id){		
		}


		publicfunction init(){									
		}

		public function destroy(){
		}		

		public function boucle($texte, $args){
		}	

		public function action(){
		}
		
	}
?>


Notre plugin utilisera une table dans la base de données contenant 5 champs :
- id : identifiant du commentaire.
- nom : nom de l'auteur du commentaire.
- message : contenu du commentaire.
- ref : référence du produit associé au commentaire.
- date : date de l'ajout du commentaire.


Détaillons maintenant chaque méthode.


		function charger($id){
		
			return $this->getVars("select * from $this->table where id=\"$id\"");

		}

Cette méthode permet de charger un commentaire de la bdd via son identifiant.


		function init(){
						
			$query_commentaires = "CREATE TABLE `".self::TABLE."` (
			  `id` int(11) NOT NULL auto_increment,
			  `nom` text NOT NULL,
			  `message` text NOT NULL,
			  `ref` text NOT NULL,
			  `date` datetime NOT NULL,
			  PRIMARY KEY  (`id`)
			) AUTO_INCREMENT=1 ;";

			$resul_commentaires = $this->query($query_commentaires);			

		}

L'initialisation du plugin va simplement créer une table commentaire dans la base de données Thelia.


		function destroy(){
		
		}	

Nous décidons de ne rien faire de particulier à la désactivation du plugin.


		function boucle($texte, $args) {
			// récupération des arguments
			$ref = lireTag($args, "ref");

			$search ="";

			$res="";

			// préparation de la requête
			if ($ref!="")  $search.=" and ref=\"$ref\"";

			$commentaire = new Commentaires();	

			$query_commentaires = "select * from $commentaire->table where 1 $search";

			$resul_commentaires = $this->query($query_commentaires);

			if ($resul_commentaires) {

				$nbres = $this->num_rows($resul_commentaires);

				if ($nbres > 0) {

					while( $row = $this->fetch_object($resul_commentaires)){

						$temp = $texte;

						$temp = str_replace("#NOM", $row->nom, $texte);
						$temp = str_replace("#MESSAGE", $row->message, $temp);
						$temp = str_replace("#DATE", substr($row->date, 0, 10), $temp);
						$temp = str_replace("#HEURE", substr($row->date, 11), $temp);

						$res .= $temp;
					}
				}

			}

			return $res;
	
		}	

La boucle commentaire est gérée ici. Voici ses caractéristiques :

Param entrée
ref : référence du produit

Param sortie
#NOM : nom de la personne qui a posté un commentaire
#MESSAGE : contenu du commentaire
#DATE : date du commentaire
#HEURE : heure du commentaire

La boucle prendra comme "type" le nom du plugin (=le nom de la classe). Voici donc un exemple d'utilisation pour ce plugin :

<THELIA_comment type="COMMENTAIRES" ref="#PRODUIT_REF">                                                      
          Message de #NOM : #MESSAGE <br />
          #HEURE #DATE 
</THELIA_comment>


		function action(){
			
			if($_POST['action'] == "ajcommentaire"){

				$commentaire = new Commentaires();
				$commentaire->nom = $_POST['commentaire_nom'];
				$commentaire->message = $_POST['commentaire_message'];
				$commentaire->ref = $_POST['commentaire_ref'];
				$commentaire->date = date("Y-m-d H:i:s");

				$commentaire->add();

				$cache = new Cache();
				$cache->vider("COMMENTAIRES", "%");

			}	

La méthode action regardera au chargement de la page si une demande d'ajout de commentaire est présente. Si c'est le cas alors le commentaire sera ajouté et le cache vidé.

Pour ajouter un commentaire, il suffira d'utiliser le formulaire suivant :

    <form action="produit.php" method="post">
	<input type="hidden" name="action" value="ajcommentaire" />
	<input type="hidden" name="commentaire_ref" value="#PRODUIT_REF" />
	<input type="hidden" name="ref" value="#PRODUIT_REF" />
	Nom : <input type="text" name="commentaire_nom" /><br />
	Message : <input type="text" name="commentaire_message" /><br />
	<input type="submit" value="OK" />
    </form>


Nous avons terminé la partie "cliente" de notre plugin.


Passons maintenant à l'administration des commentaires. Elle sera très simple et permettra de supprimer un commentaire.
Si vous souhaitez la compléter, n'hésitez pas.

La page commentaires_admin.php réagira à l'action supprimer --> suppression du commentaire donc l'id sera passé. Elle sera capable d'afficher les commentaires.

Voici le code de cette page :

<?php
	include_once(realpath(dirname(__FILE__)) . "/Commentaires.class.php");
	$commentaires = new Commentaires();
?>


	<div id="contenu_int"> 
	   <p class="titre_rubrique">Gestion des commentaires</p>
	     <p align="right" class="geneva11Reg_3B4B5B"><a href="accueil.php" class="lien04">Accueil </a> 
	<img src="gfx/suivant.gif" width="12" height="9" border="0" /><a href="#" class="lien04">Gestion des commentaires</a>              
	    </p>
	     <table width="710" border="0" cellpadding="5" cellspacing="0">
	     <tr>
	       <td width="600" height="30" class="titre_cellule_tres_sombre">Liste des commentaires</td>
	     </tr>
	   </table>
	

<?php 
	if($action == "supprimer"){
		$commentaires->charger($id);
		$commentaires->delete();
		
		$cache = new Cache();
		$cache->vider("COMMENTAIRES", "%");
	}
	
	if($action == "visualiser"){
		$commentaires->charger($id);
?>

   <table width="710" border="0" cellpadding="5" cellspacing="0">
     <tr>
       <td height="30" class="titre_cellule">DATE</td>
       <td class="cellule_sombre"><?php echo($commentaires->date); ?></td>
     </tr>
     <tr>
       <td height="30" class="titre_cellule">PRODUIT</td>
       <td class="cellule_claire"><a href="produit_modifier.php?ref=<?php echo $commentaires->ref; ?>" class="lien04">
		<?php echo $commentaires->ref; ?></a></td>
     </tr>
     <tr>
       <td height="30" class="titre_cellule">NOM </td>
       <td class="cellule_sombre"><?php echo($commentaires->nom); ?> </td>
     </tr>
     <tr>
       <td height="30" class="titre_cellule">MESSAGE</td>
       <td class="cellule_claire"><?php echo($commentaires->message); ?></td>
     </tr>

</table>

<table width="710" border="0" cellpadding="5" cellspacing="0">
  <tr>
    <td height="30" class="cellule_sombre2"><span class="sous_titre_rubrique"><span class="geneva11Reg_3B4B5B">
<a href="<?php echo $_SERVER['PHP_SELF'] ?>?nom=commentaires" class="txt_vert_11">Retour</a></span> 
<a href="<?php echo $_SERVER['PHP_SELF'] ?>?nom=commentaires">
<img src="gfx/suivant.gif" width="12" height="9" border="0" /></a></span></td>
  </tr>
</table>

<?
	} else if($action == "" || $action == "supprimer"){
		
?>



<?php
	$query_commentaires = "select * from $commentaires->table order by date desc";
	$resul_commentaires = $commentaires->query($query_commentaires, $commentaires->link);
	$i = 0;
	
	while($resul_commentaires && $row = $commentaires->fetch_object($resul_commentaires)){
		if($i%2) $fond="sombre";
		else $fond="claire";
?>
  <table width="100%"  border="0" cellspacing="0" cellpadding="0">

  <tr class="cellule_<?php echo $fond; ?>">
    <td width="20%" height="30"><?php echo $row->date; ?></td>
 	<td width="20%" height="30"><a href="produit_modifier.php?ref=<?php echo $row->ref; ?>" class="lien04"><?php echo $row->ref; ?></a></td>
    <td width="20%" height="30"><?php echo $row->nom; ?></td>
    <td width="16%" height="30">
      <div align="left">
	<a href="<?php echo $_SERVER['PHP_SELF'] ?>?nom=commentaires&action=supprimer&id=<?php echo $row->id; ?>" class="txt_vert_11">Supprimer</a>
	<a href="promo.php"><img src="gfx/suivant.gif" width="12" height="9" border="0" /></a></div>
    </td>
	
    <td width="16%" height="30">
      <div align="left">
<a href="<?php echo $_SERVER['PHP_SELF'] ?>?nom=commentaires&action=visualiser&id=<?php echo $row->id; ?>" class="txt_vert_11">Poursuivre </a>
<a href="promo.php"><img src="gfx/suivant.gif" width="12" height="9" border="0" /></a></div>
    </td>
  </tr>
 
  </table>
 
<?php 

		$i++;
	}
}	
?>


</div>
</body>
</html>


Notre plugin est terminé. Il suffit maintenant de zipper notre répertoire et de l'activer via l'admin. Enfin la page qui permettra de gérer les commantaires est automatiquement accessible via l'admin dans la rubrique "Modules d'admnistration" (cf. Ajout d' Interface d'admin des plugins)

Si vous souhaitez étudier ce plugin commentaire de plus près, sachez qu'il est disponible en ligne. Le plugin Commentaires

Toutes les contibutions : Plugins Thelia