MVC Chunck snippet modX

MVC Chunck snippet modX

D'un point de vue bonne pratique de codage, la séparation entre les différentes couches applicatives est une bonne chose, elle rend le code plus facile à maintenir et favorise la réutilisabilité. Dans les exemples que l'on trouve sur Modx, et dans un soucis de concision, cette séparation n'est pas de rigueur. Regardons au travers d'un exemple comment rendre votre code plus propre avec Modx.

L'exemple d'un formulaire de contact

Pour illustrer mon propos, je vais reprendre l'exemple du formulaire de contact de la documentation de Modx (http://rtfm.modx.com/display/ADDON/FormIt.Examples.Simple+Contact+Page).



[[!FormIt?
   &hooks=`recaptcha,spam,email,redirect`
   &emailTpl=`MyEmailChunk`
   &emailTo=`user@example.com`
   &redirectTo=`123`
   &validate=`name:required,
      email:email:required,
      subject:required,
      text:required:stripTags,
      numbers:required,
      colors:required`
]]

<h2>Contact Form</h2>
 
[[!+fi.error_message:notempty=`<p>[[!+fi.error_message]]</p>`]]
 
<form action="[[~[[*id]]]]" method="post" class="form">
    <input type="hidden" name="nospam:blank" value="" />
 
    <label for="name">
        Name:
        <span class="error">[[!+fi.error.name]]</span>
    </label>
    <input type="text" name="name" id="name" value="[[!+fi.name]]" />

    ...
 
    <div class="form-buttons">
        <input type="submit" value="Send Contact Inquiry" />
    </div>
</form>

Cette exemple montre bien que l'on a 3 couches distinctes mélangées au sein d'un même fichier, qui plus est dans un langage de template.

Nous avons :

Nous allons séparer notre code en 3 pour bien séparer ces différentes couches applicatives.

Avec Modx, nous avons 2 éléments très utiles :

Concrètement, nous allons utilisées un snippet comme contrôleur et un chunck comme vue.

Création de la vue à l'aide d'un chunck

Commençons par la création de notre chunck, appelons le Contact il est très simple, il ne fait que reprendre la partie présentation de l'information.

&lt;h2>Contact Form&lt;/h2>
 
&#91;&#91;!+fi.error_message:notempty=`&lt;p>&#91;&#91;!+fi.error_message&#93;&#93;&lt;/p>`&#93;&#93;
 
&lt;form action="&#91;&#91;~&#91;&#91;*id&#93;&#93;&#93;&#93;" method="post" class="form">
    &lt;input type="hidden" name="nospam:blank" value="" />
 
    &lt;label for="name">
        Name:
        &lt;span class="error">&#91;&#91;!+fi.error.name&#93;&#93;&lt;/span>
    &lt;/label>
    &lt;input type="text" name="name" id="name" value="&#91;&#91;!+fi.name&#93;&#93;" />

    ...
 
    &lt;div class="form-buttons">
        &lt;input type="submit" value="Send Contact Inquiry" />
    &lt;/div>
&lt;/form>

Création du contrôle à l'aide du snippet

La création du snippet est un petit plus compliqué, il faut transformer un appel de snippet en langage de template en PHP. La méthode runSnippet de Modx sert justement à cela.


$formItParams = array(
    'hooks'     => 'recaptcha,spam,email,redirect',
    'emailTpl'  => 'MyEmailChunk',
    'emailTo'   => 'user@example.com',
    'redirectTo'=> '123',
    'validate'  => '
        name:required,
        email:email:required,
        subject:required,
        text:required:stripTags,
        numbers:required,
        colors:required'
);

$modx->runSnippet('FormIt', $formItParams);
$output = $modx->getChunk('Contact');    
return $output;

Notons l'appel de la méthode getChunck pour récupérer la présentation de notre information.

Les PropertySet pour les données utilisateurs

Notre code n'est pas encore parfait, il y a des 2 données qui sont liées à la configuration du site, et n'ont rien à faire à ce niveau, il s'agit de la variable emailTo et redirectTo

Nous allons déportées leurs définitions dans un PropertySet que nous allons ContactSettings.

Notre snippet devient alors :


$contacSettingsProperties = $modx->getObject('modPropertySet', array('name' => 'ContactSettings'))->getProperties();
$emailTo = $contacSettingsProperties['emailTo'];
$redirectTo = $contacSettingsProperties['redirectTo'];

$formItParams = array(
    'hooks'     => 'recaptcha,spam,email,redirect',
    'emailTpl'  => 'MyEmailChunk',
    'emailTo'   => $emailTo,
    'redirectTo'=> $redirectTo',
    'validate'  => '
        name:required,
        email:email:required,
        subject:required,
        text:required:stripTags,
        numbers:required,
        colors:required'
);

$modx->runSnippet('FormIt', $formItParams);
$output = $modx->getChunk('Contact');    
return $output;

Désormais, les 3 couches sont parfaitement séparées, elles vivent leurs vies indépendamment les unes des autres.

Le snippet et le chunck peuvent être réutilisé sur n'importe quels sites sans, il suffit de changer la configuration. On peut par ailleurs complètement changer le chunck, sans que le snippet et la configuration ne soit modifié.

Modx fournit des mécanismes pour rendre le code très propres, il ne faut pas s’arréter aux exemples données dans la documentation, on peut aller plus loin, et faire des choses dans les règles de l’art. Cette exemple montre qu’à travers le tryptique PropertySet, Snippet et Chunck ont peu avoir un modèle MVC facilitant la réutilisation d’un projet à l’autre. Ce principe peut être utilisé absolument partour.

comments powered by Disqus

Voir aussi

Script pour vider le cache sous Modx

Script pour vider le cache sous Modx

Script pour vider le cache sous Modx L’opération la plus répétitive en développement quelle que soit la technologie est certainement vider le …

Les CMS sont ils de bon outils techniquement parlant ?

Les CMS sont ils de bon outils techniquement parlant ?

Aujourd’hui les CMS occupent une part de marché grandissante dans la mise en place des sites Web, mettre en place un site Web et déployer un CMS …

CMS basé sur des frameworks

CMS basé sur des frameworks

Le début des années 2000 à marqué l’avènement des CMS. A cette époque, il pouvait être considéré comme les seules solutions viables pour des …

A la une
  • Rencontre du numérique 2019 - Nîmes
  • référencement naturel d'un hôtel
  • Développeur eZ Platform
  • Tech lead Symfony
  • Expert Qualité Web

Copyright - Sylvain FIX

2009 - 2019