5 minutes reading time (994 words)

Introduction au développement de plugin

Parmi tous les types d'extension disponibles pour Joomla!, les plugins sont les plus simples à mettre en oeuvre, mais peuvent également être les extensions les plus puissantes en vue de la personnalisation de votre site Joomla! Un certain nombre d'évènements sont déjà présents dans Joomla! et permettent le déclenchent de l'exécution de plugins, ce qui permet de compléter le code natif de Joomla!, d'un rendu en y insérant notre propre code.

Imaginez que vous construisiez un site web pour un client qui souhaite la mise en place d'un webinaire (web séminaire) pour ses clients. Bien évidemment, la date et l'heure de ces webinaires vont varier selon le fuseau horaire de l'utilisateur, donc idéalement, nous souhaiterions montrer à l'utilisateur sa date et son heure locales.

En tant que créateur de site, votre première étape sera probablement de rechercher sur le JED une extension qui réponde à cet objectif et sans aucun doute, il en existe au moins une, mais que faire si les solutions existantes sont "surpuissantes" alors que vous souhaitez quelque chose de simple ? Ou alors, que faire si aucune extension n'existe pour le problème que vous essayez de résoudre ?

C'est pour un tel scénario que vous pourriez envisager de créer votre propre plugin de contenu. Cela peut se faire avec quelques simples lignes de code et vous n'avez pas besoin d'être un geek en programmation pour être à même de le créer.

Votre première étape consiste à créer un dossier nommé plg_content_tzconvertor et dans ce dossier, créez le fichier XML d'installation de votre plugin tzconvertor.xml. Ce fichier indique à Joomla! tout ce qu'il faut savoir sur votre plugin : les fichiers inclus, le type de plugin et son auteur.

Si vous avez prévu de partager ce plugin avec la communauté, je vous conseille de vérifier au préalable sur le JED que le nom que vous avez choisi n'est pas déjà utilisé.

<?xml version="1.0" encoding="UTF-8"?>
<extension  
      version="3.0" 
      type="plugin"
      method="upgrade" 
      group="content">
   <name>Content – Timezone Convertor</name>
   <author>Tim Plummer</author>
   <creationdate>April 2014</creationdate>
   <copyright>Copyright (C) 2014 Your Company. All rights reserved.</copyright>
   <license> http://www.gnu.org/licenses/gpl-3.0.html</license>
   <authoremail>This email address is being protected from spambots. You need JavaScript enabled to view it.</authoremail>
   <authorurl>http://www.yourcompany.com</authorurl>
   <version>1.0.0</version>
   <description>This plugin will replace date and time with the local equivalent based on user’s timezone.
Don't forget to publish this plugin!</description>
   <files>
      <filename plugin="tzconvertor">tzconvertor.php</filename>
      <filename>index.html</filename>
   </files>
</extension>

Le "group content" du plugin indique à Joomla! le type de plugin et détermine quel déclencheur d'évènement nous pouvons utiliser.

Maintenant, nous devons créer le fichier PHP de notre plugin. Dans votre dossier plg_content_tzconvertor, créez le fichier tzconvertor.php.

<?php
defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
class plgContentTzconvertor extends JPlugin
{
   function plgContentTzconvertor( &$subject, $params )
   {
      parent::__construct( $subject, $params );
   }
   public function onContentPrepare($context, &$row, &$params, $page = 0)
   {
      // Do not run this plugin when the content is being indexed
      if ($context == 'com_finder.indexer')
      {
         return true;
      }
      if (is_object($row))
      {
         return $this->Tzconvertor($row->text, $params);
      }
         return $this-> Tzconvertor ($row, $params);
      }
   protected function Tzconvertor (&$text, &$params)
   {
      $user = JFactory::getUser();
      $timeZone = $user->getParam('timezone');
      // matches date and time in format yyyy-mm-dd hh:mm
      $pattern = '/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})/';
      $found = preg_match_all($pattern, $text, $matches);
      if ( $found )
      {
         foreach ( $matches[0] as $value )
         {
            $replacement=JHtml::date(strtotime($value) , 'Y-m-d g:i a', true);
            if($timeZone)
            {
               $replacement .= ' ('.$timeZone.')';
            }
            $text = preg_replace($pattern, $replacement, $text);
         }
      }
      return true;
   }
}

Le onContentPrepare est l'évènement que nous ciblons pour ce plugin, il est exécuté lorsque nous affichons le contenu d'un article sur le site. Il appelle la fonction Tzconvertor qui est celle où nous intégrons tout notre code personnalisé et qui fait le gros du travail. En premier lieu, nous récupérons les détails de l'utilisateur actuellement connecté et nous regardons quel est son fuseau horaire.

Puis nous cherchons dans le texte de l'article et regardons si un élément correspond à notre modèle d'expression régulière qui recherche une date et une heure au format yyy-mm-dd hh:mm. Si nous trouvons une correspondance, nous remplaçons la date et l'heure avec une version adaptée au fuseau horaire de l'utilisateur. Nous affichons également le nom du fuseau horaire, afin de faire comprendre à l'utilisateur à quelle date et heure correspond ce fuseau horaire.

A noter, le true flag situé dans la fonction JHtml:date permet d'indiquer l'utilisation du fuseau horaire paramétré par l'utilisateur, plutôt qu'une valeur sur "false" qui utiliserait les paramètres de fuseau horaire du système.

Maintenant, dans votre dossier plg_content_tzconvertor, créez le fichier index.html, qui affichera une page vierge à l'utilisateur, au cas où il tenterait de parcourir directement ce dossier depuis son navigateur, au lieu d'afficher des informations de votre site pouvant être utilisées par des utilisateurs malveilllants.

<html><body bgcolor="#FFFFFF"></body></html>

Tout ce que vous avez à faire maintenant est de zipper votre dossier et de l'installer sur votre site.

Lorsque ce plugin est activé et pour les utilisateurs connectés, il va rechercher toute date et heure au format yyy-mm-dd hh:mm dans un article et l'adapter au fuseau horaire de l'utilisateur.

image001

Notez que la date et l'heure indiquées dans l'article doivent être en fuseau horaire UTC

Lorsqu'un utilisateur avec le fuseau horaire de Sydney se connecte, il verra s'afficher l'heure et la date de son fuseau horaire.

 image002

Ainsi, comme vous pouvez le constater, nous avons effectivement ajouté 17 lignes de code personnalisées à un plugin de contenu standard de Joomla!, ce que, de mon point de vue, tout créateur de site est en mesure de réaliser. Maintenant que vous constatez à quel point les plugins sont simples à mettre en oeuvre, pourquoi ne pas vous lancez la prochaine fois qu'un de vos clients émettra une demande inhabituelle.

0
Citius Altius Fortius
 

Comments

Already Registered? Login Here
No comments made yet. Be the first to submit a comment

By accepting you will be accessing a service provided by a third-party external to https://magazine.joomla.org/