Créer son propre module (ez)

9 Commentaires

Aujourd’hui nous allons voir un exemple pour créer son propre module. Un module dans ezpublish est une interface HTTP qui peut être utilisé pour l’interaction avec le système.  On peut  dire qu’il s’agit d’un contrôleur  tout simplement. Il est possible d’étendre le système en créant des modules personnalisés pour des besoins spéciaux.

Un module se compose des vues.  Une vue peut être  considérée comme une interface à un module, ces vues sont des scripts PHP qui gèrent  certaines actions d’une application web.  Certaines vues  peuvent  avoir  un template qui leur  est assigné, il faut garder à l’esprit qu’un template est seulement  une représentation visuelle d’une vue.

Par exemple le module contenu d’ezpublish fournit des vues, d’édition, la recherche…

Dans l’exemple ci-dessous, ezpublish est chargé pour accéder à la vue search de module content

ecran1

Les vues peuvent avoir des paramètres. Un paramètre de vue permet de transmettre des informations à la vue elle-même. Voici quelques informations de plus 

Commençant un peu de pratique:

J’ai supposé que vous avez déjà créée une extension et vous avez familiarisé un peu avec le mécanisme d’ezpublish. Je vous invite à lire ce tuto pour la création d’une extension lien

Dans le dossier settings de votre extension, créer le fichier « module.ini.append.php », qui aura comme contenu :

<?php /*
[ModuleSettings]
ExtensionRepositories[]=ezsite
ModuleList[]=mail
*/ ?>

Dans ce fichier, vous allez mettre le nom de votre extension ici « ezsite ». Nous avons indiqué au système que notre extension va contenir des modules supplémentaires.Le nom de module ici est mail.

Après cela, vous avez besoin dé définir votre module, et pour cela créer le dossier « modules » dans votre extension « ezsite », qui va contenir un sous dossier « mail » (le nom de votre module), et de mettre un fichier PHP nommé module.php

ecran3

<?php 
$Module = array( 'name' => 'mail', 'variable_params' => true );
$ViewList = array();
$ViewList['send'] = array('script' => 'send.php');
?>

Nous avons créé 2 tableaux, pour définir les paramètres et les données pour le module.

Le tableau $Module concerne le module lui-même, ainsi certains paramètres que le module va utiliser.

Le tableau $ViewList, est un tableau composé des définitions de vues que le module va les manipuler.

N.B : il est possible d’ajouter d’autres tableau comme par exemple $FunctionList qui sert à ajouter ses propres fonctions pour limiter les accès.

Alors, pour notre $ViewList, nous avons défini une vue appelée send, et un script pour cette vue « send.php » qui sera exécuté après que nous ayons accès à l’url www.votresite.ma/mail/send. Pour cela, j’ai ajouté un simple lien sur mon menu.tpl

<li><a href="/mail/send"|ezurl()>envoyer un mail</a></li>

Si vous essayez d’accéder maintenant, vous aurez un accès refusé,

Pour cela, vous devez ajouter une nouvelle politique de sécurité vie le Back_office à anonymous (visiteur de site)

selection_un_module

Alors, si tout est OK, vous pouvez accéder à votre module.  Un simple  echo «first module »,  dans votre fichier « send.php »  est suffisante jusqu’à présent.

J’aimerais bien profiter et faire un petit exemple d’envoie de mail sur notre fichier « send.php ».

Comme déjà mentionner, une vue peut avoir des templates associés.

<?php
$tpl = eZTemplate::factory();
$tpl = eZTemplate::factory();
if($http->hasPostVariable('mail'))
{
// Récupérer les informations pour l'envoie de mail(siteurl, emailsender,contentype)
$siteINI = eZINI::instance( 'site.ini' );
// mail de la personne qui a envoyé le mail
$mail_sender = $http->variable('mail');
// mail de l'admin va recevoir le mail
$mail_admin = $siteINI->variable('MailSettings', 'AdminEmail');
// le contentType (html,text,...)
$content_type = $siteINI->variable('MailSettings', 'ContentType');
// initaliser un objet de la classe eZMail
$mail = new eZMail();
// setter les différents parametres
$mail->setcontentType($content_type);
$mail->setSender($mail_sender);
$mail->setReceiver($mail_admin);
$mail->setSubject('Tester un envoie de mail');
// message de mail
$message = "un visiteur vous a envoyé un mail juste pour tester un custom module, le mail a été envoyé par ".$mail_sender;
// passer le message au template
$tpl->setVariable("message",$message);
// template qui définit le format de mail (structure html)
$content = $tpl->fetch( 'design:content/sendmail/format.tpl' );
$mail->setBody($content);
$mailing = eZMailTransport::send($mail);
//set image scale factor
if($mailing === true)
{
$reponse = "Votre mail a été bien envoyé";
$tpl->setVariable("message",$reponse);
$html = $tpl->fetch( 'design:content/send_succes.tpl' );
}
else
{
$reponse = "Nous avons trouvé un problème lors de l'envoie de mail";
$tpl->setVariable("message",$reponse);
$html = $tpl->fetch( 'design:content/send_fail.tpl' );
}
$Result = array('content' => $html);
}
else
{
$html = $tpl->fetch( 'design:content/formulaire.tpl' );
$Result = array('content' => $html);
}
?>

Je vous donne ici à quoi se ressemble notre fichier site.ini pour la partie de MailSetting

mainsettings

Pour  les templates, vous devez les créer à l’intérieur  de votre design « ezsite » pour notre cas.

format

Après un accès au site www.yourblog.com/mail/send

Vous aurez un formulaire pour saisir votre adresse électronique

saisir_email_new

Une fois l’adresse est saisie, si tout est OK l’administrateur recevra un mail avec le message suivant :

« un visiteur vous a envoyé un mail juste pour tester un custom module, le mail a été envoyé par test@gmail.com  »

Un  feed-back pour  celui qui a remplit le formulaire selon le retour de la variable « $mailing».

success_new

Le contenu de fichier « send.php » reste qu’un simple exemple, vous pouvez l’améliorer en ajoutant par exemple,  en copie une autres adresse électronique, valider l’adress mail saisie :  voici le lien pour les différentes méthode de la classe ezMail .

Comme vous pouvez le voir, la création d’un module reste n’est pas difficile, il s’agit d’une question de vos besoins. Ainsi nous avons vu un exemple d’envoie de mail, j’espère qu’il sera utile pour vous.