Jump to content

ajout champs avec condition dans le formulaire contact


ascat

Recommended Posts

Bonjour,

J'ai ajouté des champs dans le formulaire de contact qui fonctionne bien, mais je voudrais que ces champs soit visible suivant le choix du contact dans la liste déroulante, j'ai essayé de faire cela :


............

{foreach from=$contacts item=contact}
< id="desc_contact{$contact.id_contact|intval}" class="desc_contact" style="display:none;">

 {$contact.description|escape:'htmlall':'UTF-8'}

{/foreach}


{if ($contact.id_contact == 3)}



{l s='Type'}

<input type="text" id="type" name="type" value="{if isset($smarty.post.type)}{$smarty.post.type}

{/if}" />





{l s='Marque'}

<input type="marque" id="type" name="marque" value="{if isset($smarty.post.marque)}{$smarty.post.marque}{/if}" />



{/if}




mais cela ne fonctionne pas, je débute en php, merci de m'aider.
Salutations
Alain
Link to comment
Share on other sites

Bonjour,

Je me répond car il personne pour m'aider (5 questions sans aucune réponse, je ne doit pas poser les bonnes questions!, mais l'avantage c'est que cela oblige à chercher et c'est comme cela que l'on progresse.)

N'ayant pas réussi à résoudre mon problème, j'ai dupliqué le module contact-form.tpl que j'ai appelé contact-form-service.tpl cela fonctionne parfaitement, mais j'ai deux questions.

J'ai modifier la boucle "foreach" pour sélectionner dans la liste déroulante les contacts comme ceci:


{l s='-- Choose --'}
               {foreach from=$contacts item=contact name=foo}
               {if $smarty.foreach.foo.index > 1}
{$contact.name|escape:'htmlall':'UTF-8'}
               {/if}
               {/foreach}



ça fonctionne, mais pouvez-vous me dire si c'est la bonne solution.

Vous pouvez voir le résultats ici :

http://www.pmservice.fr/contact-form-service.php

Je voudrais rendre ces champs obligatoires, pouvez-vous me dire comment faire? quels fichiers sont concernés pour ces contrôles

D'avance merci.

Alain

Link to comment
Share on other sites

Salut !

Je me frotte à ce problème depuis peu, car je n'y connais rien en matière de formulaires sur prestashop, et j'aimerais créer un formulaire, différencié du formulaire de base, que le visiteur pourrait choisir, dans lequel il y aurait des cases à cocher, etc ...

Y a t'il un sujet ou une doc quelque part pour réaliser cela ?

merci ....

Link to comment
Share on other sites

Je suis allé voir le résultat sur le lien que tu indiques, mais rien ne change selon le service que je choisis .... les champs restent les même !?

D'autre part si je clique sur "contactez nous" en bas de page j'arrive sur le formulaire de base, et là aussi pas de changement ...

Link to comment
Share on other sites

Bonsoir,

Oui justement c'est le mon problème, c'est pour cela que pour le contourner j'ai crée un autre formulaire comme cela mes clients peuvent soit aller sur le formulaire contact de base pour les questions "Service client " ou webmaster" ou bien si ils désirent une demande "demande de pièce, devis ou schéma" liens en page d'accueil ils tombent sur le nouveau formulaire.

Pour l'instant je ne suis arrivé qu'à filtrer ce qu'il y avait dans la liste déroulante objet.
Je cherche pour filtrer et faire apparaitre des champs de saisie différents suivant le choix dans la liste objet. De l'aide serait la bien venue.

Salutations

Link to comment
Share on other sites

Bonsoir,
J'ai trouvé!!!!!

J'ai remplacé le code dans themes/pretashop/contact-form.tpl:

{l s='Send a message'}


{l s='Subject'}

{l s='-- Choose --'}
               {foreach from=$contacts item=contact}
{$contact.name|escape:'htmlall':'UTF-8'}
               {/foreach}



 
       {foreach from=$contacts item=contact}


 {$contact.description|escape:'htmlall':'UTF-8'}
       {/foreach}


par

{l s='Send a message'}


{l s='Subject'}

{l s='-- Choose --'}
               {foreach from=$contacts item=contact }                
{$contact.name|escape:'htmlall':'UTF-8'}
               {/foreach}



             

       {foreach from=$contacts item=contact}

           
 {$contact.description|escape:'htmlall':'UTF-8'} 
           {if ($contact.id_contact == 3) or ($contact.id_contact == 4)}




{l s='Type'}
                   <input type="text" id="type" name="type" value="{if isset($smarty.post.type)}{$smarty.post.type}{/if}" />





{l s='Marque'}
                   <input type="marque" id="type" name="marque" value="{if isset($smarty.post.marque)}{$smarty.post.marque}{/if}" />

           {/if}    

       {/foreach}    



le résultat ici :http://www.pmservice.fr/contact-form.php

Link to comment
Share on other sites

Moi j'étais parti dans une autre direction, tout marchait , formulaire dynamique ok, mais les champs conditionnels n'étaient pas transmis ....

Je devais modifier themes/prestashop/contact-form.tpl et js/tools.js

Je pense que je n'étais pas loin de la solution, via autre voie. Mais je vais tester ta solution qui ne modifie qu'un fichier.

Link to comment
Share on other sites

Oui impeccable ça fonctionne !
Juste un détail, quand on utilise un formulaire où les champs sont cachés, les labels correspondants sont quand même transmis (sans valeur bien sur) ...

ex: j'ai fait un test avec un champs nom, sije choisis un objet où ce champs n'est pas affiché, le mail envoyé fait apparaitre le label: "nom:" sans rien derrière

Link to comment
Share on other sites

Ca y est j'ai trouvé !!!

Supposons que nous ayons créé un champs 'ville' dans le formulaire de contact ...

Pour le rendre obligatoire il faut (légèrement) modifier les fichiers:

1- tonsite/classes/Contact.php
2- tonsite/contact-form.php


1- Contact.php :

Ajouter le nom du champs (en rouge) dans :

protected $fieldsRequired = array('email','ville');
protected $fieldsSize = array('email' => 128);
protected $fieldsValidate = array('email' => 'isEmail');
protected $fieldsRequiredLang = array('name');
protected $fieldsSizeLang = array('name' => 32);
protected $fieldsValidateLang = array('name' => 'isGenericName', 'description' => 'isCleanHtml');


2- contact-form.php :

Ajouter le test supplémentaire sur ce champs (en rouge) dans :



if (Tools::isSubmit('submitMessage'))
{

if (!($from = Tools::getValue('from')) OR !Validate::isEmail($from))

$errors[] = Tools::displayError('invalid e-mail address');

elseif (!($ville = Tools::getValue('ville')))

$errors[] = Tools::displayError('Vous devez préciser la ville');

elseif (!($message = nl2br2(Tools::getValue('message'))))

$errors[] = Tools::displayError('message cannot be blank');

elseif (!Validate::isMessage($message))

$errors[] = Tools::displayError('invalid message');

elseif (!($id_contact = intval(Tools::getValue('id_contact'))) OR !(Validate::isLoadedObject($contact = new Contact(intval($id_contact), intval($cookie->id_lang)))))

$errors[] = Tools::displayError('please select a contact in the list');

Link to comment
Share on other sites

Bonsoir,

Ça fonctionne impeccablement, par contre ce qui me gène c'est que si le client oublie de remplir une case, cela efface les champs ajoutés et il est obligé de tout ressaisir, je vais essayer de chercher pour ouvrir une boite d'alerte uniquement.

Bonne continuation

Cordialement

Link to comment
Share on other sites

Je viens de découvrir un problème que je pense lié à ces champs supplémentaires ....

J'ai voulu modifier l'email d'un contact via BO/Employés/Contacts.

Le formulaire d'édition est le formulaire standard (nom, mail, description), mais lorsque j'ai voulu faire 'Enregistrer' j'ai reçu un message d'erreur me disant que des champs (que j'avais ajoutés dans le formulaire de contact du FO, et rendus obligatoires) étaient requis !

Apparemment les fichiers destinés à la création/édition des contacts sont les mêmes que ceux destinés à envoyer des messages à ces contacts !

Que faire ??

Link to comment
Share on other sites

Du coup je m'aperçois qu'il y a un autre problème !!!

J'ai créé plusieurs contacts, et dans contactez nous j'ai créé des champs qui s'affichent ou non selon le contact auquel on écrit ....

Mais ... les champs que j'ai rendus obligatoires le sont pour tous les contacts ! Même s'ils ne sont pas affichés ... Une solution ????

Link to comment
Share on other sites

Bon voila comment j'ai résolu le problème,
Dans - tonsite/contact-form.php

if (Tools::isSubmit('submitMessage'))
{
   if (!($from = Tools::getValue('from')) OR !Validate::isEmail($from))
       $errors[] = Tools::displayError('invalid e-mail address');
       //Contrôle formulaire champs demande de schéma ou demande de devis
           elseif (!($type_devis = Tools::getValue('type_devis')) && (intval(Tools::getValue('id_contact')) == 3))
               $errors[] = Tools::displayError('Vous devez préciser le type de votre appareil.');
           elseif (!($marque_devis = Tools::getValue('marque_devis')) && (intval(Tools::getValue('id_contact')) == 3))
               $errors[] = Tools::displayError('Vous devez préciser la marque de votre appareil.');
       //Fin du contrôle formulaire champs demande de schéma ou demande de devis


Tu remplace 'type_devis' et 'marque_devis' par le nom de tes champs.
Bon code
Salutations
Alain

Link to comment
Share on other sites

Pour ton problème pour ajouter tes contacts dans BO/Employés/Contacts.

modifie le fichier tonsite/classes/Contact.php


Ca y est j’ai trouvé !!!

Supposons que nous ayons créé un champs ‘ville’ dans le formulaire de contact …

Pour le rendre obligatoire il faut (légèrement) modifier les fichiers:

1- tonsite/classes/Contact.php
2- tonsite/contact-form.php

1- Contact.php :

Ajouter le nom du champs (en rouge) dans :

protected $fieldsRequired = array(‘email’,‘ville’);
protected $fieldsSize = array(‘email’ => 128);
protected $fieldsValidate = array(‘email’ => ‘isEmail’);
protected $fieldsRequiredLang = array(‘name’);
protected $fieldsSizeLang = array(‘name’ => 32);
protected $fieldsValidateLang = array(‘name’ => ‘isGenericName’, ‘description’ => ‘isCleanHtml’);



Tu supprime ce que tu a ajouté 'ville' ce qui donne :
protected     $fieldsRequired = array('email');


et la tout fonctionne
A+
Alain

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour Beginner,

Moi aussi je suis débutant mais alors vraiment débutant ! Je ne parviens pas à trouver le fichier dans lequel je sais aller modifier "Service client" et Webmaster". Merci de m'aider s'il vous plaît.

marc04

Link to comment
Share on other sites

  • 2 months later...

Bonsoir,
Je vais te faire un petit résumé

Dans themes/pretashop/contact-form.tpl:
tu recherche ceci :

{l s='Send a message'}


{l s='Subject'}

{l s='-- Choose --'}
               {foreach from=$contacts item=contact}
{$contact.name|escape:'htmlall':'UTF-8'}
               {/foreach}



 
       {foreach from=$contacts item=contact}


 {$contact.description|escape:'htmlall':'UTF-8'}
       {/foreach} 



que tu remplace par cela:

{l s='Send a message'}


{l s='Subject'}

{l s='-- Choose --'}
               {foreach from=$contacts item=contact }                
{$contact.name|escape:'htmlall':'UTF-8'}
               {/foreach}



             

       {foreach from=$contacts item=contact}

           
 {$contact.description|escape:'htmlall':'UTF-8'} 
           {if ($contact.id_contact == 3) or ($contact.id_contact == 4)}




{l s='Type'}
                   <input type="text" id="type" name="type" value="{if isset($smarty.post.type)}{$smarty.post.type}{/if}" />





{l s='Marque'}
                   <input type="marque" id="type" name="marque" value="{if isset($smarty.post.marque)}{$smarty.post.marque}{/if}" />

           {/if}    

       {/foreach} 



Les champs que j'ai ajoutés sont "marque" et "type" toi tu met les noms que tu veux

Et pour les rendre obligatoires
Dans – tonsite/contact-form.php
tu ajoute

if (Tools::isSubmit('submitMessage'))
{
   if (!($from = Tools::getValue('from')) OR !Validate::isEmail($from))
       $errors[] = Tools::displayError('invalid e-mail address');
       //Contrôle formulaire champs demande de schéma ou demande de devis
           elseif (!($type_devis = Tools::getValue('type_devis')) && (intval(Tools::getValue('id_contact')) == 3))
               $errors[] = Tools::displayError('Vous devez préciser le type de votre appareil.');
           elseif (!($marque_devis = Tools::getValue('marque_devis')) && (intval(Tools::getValue('id_contact')) == 3))
               $errors[] = Tools::displayError('Vous devez préciser la marque de votre appareil.');
       //Fin du contrôle formulaire champs demande de schéma ou demande de devis 



En remplaçant "marque_devis" et "type_devis" par les noms que tu a choisis plus haut
Voila, bon courage
Alain

Link to comment
Share on other sites

  • 5 months later...
  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...