Collecter des informations sous eZ publish
Publié le 21 juin 2007 | 7 commentaire(s) | Tags : documentation |
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
- 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.
Commentaires
#1 - Le 01 juil 09 par Mickael
#2 - Le 01 mai 08 par Delph
#3 - Le 01 mai 08 par Matthieu
#4 - Le 01 mai 08 par Delph
#5 - Le 01 mai 08 par Matthieu
#6 - Le 01 mai 08 par povro
#7 - Le 01 mai 08 par frefred
Ajouter un commentaire