Frefred.fr

Collecter des informations sous eZ publish

eZ publish nous offre la possibilité d'ajouter des formulaires, permettant de collecter des informations. Voici quelques informations sur les collecteurs d'informations(information collector) dans eZ publish , et comment les utiliser.

Les champs collecteur d'informations

eZ publish nous propose un nombre de type de données très suffisant, mais seuls certains de ces champs permettent de récupérer des informations. Ces types sont :

  • Case à cocher
  • E-Mail
  • Option
  • Ligne de texte
  • Bloc de texte

Avec ces 5 champs, on peut répondre à tous les besoins pour collecter les informations. On retrouve en général les mêmes types de champs dans tout les formulaires sur Internet.

Comme exemple, voici la procédure pour créer une page de contact. Pour commencer, créons une nouvelle classe. Je mets en général pour une page, un champs nom de type ligne de texte, et d'un bloc xml, me permettant de faire une description de la page. Pour un formulaire de contact, 3 champs sont utilisés. Il faut le nom de l'expéditeur, l'email de l'expéditeur, ainsi qu'un champ permettant de récupérer le message. Pour cela, nous allons rajouter 3 champs, un champs ligne de texte, un champs email et un champs bloc de texte. Voici ce que vous devriez avoir à la fin de l'opération :

Une fois la classe validée, Il nous faut l'intégrer au site.

Template pour collecter des informations

Pour mettre en page un formulaire collecteur d'informations, il y a quelques lignes de code obligatoire à mettre dans votre template. Pour afficher simplement nos champs "collecteur d'information", on utilise la fonction attribute_view_gui , qui va nous permettre de nous simplifier la vie.

Après avoir afficher nos trois champs, il faut rajouter les différentes informations nécéssaires à eZ publish . La première chose est d'entourer nos trois champs par un formulaire. Ce formulaire renvoie vers la page "content/action". Pour qu'eZ publish sache relier les informations collectées au bon objet, il faut rajouter deux champs cachés, l'identifiant de l'objet, ainsi que l'identifiant du node. Il ne nous reste plus qu'à créer un champs "submit" pour publier les informations. Ce champ doit avoir comme nom ActionCollectInformation, pour spécifier correctement le type de traitement que eZ publish doit exécuter sur le formulaire.

On se retrouve à la fin avec le code suivant :

<form method="post" action={'content/action'|ezurl}>
{attribute_view_gui attribute=$node.data_map.contact_nom}
{attribute_view_gui attribute=$node.data_map.contact_email}
{attribute_view_gui attribute=$node.data_map.contact_message}
<input name="TopLevelNode" value="{$node.node_id}" type="hidden">
<input name="ContentNodeID" value="{$node.node_id}" type="hidden">
<input name="ContentObjectID" value="{$node.object.id}" type="hidden">
<input class="button" name="ActionCollectInformation" value="Envoyer" type="submit">
</form>
 

Les visiteurs peuvent désormais vous laisser un message. Pour voir les différentes informations collectées, il faut aller dans Administration > Informations recueillies. Vous y retrouverez tous vos formulaires de contact.

Comment récupérer les informations récupérées dans eZ publish

eZ publish fournit 3 fonctions, nous permettant de manipuler les collections d'information, pour les afficher dans un template. Les trois fonctions sont :

  • collected_info_collection
  • collected_info_count
  • collected_info_count_list

Les fonctions qui sont les plus intéréssantes sont les deux premières fonctions.La fonction collected_info_count nous permet de récupérer le nombre d'informations collectées (le nombre de fois que le formulaire a été validé). La fonction collected_info_collection permet de récupérer les informations pour un collecteur d'information spécifique.

Voici un exemple d'un template permettant de lister les informations récupérées dans un template :

{def $collection_count = fetch(content, collected_info_count, hash(object_id, $node.object.id))}
{for 1 to $collection_count as $counter}
{def $collection = fetch(content, collected_info_collection, hash(collection_id, $counter, contentobject_id, $node.object.id))}
<p>{$collection.data_map.votre_attribut.data_text}</p>
{undef $collection}
{/for}
{undef $collection_count}
 


Avec ce système, on peut afficher directement les informations liées sans devoir cliquer sur chaque formulaire envoyé par l'utilisateur final.

Bookmark and Share

Commentaires

#1 - Le 01 juil 09 par Mickael

Code de la classe

Bonjour,

je débute sous EZ et je dois dire que votre blog m'a pas mal éclairé, alors merci !

Par contre, je n'ai pas compris comment éditer le code de la classe afin de rajouter les balises <form> etc. ...
On fait ça dans l'outil ou en éditant les fichiers "à la main" ?

Je suis sous EZ 4.1.3
Merci.

#2 - Le 01 mai 08 par Delph

Solution

Bon, j'ai trouvé. En surchargeant le template content/collectedinfomail/form.tpl
on peut ajouter : {set-block scope=root variable=email_cc_receivers}adresse_mail{/set-block} en remplissant adresse_mail.
Voilà.

#3 - Le 01 mai 08 par Matthieu

Trouvé

en fait j'ai trouvé
il faut surcharger les fichiers
« content/collectedinfomail/form.tpl » et
« content/collectedinfo/form.tpl »

ensuite ajouter la ligne

{set-block scope=root variable=email_receiver} adresse mail{/set-block}.

et si on souhaite faire comme moi, tu rajoutes un champs dans la classe form, et tu appeles dans la surcharge le datatype adéquat

#4 - Le 01 mai 08 par Delph

Envoi de mail à plusieurs adresses

Après remplissage du formulaire un mail est envoyé à l'admin ou a l'adresse insérée dans le template mais comment fait-on pour envoyer le mail sur plusieurs adresses ?

#5 - Le 01 mai 08 par Matthieu

Multiple mail

Est-il possible avec cette methode d'envoyer un mail ?
je sais que le collecteur d'information envoie un mail automatique à l'administrateur.
Mon but du jeu est d'effectuer une class formulaire de contact, ensuite de créer 4 formulaires qui permettrons de faire 2 choses une fois valider
1- De rentrer les informations par le biais du collecteur d'information
2- d'envoyer un mail suivant un mail spécifique pour les 4 formulaires
petit point, l'email ne doit pas s'afficher en FRONT

si tu as une solution, je t'en serais trés reconnaissant.
Cordialement

#6 - Le 01 mai 08 par povro

les formulaires sous ez publish

bravo pr ton site d'abord sous ez.
dans ton template, d'ou sort $node et pourkoi n'y a t-il pas de zone de saisie en clair?

#7 - Le 01 mai 08 par frefred

la fonction attribute_view_gui

quand tu utilises la vue full du module content, tu retrouves dans ton template principal, la variable $node. Cette variable représente en fait ton objet créé dans eZ publish.

Pour les zones de saisie en clair, au lieu de les taper à la main, je passe directement par le système d'eZ publish , et la fonction attribute_view_gui qui va me générer directement les zones de saisie en clair. Tu pourras retrouver la documentation dessus , en cliquant sur la fonction attribute_view_gui.

Ajouter un commentaire