[eZ Publish 4.0] Formulaire d'upload public
Bonjour,
Je souhaite créer un formulaire qui serait accessible par les visiteurs lambdas et qui leur permettrait de charger un document Word. J'ai pour cela créé naïvement ma classe :
- Nom [ligne de texte]
- Prénom [ligne de texte]
- CV [fichier]
- plus quelques autres mais j'abrège.
Sauf qu'au moment de passer les champs en collecteurs d'infos, ça bloque sur le champ CV. Logique, tout le monde ne doit pas pouvoir uploader n'importe quoi. Du coup j'ai commencé à regarder du coté de cette extension mais sans vraiment percevoir la manière de la mettre en oeuvre ...
Auriez vous svp une piste à me conseiller ? ou une autre méthode que vous avez expérimenté.
Merci d'avance :)
Collecte d'information vs Création de contenu
Créer un formulaire de contact dans eZ Publish peut être fait de deux manières :
- utiliser le mécanisme de collecte d'information
- créer de nouveaux objets
Essayons de décrypter ces 2 méthodes pour comprendre avantages et inconvénients.
La notion de classe
Avant de passer au sujet qui nous concerne, petit rappel sur la notion de classe.
Les classes permettent à l'administrateur de décrire la structure des contenus disponibles sur le site : Article, Dossier, Formation, Commentaire.
Ainsi la classe article est constituée :
- d'un champ ligne de texte pour le titre
- d'un champ bloc de texte simple pour le résumé
- d'un champ bloc de texte riche pour le corps
- ... de plein d'autres champs selon vos besoins
Une fois la classe définie, vous pouvez créer des articles dans eZ Publish.
La collecte d'information dans eZ Publish
La collecte d'information se base sur cette structure de classe. Vous pouvez, lorsque vous définissez un champ, préciser que ce champ va "collecter de l'information".
Qu'est ce que ça veut dire ?
En résumé :
- Un champ qui n'est pas collecteur d'information va afficher le contenu du champ (par exemple le titre de l'article) sur votre site public
- Un champ qui est "collecteur d'information" va afficher un champ de type input sur votre site.
EZ Publish, dans ses templates par défaut va automatiquement vous ajouter les boutons d'actions qui correspondent à votre besoin.
Qu'est ce qui se passe lorsqu'un utilisateur poste avec un collecteur d'information ?
Les informations sont alors stockées dans des tables spécifiques de la base de données et vous pouvez les retrouver depuis l'onglet administration du backoffice.
Les informations pourront aussi être envoyées par mail (j'ai posté un message sur ce sujet précédemment)
Les limitations
Le problème de la collecte d'information c'est que cette dernière est limitée à un certain nombre de natures de champs (ligne de texte, texte bloc, radio bouton ou checkbox). Le champ généralement manquant est le champ fichier pour les pièces jointes. :cry:
L'alternative : créer du contenu
Comme vous le savez peut être, toutes les fonctionnalités de l'administration sont disponibles sur le site public, il s'agit juste d'une question de droits et de boutons affichés ou non.
Ceci veut donc dire que, si on le souhaite, on peut donner à l'utilisateur, même anonyme, le droit de créer du contenu sur le site.
C'est la méthode retenue pour les commentaires sur les articles (dans une logique blogs). Il existe une classe de contenu "commentaire" et un droit associé qui permet aux utilisateurs (anonyme ou membres selon vos besoins) de créer des contenus de type "commentaire".
Dans le cas évoqué, la solution consiste donc à créer un objet de type "candidature" avec des champs : nom, prénom, cv, lettre de motivation...
Ces champs ne sont pas collecteurs d'information.
Une fois ceci terminé, vous créez un dossier qui contiendra les candidatures dans l'arborescence de contenu et vous ajouter à la gestion des droits la politique : content / create avec les limitation : classe candidature, noeud (le dossier précédent).
Attention : vérifiez bien que les utilisateurs n'ont pas le droit de lire les objets candidatures des autres personnes (ce serait gênant...).
Il ne vous reste plus qu'à ajouter le bouton d'action de création de l'objet candidature dans vos templates du front.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
{* On va vérifier que l'utilisateur peut créer une candidature
dans $node (ici $node correspond au dossier qui contiendra toutes les candidatures)
*}
{if fetch( content, access,
hash( access, 'create',
contentobject, $node,
contentclass_id, 'candidature' ) )}
<form method="post" action={"content/action"|ezurl}>
<input type="hidden" name="ClassIdentifier" value="candidature" />
<input type="hidden" name="NodeID" value="{$node.node_id}" />
<input class="button new_comment" type="submit" name="NewButton" value="Déposez votre CV" />
</form>
{else}
<h3>Vous n'êtes pas autorisé à déposer votre CV</h3>
{/if} |
Vous trouverez alors tous vos CVs dans le dossier directement depuis la navigation dans le backoffice.
Comme évoqué précédemment vous pouvez en plus ajouter un workflow (optionnel) pour : envoyer un mail au dépôt du CV, valider le dépôt ou ce genre de choses...