Jump to content

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

Link to comment
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
Link to comment
Share on other sites

  • 3 months later...

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

Link to comment
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 = '[email protected]';

}

$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="[email protected]" />

<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

Link to comment
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="[email protected]";
 $headers= "MIME-version: 1.0\n";
 $headers.= "Content-type: text/html; charset=utf-8\n";
 $headers.="From: [email protected]\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)
Link to comment
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="[email protected]";
 $headers= "MIME-version: 1.0\n";
 $headers.= "Content-type: text/html; charset=utf-8\n";
 $headers.="From: [email protected]\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 = '[email protected]';

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)
Link to comment
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.

Link to comment
Share on other sites

  • 6 months later...

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.

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