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.

  • H3im2o

    Super Amine,
    prochainement tu devrais nous préparer quelque chose a propos des appels de fonctions php depuis les templates Smarty, util non ?!
    sinon le tutoriel est très bien fait , merci !

  • Abdelkader rhouati

    J’ajoute sur le contenu riche de cette article, qui décrit d’une façon assez simple et claire comment créer un module, Que EzPublish respecte bien le design pattern MVC dans la création des modules.
    Il faut néanmoins faire différence entre le terme « vue » en MVC qui représente la couche de présentation et au niveau d’ezpublish il s’agit du contrôleur. La vue dans ezpublish est implémenté grâce au template.
    Enfin le modèle est representé par les classes de persistance telque eZContentObjectTreeNode permettant de récupérer les noeuds / objets depuis la base de donnée.

  • Carlos Revillo

    Hi there. Sorry i can’t write french. hope you don’t mind me trying to do in english.
    Please note you can have some problems with specific smtp servers.
    http://issues.ez.no/IssueView.php?Id=19096&activeItem=1

    Great article, by the way.

    • admin

      Salam,
      Merci mes amis pour votre passage,
      now I write in French, I will try in the future to translate my articles in English,
      I tested, I have not had this problem.

  • Nicolas

    Merci Amine !

  • Emadem

    SVP dans quel endroit situé le script send.php ?

    • admin

      Le fichier ‘send.php’, il s’agit que d’une vue d’un module donc tu peux créer ce que tu veux
      ah oui j’ai fait une erreur, en fait à la place de redirect.php tu mets send.php.
      Donc dans le dossier module de ta propre extension , tu as le dossier mail, là-dedans, tu as module.php et send.php

      Merci

  • H3im2o

    Bonjour,
    Aufait oui , ca me parrait super util de pouvoir editer en FO, mais le souci est : pourquoi limiter ceci a un group d’utilisateurs seulement alors qu’ils ont deja ce privilège depuis le BO, le mieux serai de permettre ceci pour les utilisateurs anonymous dans un context approprié bien entendu
    Je prends l’exemple la correction des article ou du moins la proposition des corrections (un peu pareil ce qu’on a sur les Article WIKI) avec eventuellement un processus de workflow a prévoir pour plus de crédibilité.
    Sinon l’article est super, on aura peut etre besoin d’une equipe de rédacteurs sur le site du coup je propose mon aide.
    Merci Amine et bonne continuation.

    • admin

      Bonjour,
      Dans un site, tu as des informations qui sont très importants, alors le faite de donner la main à n’importe quel visiteur d’éditer de contenu, ça me parait un peu illogique,
      Par contre pour l’exemple que tu as donné pourquoi pas. aussi le faite de donner la possibilité d’éditer en FO ça facilite le processus tout simplement sinon ils ont déjà cette possibilité dans le BO.

      Bienvenu, si tu as des articles, tu n’as qu’à signaler
      Merci Hicham