Formulaire CMS

De Wiki.

Génération automatique d'un formulaire à partir d'un fichier xml

  • utilisé dans le projet Allard, page de contact


Sommaire

contact.xml

  • /modules/contact/contact.xml
  • à créer
  • à appeler dans le fichier formulaire.php
  • à modifier en fonction de la liste des champs voulus
  • contient la structure du formulaire


<?xml version="1.0" encoding="ISO-8859-1" ?>
<formulaire name="contact" post="/content/fr/page_post.php" minisite="fr">
<fields>

Paramètres du formulaire (optionnels)

  • formulaire > name : nom du formulaire
  • formulaire > post : page à laquelle on envoie les infos, par défaut, c'est la même page
  • formulaire > minisite: minisite sur lequel on travail


text

  • field > name : libellé
  • fied > id : id
  • field > type : type du champs (text, textarea, button, select, file, captcha, hidden, submit)
  • field > oblig : champs obligatoire ou non
  • field > br : retour à la ligne après le label
  • field > class : ajout d'une classe si nécessaire sinon class default
  • label > class: ajout d'une classe si nécessaire
<field name="Nom" id="nom" type="text" oblig="true"  br="true" class="nom"> 
 <label for="nom" class="nom" />
 <option maxlength="100" /> 
</field>


email

  • vérifie la bonne syntaxe de l'email
<field name="E-mail" id="mail" type="email" oblig="true" class="mail"   br="true" >
 <label for="mail" />
</field>  


téléphone

  • vérifie la bonne syntaxe d'un numéro de téléphone
<field name="Téléphone" id="tel" type="phone" oblig="true" class="tel"   br="false" >
 <label for="tel" />
</field>  


entier

  • vérifie qu'il s'agit bien d'un entier
<field name="Code postal" id="cp" type="integer" oblig="true" class="cp"   br="false" >
 <label for="cp" />
</field>  


radio bouton

<field name="Vous souhaitez contacter notre :" id="contact" type="radio" oblig="true"  br="true" class="contact_div"> 
  <label for="contact" class="label_contact_div" />
  <item id="commercial" value="Service Commercial" />
  <item id="marketing" value="Service Marketing" />
  <item id="industriel" value="Service Industriel" />
  <item id="rh" value="Ressources Humaines" />
  <item id="autres" value="Autres" />
</field>


select simple

<field name="Civilité " id="civilite" type="select" oblig="true"  br="true" class="civilite"> 
 <label for="civilite" class="civilite" />
 <item id="mlle" value="Melle" /> 
 <item id="mme" value="Mme" />
 <item id="mr" value="Mr" /> 
</field>


select à partir d'une classe

  • class > name : nom de la classe
  • class > item : champs à afficher (sans préfixe)
  • class > orderby : champs à ordonner
  • class > orderbysens : sens de l'ordre
  • class > value="4" : condition ( WHERE cms_statut = 4) , ne prend en compte que les conditions de type "égale"
<field name="Pays" id="pays" type="select" oblig="true"  br="true" class="pays" > 
 <label for="pays" class="pays" />
 <class name="cms_pays" item="nom_fr" orderby="nom_fr" orderbysens="ASC" statut="4"  /> 
</field>


textarea

<field name="Message" id="message" type="textarea" oblig="false" class="mail"   br="true" >
 <label for="message" class="message" />
 <option cols="20" rows="5" /> 
</field>

fichier à uploader

  • field > small : texte supplémentaire entre balises small
<field name="Pièces jointes" small="3 pièces jointes max" id="fichier1" type="file" oblig="false"  br="true" >
 <label for="fichier1" />
</field>  

captcha

<field name="" id="captcha"   type="captcha" oblig="true"  br="true" class="tel" display="true"  pubkey="6LflnscSAAAAAESWHViRto-ucLjaUTP6X2DieMzn"   privkey="6LflnscSAAAAAM6_E20oLudnJr6Jm_zOAIxxTdUE" theme="clean" lang="fr" />	

hidden

  • option > value : ajout d'une valeur prédéfinie
<field name="Demande" id="demande" type="hidden" oblig="false"  br="false"> 
 <label for="demande" />
 <option value="1" />		 
</field>

submit

<field name="Envoyer" id="envoyer" type="submit" oblig="false"  br="true" class="submit"  />	

contenu de la page de validation (utilisée dans le CMS)

<texteok>Merci pour votre message, vous allez recevoir un email</texteok>

contenu de l'email d'accusé de réception (utilisée dans le CMS)

<textear>Voici un email de confirmation</textear>
</fields>
</formulaire>

formulaire.php

  • /modules/contact/formulaire.php
  • à créer
  • créé les fonctions js pour vérifier le formulaire, ainsi que le html


déclaration du fichier contact.xml

<?php 
$file = $_SERVER['DOCUMENT_ROOT']."/modules/contact/contact.xml"; 
?>

appel de la class form

<?php 
require_once('cms-inc/form/class.Form.php');
?>

récupère la liste des champs

<?php 
$formulaire = new Form(); 
$formulaire->getFields($file); 
?>

style pour les erreurs

<style>
  .erreur { color:red;  } 
</style>

appel du js

<?php
 $formulaire->prepareJs();  
?>

envoi du mail

if (isset($_POST["nom"]) && $_POST["nom"] !="") {
 // envoi
unset($_POST);
}

formulaire html

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="contact" id="contact" enctype="multipart/form-data">

affichage du formulaire en html

<?php  
$formulaire->prepareForm();  
?>
*champs obligatoires
</form>


class.Form.php

  • /include/cms-inc/form/class.Form.php
  • à appeler dans la page formulaire.php
  • objet formulaire avec fonctions permettant de générés le html et le js correspondant à chaque champs


<?php 
require_once('cms-inc/form/class.Form.php');
?>

fojsutils.js

  • /custom/js/minisite/fojsutils.js
  • à créer


créé la boite de dialogue avec tous les messages d'erreur

function setDialogMessage (_type, _msg)  {}

action lorsque le champs est incorrect

var validateKO = function (_field, _error) {}

action lorsque le champs est correct

var validateOK = function (_field, _error) {}
 

tableau avec les messages d'erreur

var validationMessages = new Array();

validationMessages['invalid_email'] = "syntaxe incorrecte";
validationMessages['confirm_differs'] = "confirmation différente";
validationMessages['invalid_value'] = "non valide";
validationMessages['invalid_integer'] = "il ne s'agit pas d'un entier";
validationMessages['invalid_number'] = "il ne s'agit pas d'un nombre";
validationMessages['invalid_decimal'] = "il ne s'agit pas d'un décimal";
validationMessages['not_lower_value'] = "valeur n'est pas inférieure";
validationMessages['not_lower_equal'] = "valeur n'est pas inférieure ni égale";
validationMessages['not_higher_value'] = "valeur n'est pas supérieure";
validationMessages['not_higher_equal'] = "valeur n'est pas supérieure  ni égale";
validationMessages['invalid_ccard'] = "il ne s'agit pas d'un numéro de carte bleue";
validationMessages['empty_value'] = "Champs obligatoire";
validationMessages['not_alpha_value'] = "le champs ne devrait pas contenir de valeur numérique";
validationMessages['invalid_phone'] = "syntaxe du numéro non valide";
validationMessages['invalid_length'] = "longueur du champs non valide";
validationMessages['invalid_captcha'] = "Code de sécurité : Champs incorrect";