29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / eZ Publish / Trucs & astuces / eZ Publish : système de gestion des mails - page « Contact » I





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

eZ Publish : système de gestion des mails - page « Contact » I

Date de publication: le mercredi 29 avril 2009 à 15h49
Dernière modification: par Pascal BOYER le samedi 30 mai 2009 à 14h34
« Article précédent: Playlist automatique : créer les playlists - V
» Article suivant: eZ Publish : système de gestion des mails - page « Contact » II

Ce premier article d'une série de trois présente par le détail la mise en oeuvre d'une page de contact.

Prérequis

Voici l'environnement logiciel dans lequel est développé l'exemple détaillé par l'article:

  • Plate-forme Linux/Debian,
  • Serveur Apache 2.2.11-2 ( DocumentRoot : /usr/local/web/ -- répertoire racine d'installation de eZ Publish )
  • PHP 5.2.9
  • MySQL 5.0.77
  • Serveur de mail Postfix 2.5.4-1
  • eZ Publish 4.1.0

L'ensemble des commandes en lignes proposées sont lancées à partir du répertoire racine de eZ Publish.

Points abordés

  • Création d'une classe d'objet
  • Les champs collecteurs d'information
  • Création d'une surcharge
  • Création d'un template
  • Code template
  • Système d'informations collectées

Créer la classe d'objet Page de contact

La première chose par laquelle nous allons commencer est la création de la classe d'objet qui servira à instancier la page de contact présentée aux visiteurs du site.

Avant de poursuivre, rappelons les spécificités d'une page de contact:

  • Contient des champs de saisie
  • Envoie le contenu par mail au destinataire (qui est souvent le webmaster)
  • Le contenu saisi n'est pas destiné à être publié sur le site

Hormis ces singularités, il faut considérer qu'une page de contact n'est rien d'autre qu'un article dont le contenu est rédigé par le visiteur. La logique de création d'une page de contact s'apparente donc de près à celle d'un article personnalisé.

Pour créer la classe Page de contact, cliquez sur l'onglet Administration de l'interface d'administration puis sur le lien Classes du menu gauche puis sur le lien Content dans le cadre Groupes de classe [4] et enfin sur le bouton Nouvelle classe du cadre Classes dans <Content> [X].

En sélectionnant les datatypes de votre choix dans le menu déroulant (voir Figure 1) placé au bas du cadre d'édition Modifier <Nouvelle classe> [Classe], créez les attributs de votre formulaire en fonction de vos besoins. Voici l'exemple qui servira tout au long de l'article:

:
L'ordre dans lequel nous plaçons les attributs est sans importance puisqu'il pourra être redéfini comme bon nous semble à partir du template d'affichage pagecontact.tpl de la page de contact.

Fig. 1: L'interface d'édition de la classe d'objet Page de contact

:
Chaque attribut destiné à présenter un champ de saisie aux visiteurs doit être affecté de l'option Collecteur d'information.

Par ailleurs, l'option Obligatoire rendra la saisie d'un contenu dans le champ afférent obligatoire pour que soit validé l'envoi du formulaire par le système. Un champ obligatoire laissé vide produira un message d'erreur lors de l'envoi.

Enfin, il est tout à fait possible de mêler des attributs Collecteurs d'informations à d'autres qui ne le sont pas. Ceci permet par exemple d'afficher un message explicatif au-dessus d'un champ de saisie.

Prise en charge de la classe Page de contact

Chaque fois qu'une nouvelle classe d'objet est créée, il est nécessaire d'ajouter son identifiant ( page_contact) à la liste du tableau ShowClasses[] de la section [TreeMenu] du fichier de surcharge contentstruture.ini.append.php du siteaccess d'administration. Sans cela, la nouvelle classe ne sera pas visible dans le menu contextuel de l'onglet Contenus et ses instances ne seront pas affichées dans l'arborescence de contenus.

[TreeMenu]
Dynamic=enabled
ShowClasses[]
ShowClasses[]=article
ShowClasses[]=dossier_video
ShowClasses[]=folder
ShowClasses[]=gallery_photos
ShowClasses[]=image_music
ShowClasses[]=link
ShowClasses[]=page_contact     <== CETTE LIGNE
ShowClasses[]=user_group

Configuration du fichier de surcharge contentstruture.ini.append.php

Pensez à vider les caches chaque fois que vous modifiez un fichier de surcharge.

Si vous souhaitez affecter une icône particulière à votre nouvelle classe, reportez-vous cet article: eZ Publish : icônes de l'interface d'administration

Créer l'objet Contact

Avant d'être en mesure de publier la page de contact sur le site public, encore faut-il qu'elle existe. Nous devons donc instancier un objet Contact (par exemple) à partir de notre nouvelle classe exactement comme nous le faisons pour un article.

Voici la page d'édition de l'objet Contact réalisé à partir de la classe Page de contact présentée par la figure 1:

Fig. 2: Interface d'édition de l'objet Contact

Dans notre exemple, les trois seuls champs à remplir sont ceux liés aux attributs:

  • Nom de cette page de contact lui-même basé sur un datatype Ligne de texte (le contenu de ce champ sert à nommer l'objet que l'on crée)
  • Texte explicatif à placer avant le formulaire lui-même basé sur un datatype Block XML
  • Adresse du destinataire lui-même basé sur un datatype Courriel.

Après validation par le biais du bouton Envoyer pour publication, l'objet (plus exactement le noeud qui l'encapsule) apparaît dans le menu Contenus:

Fig. 3: Le noeud qui encapsule l'objet Contact affiché par le menu Contenus

Si l'objet Contact doit être un lien dans l'un des menus de notre site, il devient alors nécessaire de renseigner l'un des deux tableaux TopIdentifierList[] ou LeftIdentifierList[] de la section [MenuContentSettings] du fichier de surcharge menu.ini.append.php du siteaccess public que notre site.

[MenuContentSettings]
TopIdentifierList[]
TopIdentifierList[]=folder
TopIdentifierList[]=link
TopIdentifierList[]=page_contact  <== CETTE LIGNE (SI DANS MENU SUPERIEUR HORIZONTAL = flat_top )
LeftIdentifierList[]
LeftIdentifierList[]=folder
LeftIdentifierList[]=page_contact  <== OU BIEN CELLE-CI (SI DANS MENU GAUCHE VERTICAL = flat_left )

Affichage de la page de contact sur le site public

Par défaut, voici l'affichage produit par eZ Publish d'une instance de la classe Page de contact:

Fig. 4: Affichage par défaut de l'objet Contact

Le template utilisé pour produire cet affichage est design/standard/templates/node/view/ full.tpl.

Si l'identifiant de la classe d'objet Page de contact était feedback_form au lieu de page_contact, le fichier override.ini.append.php de notre siteaccess public nous apprend que c'est le template design/base/override/templates/full/ feedback_form.tpl qui aurait été utilisé. En effet, on trouve dans le fichier override.ini.append.php la règle de surcharge suivante:

498 [feedback_form_full]
499 Source=node/view/full.tpl
500 MatchFile=full/feedback_form.tpl
501 Subdir=templates
502 Match[class_identifier]=feedback_form

Et auquel cas l'affichage eut été:

Fig. 5: Affichage de la page contact par le template feedback_form.tpl

L'absence des champs de saisie ci-dessus prouve que le template feedback_form.tpl recherche, pour chacun des attribut de l'objet Contact, des identifiants ne correspondant pas à ceux utilisés dans notre exemple. C'est pourquoi nous allons, en nous basant sur le code de ce template, créer celui du nouveau template qui affichera notre page de contact.

Créer le template pagecontact.tpl

Commençons par faire une copie du template feedback_form.tpl dans un sous-répertoire du design plain_site du siteaccess public:

cp -p design/base/override/templates/full/feedback_form.tpl design/plain_site/override/templates/full/pagecontact.tpl

Il sera peut-être nécessaire de créer préalablement le sous-répertoire full/ qui n'existe pas par défaut dans design/plain_site/override/templates/.

Le nouveau template pagecontact.tpl contient donc ce code:

1 {* Feedback form - Full view *}
2
3 <div class="content-view-full">
4     <div class="class-feedback-form">
5
6         <h1>{$node.name|wash()}</h1>
7
8         {include name=Validation uri='design:content/collectedinfo_validation.tpl'
9                  class='message-warning'
10                  validation=$validation collection_attributes=$collection_attributes}
11
12         <div class="attribute-short">
13                 {attribute_view_gui attribute=$node.data_map.description}
14         </div>
15         <form method="post" action={"content/action"|ezurl}>
16
17         <h2>{"Your email address"|i18n("design/base")}</h2>
18         <div class="attribute-email">
19                 {attribute_view_gui attribute=$node.data_map.email}
20         </div>
21
22         <h2>{"Subject"|i18n("design/base")}</h2>
23         <div class="attribute-subject">
24                 {attribute_view_gui attribute=$node.data_map.subject}
25         </div>
26
27         <h2>{"Message"|i18n("design/base")}</h2>
28         <div class="attribute-message">
29                 {attribute_view_gui attribute=$node.data_map.message}
30         </div>
31
32         <div class="content-action">
33             <input type="submit" class="defaultbutton" name="ActionCollectInformation" value="{"Send form"|i18n("design/base")}" />
34             <input type="hidden" name="ContentNodeID" value="{$node.node_id}" />
35             <input type="hidden" name="ContentObjectID" value="{$node.object.id}" />
36             <input type="hidden" name="ViewMode" value="full" />
37         </div>
38         </form>
39
40     </div>
41 </div>
  • Les lignes 8 à 10 servent à mettre en oeuvre, à travers l'appel du template design/standard/templates/content/ collectedinfo_validation.tpl, le système de contrôle de validité des saisies de l'utilisateur. En cas d'erreurs, des messages informent ce dernier des modifications à apporter pour que le système puisse envoyer le formulaire.
  • Le code d'affichage du texte descriptif du formulaire est compris entre les lignes 12 et 14.
  • Le code d'affichage des champs de saisie est compris entre les lignes 15 et 38.

Pour chacun des champs de saisie correspondent les 4 lignes suivantes:

<h2>{"Subject"|i18n("design/base")}</h2>
<div class="attribute-email">
     {attribute_view_gui attribute=$node.data_map.xxxxxx}
 </div>

...où xxxxxx correspond au nom de l'identifiant de l'attribut de la classe d'objet Page de contact lié au champ de saisie à afficher. Si l'on souhaite par exemple afficher le champ Message, lié à l'attribut dont l'identifiant est message_expediteur, alors le code devient:

<h2>{"Subject"|i18n("design/base")}</h2>
 <div class="attribute-email">
      {attribute_view_gui attribute=$node.data_map.message_expediteur}
  </div>

Sur la base de ce dernier exemple, nous allons créer le code du nouveau template pagecontact.tpl.

Code d'affichage du texte descriptif

1 <div class="content-view-full">
2     <div class="class-feedback-form">
3
4         {include name=Validation uri='design:content/collectedinfo_validation.tpl'
5                  class='message-warning'
6                  validation=$validation collection_attributes=$collection_attributes}
7
8         <div class="attribute-short">
9                 {attribute_view_gui attribute=$node.data_map.descriptif_formulaire}
10         </div>

Code d'affichage des champs de saisie

11         <form method="post" action={"content/action"|ezurl}>
12
13         <h2>{$node.data_map.nom_expediteur.contentclass_attribute.name}</h2>  <== AFFICHE LE NOM DE L'ATTRIBUT
14         <div class="attribute-email">
15                 {attribute_view_gui attribute=$node.data_map.nom_expediteur}
16         </div>
17         <h2>{$node.data_map.prenom_expediteur.contentclass_attribute.name}</h2>
18         <div class="attribute-email">
19                 {attribute_view_gui attribute=$node.data_map.prenom_expediteur}
20         </div>
21         <h2>{$node.data_map.mail_expediteur.contentclass_attribute.name}</h2>
22         <div class="attribute-email">
23                 {attribute_view_gui attribute=$node.data_map.mail_expediteur}
24         </div>
25         <h2>{$node.data_map.coordonnees_expediteur.contentclass_attribute.name}</h2>
26         <div class="attribute-email">
27                 {attribute_view_gui attribute=$node.data_map.coordonnees_expediteur}
28         </div>
29         <h2>{$node.data_map.message_expediteur.contentclass_attribute.name}</h2>
30         <div class="attribute-email">
31                 {attribute_view_gui attribute=$node.data_map.message_expediteur}
32         </div>
33
34         <div class="content-action">
35             <input type="submit" class="defaultbutton" name="ActionCollectInformation" value="{"Send form"|i18n("design/base")}" />
36             <input type="hidden" name="ContentNodeID" value="{$node.node_id}" />
37             <input type="hidden" name="ContentObjectID" value="{$node.object.id}" />
38             <input type="hidden" name="ViewMode" value="full" />
39         </div>
40         </form>
41
42     </div>
43 </div>

Créer la surcharge

Avant que le système soit en mesure d'utiliser notre nouveau template, il faut créer la surcharge suivante dans le fichier override.ini.append.php (de préférence au début du fichier) du siteaccess public:

[page_contact]
Source=node/view/full.tpl
MatchFile=full/pagecontact.tpl
Subdir=templates
Match[class_identifier]=page_contact

Après avoir vidé les caches et rechargé, sur le site public, la page de contact, l'affichage doit ressembler à ceci:

Fig. 6: Affichage de la page contact par le nouveau template pagecontact.tpl

Si nous remplissons le formulaire puis l'expédions, une page récapitulative s'affiche:

Fig. 7: Affichage de la page récapitulative

C'est le template design/standard/templates/content/collectedinfo/ form.tpl qui affiche le contenu présenté par la figure 7 ci-dessus. Une simple surcharge de ce template vous permettra de modifier à votre guise le contenu affiché.

:
Comme l'illustre la figure 7, le texte collecté n'est pas mis en forme. Que je sache, il n'y a pas moyen de collecter le texte saisi en intégrant les sauts ou retours à la ligne.

Informations collectées

Alors que le système de gestion des mails et la configuration de l'adresse e-mail du destinataire du formulaire de la page contact sont détaillés dans l'article suivant (eZ Publish : système de gestion des mails - page « Contact » II), il est néanmoins possible, sans serveur de mails, de visualiser les différents formulaires envoyés par les visiteurs de notre site.

Pour cela, cliquez sur l'onglet Administration de l'interface d'administration puis sur le lien Informations collectées dans le menu de gauche. S'affiche alors le cadre suivant:

Fig. 8: Liste des ojects collecteurs d'information et nombre de collectes

Pour afficher la liste des collectes liées à l'objet collecteur d'information Contact, cliquez sur le lien situé à droite (en rose sur la figure 8). Le nouveau cadre ci-après s'affiche alors:

Fig. 9: Liste des informations collectées par l'objet collecteur d'information Contact

...où il ne reste plus qu'à cliquer sur un des liens en rose pour enfin afficher le récapitulatif du contenu d'un formulaire:

Fig. 10: Liste des informations collectées par le 4ème formulaire envoyé à la date du 30/04/2009 à 09:39

Pour aller plus loin

Le prochain article traite en détail la configuration du système d'envoi par mail des informations collectées.

Commentaires