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
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
<?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)
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
Pour les templates, vous devez les créer à l’intérieur de votre design « ezsite » pour notre cas.
Après un accès au site www.yourblog.com/mail/send
Vous aurez un formulaire pour saisir votre adresse électronique
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».
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.