Jump to content
fatima1991

comment creer une second formulaire dans prestashop

Recommended Posts

Bonjour ,

J'ai besoin de créer un second formulaire basé sur contact-form ,J'ai bien dupliqué le contact-form.php, son .tpl et ContactController.php en modifiant ce dernier le nom de fichier php par celui que j'ai ajouté mais tjr la redirection se fait vers le fichier contact-form d'origine

 

svp , quelle sont les étapes à suivre pour dupliquer un formulaire dans prestashop et l'integrer dans une page

Share this post


Link to post
Share on other sites

La duplication d'un formulaire ne se fait pas "comme ça" par miracle rien qu'en changeant le nom !

 

Dans le fichier controller avez-vous changé l'appel à la fin ?

public function displayContent()
{
 $_POST = array_merge($_POST, $_GET);
 parent::displayContent();
 self::$smarty->display(_PS_THEME_DIR_.'contact-form.tpl');
}

 

Sachant que de loin le plus simple est de créer un formulaire à part entière.

 

Tu crées ta page formulaire.php que tu places à la racine du site:

<?php
include(dirname(__FILE__).'/config/config.inc.php');
if(intval(Configuration::get('PS_REWRITING_SETTINGS')) === 1)
	$rewrited_url = __PS_BASE_URI__;
include(dirname(__FILE__).'/header.php');
$smarty->display(_PS_THEME_DIR_.'formulaire.tpl');
include(dirname(__FILE__).'/footer.php');
?>

 

Tu crées un fichier formulaire.tpl dans le répertoire thèmes.

Dans ce fichier tu mets ton formulaire de ce genre:

...
<form action="{request_uri}" method="post">
<input type="text" name="champs_1" />
<input type="text" name="champs_2">
...
<input type="submit" name="bouton" />
</form>
...

 

Ensuite tu édites le premier fichier diaporama.php en y intégrant la réception des données:

<?php
include(dirname(__FILE__).'/config/config.inc.php');
if(intval(Configuration::get('PS_REWRITING_SETTINGS')) === 1)
	$rewrited_url = __PS_BASE_URI__;
include(dirname(__FILE__).'/header.php');
//Je récupère les valeurs
if(Tools::isSubmit('bouton')){
//je traite
$champs_1=Tools::getValue('champs_1');
Etc...
}

$smarty->display(_PS_THEME_DIR_.'formulaire.tpl');
include(dirname(__FILE__).'/footer.php');
?>

Edited by franckm1000 (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

je cherche aussi à faire un autre formulaire, j'ai fait un nouveau tpl et un nouveau php comme indiqué ci-dessus, mais celui-ci n'envoie pas les données. J'ai du oublié quelque chose. Faut-il rajouter un dossier mail quelque part avec des données html ? Si quelqu'un peut m'aider.

 

Merci

Share this post


Link to post
Share on other sites

Personne pour m'aider ?

Voici mon formulaire php à la racine de mon site :

<?php

include(dirname(__FILE__).'/config/config.inc.php');

if(intval(Configuration::get('PS_REWRITING_SETTINGS')) === 1)

$rewrited_url = __PS_BASE_URI__;

include(dirname(__FILE__).'/header.php');

$smarty->display(_PS_THEME_DIR_.'creation-form2.tpl');

include(dirname(__FILE__).'/footer.php');

 

require(dirname(__FILE__).'/config/config.inc.php');

ControllerFactory::getController('CreationController')->run();

?>

<?php

include(dirname(__FILE__).'/config/config.inc.php');

if(intval(Configuration::get('PS_REWRITING_SETTINGS')) === 1)

$rewrited_url = __PS_BASE_URI__;

include(dirname(__FILE__).'/header.php');

//Je récupère les valeurs

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

//je traite

$bateau=Tools::getValue('bateau');

$longueur=Tools::getValue('longueur');

$nom=Tools::getValue('nom');

$prenom=Tools::getValue('prenom');

$adresse=Tools::getValue('adresse');

//$cp=Tools::getValue('cp');

//$ville=Tools::getValue('ville');

$telephone=Tools::getValue('telephone');

$email=Tools::getValue('email');

$fileUpload=Tools::getValue('fileUpload');

$message=Tools::getValue('message');

 

$from = 'grafifred@wanadoo.fr';

}

$smarty->display(_PS_THEME_DIR_.'creation-form2.tpl');

$smarty->assign('submitcrea',$bsubmitcrea);

include(dirname(__FILE__).'/footer.php');

?>

 

Et mon formulaire tpl dans le théme de celui-ci :

{capture name=path}{l s='Creation'}{/capture}

{include file="$tpl_dir./breadcrumb.tpl"}

 

<div class="rte cms">

 

<h1>Création personnalisée</h1>

<h3>Nous pouvons réaliser la décoration unique de votre bateau, d'après une photo, un dessin ou une idée.</br>

Remplissez le plus précidément possible le formulaire ci-dessous et nous vous enverrons un devis ou nous vous recontacterons </h3>

 

<form action="{$request_uri}" method="post"class="std"enctype="multipart/form-data">

<fieldset>

<h3>Devis personnalisé :</h3>

 

<p align="center" class="required"><strong>{l s='Les champs marques d\'une'} <sup>*</sup> {l s='doivent etre obligatoirement remplis'}</strong></p>

<p> </p>

 

<p class="required text">

<label for="bateau">

Type/Marque du bateau :</label>

<input type="text" id="bateau" name="bateau" value="{if isset($smarty.post.bateau)}{$smarty.post.bateau|escape:'htmlall'|stripslashes}{/if}" />

<sup>*</sup>

</p>

 

<p class="required text">

<label for="longueur">

Longueur de la coque :</label>

<input type="text" id="longueur" name="longueur" value="{if isset($smarty.post.longueur)}{$smarty.post.longueur|escape:'htmlall'|stripslashes}{/if}" />

<sup>*</sup>

</p>

 

<p class="required text">

<label for="nom">

Votre nom :</label>

<input type="text" id="nom" name="nom" value="{if isset($smarty.post.nom)}{$smarty.post.nom|escape:'htmlall'|stripslashes}{/if}" />

<sup>*</sup>

</p>

 

<p>

<label for="prenom">Votre prenom</label>

<input type="text" id="prenom" name="prenom" value="{if isset($smarty.post.prenom)}{$smarty.post.prenom|escape:'htmlall'|stripslashes}{/if}" />

</p>

 

<p class="required text">

<label for="mail_client">

Votre email :</label>

<input type="text" id="mail_client" name="mail_client" value="{if isset($smarty.post.mail_client)}{$smarty.post.mail_client|escape:'htmlall'|stripslashes}{/if}" />

<sup>*</sup>

</p>

 

<p class="required text">

<label for="telephone">

Votre téléphone :</label>

<input type="text" id="telephone" name="telephone" value="{if isset($smarty.post.telephone)}{$smarty.post.telephone|escape:'htmlall'|stripslashes}{/if}" />

<sup>*</sup>

</p>

 

<p class="required text">

<label for="adresse">Votre adresse :</label>

<textarea id="adresse" name="adresse" rows="4" cols="35">{if isset($smarty.post.adresse)}{$smarty.post.adresse|escape:'htmlall':'UTF-8'|stripslashes}{/if}</textarea>

<sup>*</sup>

</p>

 

<p class="required text">

<label for="message">

Votre demande :</label>

<textarea id="message" name="message" rows="7" cols="35">{if isset($smarty.post.message)}{$smarty.post.message|escape:'htmlall':'UTF-8'|stripslashes}{/if}</textarea>

<sup>*</sup>

</p>

 

<p>

Vous pouvez accompagner votre demande en nous envoyant une photo depuis votre ordinateur

</p>

<p class="textarea">

<label for="message">Votre photo : </label>

<input type="file" name="attachment">

</p>

 

 

 

<p> </p>

 

<p class="bold" align="center">Attention : verifiez bien votre email car le devis vous sera envoye par courrier electronique.</p>

 

 

<p class="submit">

<input type="hidden" id="email" name="email" value="grafifred@wanadoo.fr" />

<input type="submit" name="submitcrea" value="{l s='Envoyer ma demande' mod=''}" class="button_large" />

</p>

</fieldset>

</form>

</div>

 

Tout s'affiche correctement, mais je ne recois pas les informations sur mon mail.

J'ai du oublié quelquechose, faut-il rajouter une table dans la base de données ?

Merci pour votre aide

 

Fred

Share this post


Link to post
Share on other sites

Ton fichier PHP est ... horrible...

 

Pourquoi tu appelles plusieurs fois le fichier config?????

include(dirname(__FILE__).'/config/config.inc.php');

 

Pourquoi appeler 2 fois le TPL ???

$smarty->display(_PS_THEME_DIR_.'creation-form2.tpl');

 

Tu récupères les valeurs:

if(Tools::isSubmit('submitcrea')){
//je traite
$bateau=Tools::getValue('bateau');
$longueur=Tools::getValue('longueur');
$nom=Tools::getValue('nom');
$prenom=Tools::getValue('prenom');
$adresse=Tools::getValue('adresse');
//$cp=Tools::getValue('cp');
//$ville=Tools::getValue('ville');
$telephone=Tools::getValue('telephone');
$email=Tools::getValue('email');
$fileUpload=Tools::getValue('fileUpload');
$message=Tools::getValue('message');

 

Mais tu n'en fais rien !

Pour envoyer un mail, il faudrait déjà commencer par utiliser la fonction mail()

 

Et tu espères assigner quoi avec ça :

$smarty->assign('submitcrea',$bsubmitcrea);

 

Elève Grafifred, cela ne va pas du tout ! <_<

 

Bon essaies plutôt un truc comme ça:

<?php
include(dirname(__FILE__).'/config/config.inc.php');
if(intval(Configuration::get('PS_REWRITING_SETTINGS')) === 1)
$rewrited_url = __PS_BASE_URI__;
include(dirname(__FILE__).'/header.php');
//Je récupère les valeurs
if(Tools::isSubmit('submitcrea'))
{
 $bateau=Tools::getValue('bateau');
 $longueur=Tools::getValue('longueur');
 $nom=Tools::getValue('nom');
 $prenom=Tools::getValue('prenom');
 $adresse=Tools::getValue('adresse');
 //$cp=Tools::getValue('cp');
 //$ville=Tools::getValue('ville');
 $telephone=Tools::getValue('telephone');
 $email=Tools::getValue('email');
 $fileUpload=Tools::getValue('fileUpload');
 $message=Tools::getValue('message');

 $monmail="tonmail@monmail.fr";
 $headers= "MIME-version: 1.0\n";
 $headers.= "Content-type: text/html; charset=utf-8\n";
 $headers.="From: grafifred@wanadoo.fr\n";

 $texte="Mettre mon texte en style pour récupérer toutes mes variables.<br />Bateau:".$bateau."<br />Longueur:".$longueur."<br />Etc avec toutes les autres variables
 :".$nom." ".$prenom." ".$adresse." ".$telephone." ".$email." ".$message;
 mail($monmail,"contact depuis le formulaire",$texte,$header);
 $smarty->assign('message','Votre message a bien été envoyé !');
}
$smarty->display(_PS_THEME_DIR_.'creation-form2.tpl');
include(dirname(__FILE__).'/footer.php');
?>

 

Tu remplaces $monmail par ton vrai mail, et tu mets comme tu veux $texte pour que ça apparaisse comme tu veux sur ton mail.

 

Côté TPL, tu rajoutes où tu veux:

{if $message}{$message}{/if}

 

Pour afficher le message d'envoi.

 

J'ai pas testé mais normalement ça doit marcher B) à moins que ton serveur ne te fasse des embrouilles avec la fonction mail() ce qui peut parfois arriver.

Edited by franckm1000 (see edit history)

Share this post


Link to post
Share on other sites

Merci beaucoup pour ton aide, je suis vraiment nulle, et à force d'avoir bidouillé le fichier, j'ai fait des doublons. Malheureusement, ça ne marche toujours pas, j'ai l'impression que les fonctions $smarty ne sont pas prise en compte c'est possible ?

Share this post


Link to post
Share on other sites

Après

$message=Tools::getValue('message');

 

Ajoutes:

echo $bateau;echo $message;

 

Lorsque tu valides ton formulaire (en ayant bien sûr rempli bateau et message) il doit afficher les résultats au chargement de la page.

Share this post


Link to post
Share on other sites

Bonjour,

 

J'ai bien le nom du bateau, le message et votre message a bien été envoyé qui s'affiche, mais en plus du formulaire qui reste.

Share this post


Link to post
Share on other sites

Quand je te demande de mettre ça, c'est pour bien vérifier que le formulaire est bien récupéré. Cela veut dire donc que tu récupères bien les infos.

Tu as bien changé $monmail en mettant ton mail ?

 

Bon allez on va essayer d'améliorer ton truc. Suis bien ce que je dis de faire...

 

 

1. Dans le fichier PHP, supprimes la partie suivante:

$monmail="tonmail@monmail.fr";
 $headers= "MIME-version: 1.0\n";
 $headers.= "Content-type: text/html; charset=utf-8\n";
 $headers.="From: grafifred@wanadoo.fr\n";
 $texte="Mettre mon texte en style pour récupérer toutes mes variables.<br />Bateau:".$bateau."<br />Longueur:".$longueur."<br />Etc avec toutes les autres variables
 :".$nom." ".$prenom." ".$adresse." ".$telephone." ".$email." ".$message;
 mail($monmail,"contact depuis le formulaire",$texte,$header);

 

A la place tu mets:

global $cookie;

$sujet = 'Envoi de mail depuis la page prestashop';
$donnees = array('{bateau}'=>$bateau,'{longueur}'=>$longueur,'{nom}'=>$nom,'{prenom}'=>$prenom,'{adresse}'=>$adresse,'{telephone}'=>$telephone,'{mail}'=>$mail,'{message}'=>$message, );
$destinataire = 'mail@destinataire.com';

Mail::Send(intval($cookie->id_lang), 'mon_mail', $sujet , $donnees, $destinataire, NULL, NULL, NULL, NULL, NULL, 'mails/');

Tu changes bien le $destinataire en mettant ta véritable adresse mail où doit être envoyé le mail.

 

 

2.Ensuite, tu vas créer deux fichier distincts . Ces deux fichiers, tu vas les appeler mon-mail.txt (fichier texte) et mon_mail.html (fichier HTML).

Pour le fichier mon_mail.txt tu mets la chose suivante:

Bateau: {bateau}
longueur:{longueur}
nom:{nom}
prénom:{prenom}
adresse:{adresse}
téléphone:{telephone}
mail:{mail}
message:{message}

 

Pour le fichier mon_mail.html tu mets la chose suivante:

Bateau: {bateau}<br />
longueur:{longueur}<br />
nom:{nom}<br />
prénom:{prenom}<br />
adresse:{adresse}<br />
téléphone:{telephone}<br />
mail:{mail}<br />
message:{message}<br />

 

3. Tu enregistres ces deux messages dans le dossier mails/fr et pas ailleurs !

 

Tu as compris le système ? On récupère les valeurs du formulaire, on envoie via la méthode Send vers des templates que l'on a créé et on affiche les variables avec les {...}

 

Tu peux ensuite mettre en forme le texte de ton mail comme tu le souhaites dans mon_mail.(txt+html). Il faut bien les deux pour que ça marche. Tu as également comprit que dans le fichier html tu peux ajouter une mise en style html.

 

Normalement, ça doit marcher. Si ça ne marche pas, c'est que tu as fait quelque chose de façon incorrecte.

Edited by franckm1000 (see edit history)

Share this post


Link to post
Share on other sites

Merci, Merci, Merci

 

En effet ça marche nickel, je vais essayer de rajouter du javascript pour mes champs obligatoires.

par contre je ne récupère pas la pièce jointe envoyé par mes clients.

 

Merci encore

Share this post


Link to post
Share on other sites

Avant de recopier sans comprendre, regardes le code que je t'ai donné. Je n'envoie à aucun moment ton fichier joint. L'envoi de pièce jointe par mail est tout sauf une partie de plaisir.

 

Je ne sais pas si la méthode send permet de le faire. A toi de chercher un peu sur google pour voir un peu comment faire.

Share this post


Link to post
Share on other sites

Avant de recopier sans comprendre, regardes le code que je t'ai donné. Je n'envoie à aucun moment ton fichier joint. L'envoi de pièce jointe par mail est tout sauf une partie de plaisir.

 

Je ne sais pas si la méthode send permet de le faire. A toi de chercher un peu sur google pour voir un peu comment faire.

 

Bonjour Franckm, Merci de vos contributions sur ce forum!

 

Pourriez-vous m'aider avec un petit problème?

Il me faudrait rajouter un ou plusieurs champs durant le checkout (order-address.tpl) comme $message et que je puisse récuperer les données dans email alert (comme on le fait en rajoutant $message).

 

Je sais comment rajouter les champs en html dans le textarea mais pas comment crée un champs qui serait rajouter dans la base de données.

 

Merci pour votre temps.

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More