Jump to content

Presta 1.7 Contact Form ajout champs avec reconnaissance ID Customer


Recommended Posts

Bonjour !
Complètement newbie en codage j'ai intégré les champs text Nom et Prénom (EN & FR) à mon formulaire de contact conformément à certains tutos.

Par défaut lorsqu'on est connecté le champs email 'customer' est rempli qd customer est connecté. J'aimerai faire pareil avec les champs nom et prénom avec format text à respecter (je n'ai pas trouvé le tuto adéquate).

Une aide pour le codage à intégrer au contactform.php ? au contactform.tpl ? au controllers ?

Merci d'avance !

Link to comment
Share on other sites

Salut,

La modification doit être effectuée dans le fichier tpl si c'ets bien dans celui-ci que tu as rajouté le champ en suivant tes tutos.

Pour savoir quelle variable appeler rajoute simplement la ligne {debug} au milieu de ce fichier, vide le cache et va sur la page de contact. Tu vas ainsi obtenir une popup et dans celle-ci se trouvera toutes les variables disponibles pour smarty.

Si ton site est en prod et que tu as un fort trafic sur cette page je te conseille de ne la faire afficher que pour ton adresse.

  • Like 1
Link to comment
Share on other sites

Oui merci ! j'ai overridé le fichier modifié mais le problème vient que dés que je rajoute des codes pour par exemple :

détection champs Nom vide --> message d'erreur, le formulaire ne s'affiche plus après upload des modifs...

Je voulais juste pouvoir mettre détection auto du nom prénom sur le form pour éviter au client de les retaper. Le form détecte l'email via cookie, je n'ai pas trouvé le codage à faire pour détecter le nom et prénom du client connecté automatiquement..

Sinon le BO détecte bien les noms prénoms du client après envoi formulaire. Donc je pense que je vais laisser comme ça...
Merci pour ton implication !

Link to comment
Share on other sites

Tu n'as pas besoin de t’embêter avec les cookies, la variable doit être visible dans la liste des variables Smarty, il te faut peut être vérifier si la variable $customer existe en faisant un isset d'abord car si elle est vide tu peux effectivement avoir une erreur.

N'oublie pas d'activer le mode debug lors de tes test car cela pourrait aussi simplement venir d'une erreur syntaxique ;)

Link to comment
Share on other sites

J'ai justement un page de debogage ouverte et je te confirme que tu as bien dedans les informations que tu souhaites, et ce sur l'intégralité du site :

 

$customer Array (2)
value => Array (29)
  lastname => "NOM"
  firstname => "Prenom"

Tu dois donc pouvoir les utiliser en tant que valeur par défaut de ton champ en faisant en smarty:

{if isset($customer) }{$customer.firstname}{/if}

 

Edited by HeineFR (see edit history)
Link to comment
Share on other sites

ou dans les 2 ?

Dans le tpl ça donnerait ça ?

{if $customer.firstname}
<div class="form-group row">
          <label class="col-md-3 form-control-label">{l s='First name' d='Shop.Forms.Labels'}</label>
          <div class="col-md-6">
            <input
              class="form-control"
              name="firstname"
              type="text"
              value="{$contact.firstname}"
              placeholder="{l s='your first name' d='Shop.Forms.Help'}"
            >
          </div>
        </div>

Link to comment
Share on other sites

On ne modifie que dans le tpl puisque c’est lui qui va gerer l'affichage de la page.

Attention, a cause de ta première condition si il n’est pas connecté il ne pourra pas saisir son nom puisque le champ ne sera pas affiché. de plus je ne vois pas la fin de ton premier {if}

<div class="form-group row">
         <label class="col-md-3 form-control-label">{l s='First name' d='Shop.Forms.Labels'}</label>
         <div class="col-md-6">
            <input
              class="form-control"
              name="firstname"
              type="text"
              value="{if isset($customer) }{$customer.firstname}{/if}"
              placeholder="{l s='your first name' d='Shop.Forms.Help'}"
            >
         </div>
</div>

 

Edited by HeineFR (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...

Salut merci pour ton post ! désolé pour le retard...

Je me suis servi de ton code pour faire ceci...et ça à l'air de marcher ?!

<div class="form-group row">
          <label class="col-md-3 form-control-label">{l s='Last name' d='Shop.Forms.Labels'}</label>
          <div class="col-md-6">
            <input
              class="form-control"
              name="lastname"
              type="text"
              value="{$contact.lastname}{if isset($customer) }{$customer.lastname}{/if}"
              placeholder="{l s='your last name' d='Shop.Forms.Help'}"
            >
          </div>
        <span class="col-md-3 form-control-comment">
              {l s='mandatory' d='Shop.Forms.Help'}
            </span>
        </div>

 

Par contre coté BO je ne reçois pas le nom et prénom des champs créés dans le formulaire..je m'y penche en analysant le .php
Encore merci !

Link to comment
Share on other sites

Attention ta condition n'est pas bonne :

Il faut que ce soit :

   value="{if isset($customer) }{$customer.lastname}{/if}"

Et pour qu'il y ait le nom ET le prénom de pré-rempli il faudrait

   value="{if isset($customer) }{$customer.lastname} {$customer.firstname}{/if}"

Edited by HeineFR (see edit history)
Link to comment
Share on other sites

Si c’est un simple visiteur la variable $customer ne sera pas initialisée (isset en php vérifie si elle est initialisée) donc le champ ne sera pas pré-rempli avec cette information la mais uniquement avec le placeholder qui s'efface lorsque l'on saisi, mais surtout le template ne fera pas appel à une variable inexistante.

Link to comment
Share on other sites

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...