Comment développer une extension
Introduction
Ce tutoriel fait suite au tutoriel de création d'extensionIci nous allons voir comment développer votre extension
Prenons pour exemple la simple génération d'un formulaire de contact qui enverra via email le contenu du message saisi dans le formulaire.
Création de l'extension
Commençons par créer une extension normal/formContact(voir en détail dans le tutoriel précédent)
./new.sh normal/formContact
Paramétrage
Le fichier main.php
<?php
class module_mods_normal_formContact extends abstract_moduleBuilder{
protected $sModule='mods_normal_formContact';
protected $sModuleView='mods/normal/formContact';
private $msg=null;
private $detail=null;
private $tError=null;
Fichier info.ini
title.fr='Créer un formulaire de contact'
title.en='Create a contact form'
category='modules'
version=1.0.0
author=mika
Création des templates
Dans le répertoire src, on va créer nos fichiers de template, ici c'est assez simple, on va créer un module avec une vue et un controller pour envoyer l'emailDans src, on a donc notre module
Fichier src/example/main.php
<?php
class module_#MODULE# extends abstract_module{
public function before(){
$this->oLayout=new _layout('template1');
//$this->oLayout->addModule('menu','menu::index');
}
public function _contact(){
$message=$this->processMail();
$oView=new _view('#MODULE#::contact');
$oView->message=$message;
return $oView;
}
private function processMail(){
if(!_root::getRequest()->isPost()){
return null;
}
$sEmail=_root::getParam('email');
$sContent=_root::getParam('content');
$oMail=plugin_mail();
$oMail->setFrom('Formulaire de contact','#from#');
$oMail->addTo('#to#');
$oMail->setBody($sContent);
$oMail->send();
}
public function after(){
$this->oLayout->show();
}
}
La vue: src/example/view/contact.php
<form action="" method="POST">
<p>Votre message</p>
<textarea name="content"></textarea>
<input type="submit" value="envoyer"/>
</form>
<?php if($this->message):?>
<p><?php echo $this->message?></p>
<?php endif;?>
Création des fichiers de remplacement
Pour faciliter les rechercher/remplacer, on créer pour chaque fichier dans src le même nom suffixé par .xmlPar exemple pour notre src/example/main.xml
<main>
<patterns>
<pattern>#MODULE#</pattern>
<pattern>#from#</pattern>
<pattern>#to#</pattern>
</patterns>
<path>
<directory>module/#MODULE#</directory>
</path>
<target>module/#MODULE#/main.php</target>
</main>
Création de l'interface de l'extension
Cette fois on édite le fichier view/index.php
<div class="table">
<form action="" method="POST">
<table>
<tr>
<th><?php echo tr('module')?></th>
<td><input name="module" style="width:200px;"/></td>
</tr>
<tr>
<th><?php echo tr('emailFrom')?></th>
<td><input name="emailFrom" style="width:200px;"/></td>
</tr>
<tr>
<th><?php echo tr('emailTo')?></th>
<td><input name="emailTo" style="width:200px;"/></td>
</tr>
</table>
<input type="submit" value="<?php echo tr('generer')?>"/>
</form>
</div>
<p class="msg"><?php echo $this->msg?></p>
<p class="detail"><?php echo $this->detail?></p>
Et bien sur le fichier de traitement main.php
<?php
class module_mods_all_example extends abstract_moduleBuilder{
protected $sModule='mods_all_example';
protected $sModuleView='mods/all/example';
private $msg=null;
private $detail=null;
private $tError=null;
public function _index(){
$tMessage=$this->process();
$oTpl= $this->getView('index');
//$oTpl->var=$var;
$oTpl->msg=$this->msg;
$oTpl->detail=$this->detail;
$oTpl->tError=$this->tError;
return $oTpl;
}
private function process(){
if(_root::getRequest()->isPost()==false){
return null;
}
$sModule=_root::getParam('module');
$emailFrom=_root::getParam('emailFrom');
$emailTo=_root::getParam('emailTo');
$this->msg=tr('formulaireGenererAvecSuccess');
$this->detail=trR('CreationDuRepertoireVAR',array('#REP#'=>'module/'.$sModule.'/'));
$this->detail=trR('CreationDuFichierVAR',array('#FICHIER#'=>'module/'.$sModule.'/main.php'));
$this->detail=trR('CreationDuRepertoireVAR',array('#REP#'=>'module/'.$sModule.'/view/'));
$this->detail=trR('CreationDuFichierVAR',array('#FICHIER#'=>'module/'.$sModule.'/view/contact.php'));
//creation repertoire
$this->projectMkdir('module/'.$sModule);
/*SOURCE*/$oSourceMain=$this->getObjectSource('example/main.php');
/*SOURCE*/$oSourceMain->setPattern('#MODULE#',$sModule);
/*SOURCE*/$oSourceMain->setPattern('#emailFrom#',$emailFrom);
/*SOURCE*/$oSourceMain->setPattern('#emailTo#',$emailTo);
/*SOURCE*/$oSourceMain->save();
$this->projectMkdir('module/'.$sModule.'/view');
/*SOURCE*/$oSourceViewContact=$this->getObjectSource('example/view/contact.php');
/*SOURCE*/$oSourceViewContact->save();
}
}
Dans l'idée: en premier, on "charge" le fichier de template avec:
/*SOURCE*/$oSourceMain=$this->getObjectSource('example/main.php');
Ensuite on défini les rechercher/remplacer
/*SOURCE*/$oSourceMain->setPattern('#MODULE#',$sModule);
/*SOURCE*/$oSourceMain->setPattern('#emailFrom#',$emailFrom);
Enfin on enregistre
/*SOURCE*/$oSourceMain->save();
PS: vous pouvez bien sur regarder comment sont développés les extensions actuelles pour vous donner des idées ;)