Guest Posted January 28, 2010 Share Posted January 28, 2010 Bonjour à tous,aujourd'hui j'ai réussi à rajouter des champs que je veux dans le formulaire contact de prestashop (champ texte et select), le formulaire marche très bien et les données sont bien réçus aussi.Mais j'ai une question : comment mettre un champ upload dans ce formulaire? est-ce possible?, je ne suis pas encore très familiarisé avec la gestion des champs uploads, j'ai essayé des trucs mais sans resultat. avoir un champ upload dans contact pour que les utilisateurs puissent envoyer des fichiers sera intéressant pour un type de boutique comme prestashop à mon avis.Ce que j'ai essayé de faire :mettre un champ upload dans le fichier contact-form.tpl <input type="file" name="fichier"> Dans le fichier contact-form.php : if ($_FILES['fichier']['name'] != '') { $destination = "/fichiers/".$_FILES['fichier']['name']; if (is_uploaded_file($_FILES['fichier']['tmp_name'])) { $upload = move_uploaded_file($_FILES['fichier']['tmp_name'], $destination) or die("impossible de déplacer le fichier"); } } Sinon une belle solution aussi c'est de faire le fichier en pièce jointe, mais je sais pas le faire aussi.Avec Joomla créer des champs sont trop facile avec son plugin breezingforms et d'autres, et je serais obligé de developper mon site sous joomla si j'arrive pas à créer ce champ upload dans le formulaire de contact de prestashop.Merci pour votre aide et j'espère que cela aidera aussi la communauté Link to comment Share on other sites More sharing options...
Guest Posted January 28, 2010 Share Posted January 28, 2010 Personne ne connait la solution?, au fait et pour un simple pièce jointe sur le formulaire alors? Link to comment Share on other sites More sharing options...
Guest Posted January 29, 2010 Share Posted January 29, 2010 Bonjour, il y a quelqu'un qui connait ce manip svp?, une pièce jointe dans le formulaire contact de prestashopmerci à tous Link to comment Share on other sites More sharing options...
Guest Posted January 29, 2010 Share Posted January 29, 2010 J'ai essayé un manip pas vraiment great en ajoutant cette ligne dans le contact-form.tpl : <input type="file" name="file" /> et dans le fichier contact-form.php $fichier->Attach($fichier, "text/html" ) cela produit : Fatal error: Call to a member function Attach() on a non-object in /var/www/xxx/htdocs/prestashop/contact-form.php on line 26 Aidez-moi svp! Link to comment Share on other sites More sharing options...
dtanon Posted February 15, 2010 Share Posted February 15, 2010 Bonjourune indication pour ce que tu veux faire ( peut etre à améliorer)dans contact-form.php tu dois rajouter le traitement de la pièce jointe (n'oublie pas de rajouter $fileAttachment dans Mail::send a la fin if (isset($_FILES['pjointe'])) { if ( $_FILES['pjointe']['error'] == 0) { $fichier_attache = fread(fopen($_FILES['pjointe']['tmp_name'], "r"), filesize($_FILES['pjointe']['tmp_name'])); $fileAttachment['content'] = $fichier_attache; $fileAttachment['name'] = $_FILES['pjointe']['name']; $fileAttachment['mime'] = $_FILES['pjointe']['type']; } else { $errors[] = Tools::displayError('Erreur pour joindre votre fichier'); } } else $fileAttachment = NULL; if (Mail::Send(intval($cookie->id_lang), 'contact', 'Message from contact form', array('{email}' => $_POST['from'], '{message}' => stripslashes($message)), $contact->email, $contact->name, $from, (intval($cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : $from),$fileAttachment)) dans contact-form.tplrajouter enctype sinon la pièce jointe n'est pas prise en compte <form action="{$request_uri|escape:'htmlall':'UTF-8'}" method="post" class="std" enctype="multipart/form-data"> <input type="file" name="pjointe" id="pjointe" / voila, j'espère que ca va t'aider Link to comment Share on other sites More sharing options...
albundy11 Posted March 31, 2010 Share Posted March 31, 2010 Bonjour,C'est résolu ou pas ? Je pense que le but du forum est d'aider et de partager....Merci et a bientôt. Link to comment Share on other sites More sharing options...
dangee Posted August 3, 2010 Share Posted August 3, 2010 Je reviens sur ce sujet qui date, mais une solution a t-elle été trouvé ?? j'aurais également besoin de cette fonction.Merci Link to comment Share on other sites More sharing options...
albundy11 Posted August 3, 2010 Share Posted August 3, 2010 RAS de mon côté ! Link to comment Share on other sites More sharing options...
amaury Posted August 6, 2010 Share Posted August 6, 2010 J'essaye de résumer (Les fichiers sont joints) :Fichier /contact-form.php, remplacer en ligne 26 : if (Mail::Send(intval($cookie->id_lang), 'contact', 'Message from contact form', array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, $from, (intval($cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : $from))) par : if(isset($_FILES['attached']['name'])) { $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']); } if (Mail::Send(intval($cookie->id_lang), 'contact', 'Message from contact form', array('{email}' => $from, '{message}' => stripslashes($message)), $contact->email, $contact->name, $from, (intval($cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : $from), $attached)) Cela va avoir pour effet d'attacher ce qu'il y a dans le champ "attached" au mail.Ensuite, fichier /themes/prestashop/contact-form.tpl (Ici je prend comme base celui du thème de base) rajouter ceci : {l s='File Attachment'} <input type="file" id="attached" name="attached" /> après un champ, par exemple avant le textarea (Placer après ligne 34 dans le thème d'origine), cela aura pour effet d'ajouter un champ de type fichier dans le formulaire de contact. Attention : Le champ est actuellement nommé "File Attachment", pour changer ça, il faut passer par "Traduction du Frontoffice" dans l'onglet Traduction du backoffice ou changer {l s='File Attachment'} par "Fichier joint". Maintenant il faut changer l'enctype du formulaire en remplacant : <form action="{$request_uri|escape:'htmlall':'UTF-8'}" method="post" class="std"> par : <form enctype="multipart/form-data" action="{$request_uri|escape:'htmlall':'UTF-8'}" method="post" class="std"> Ce dernier bout de code permet de faire en sorte que le formulaire puisse bien lire le champ fichier, sans ce petit bout de code, le champ sera invisible pour lui.Et en toute logique ça devrait marcher. Je n'ai pas testé ce code donc si quelqu'un pouvait le tester, je modifierais mon code en conséquence si ça ne marche pas.J'ai pris comme base la version 1.3.1 de Prestashop, mais je ne pense que des modifications majeurs arriverons dans cette partie du moteur.FACULTATIF : Perso, mon hébergement limite à 64Mo les fichiers que l'on peut mettre sur le serveur et à 10Mo les fichier par mail, donc il est possible de brider ceci en rajoutant juste après le champ de type "file" (Pas autre part sinon ça semble bugger) : <input type="hidden" name="MAX_FILE_SIZE" value="10485760"> Avec "value" contenant le nombre limité en octect, ici 10Mo. prestashop.zip 1 Link to comment Share on other sites More sharing options...
dangee Posted August 6, 2010 Share Posted August 6, 2010 Merci...Je viens de faire les test. Le formulaire est bien envoyé, mais SANS la pièce jointe (test avec une img de 1Mo et un pdf de 14Ko).@+ Link to comment Share on other sites More sharing options...
yaya Posted August 6, 2010 Share Posted August 6, 2010 Bonjour,qq'un pourrait mettre directement le fichier contact-form.tpl + contact-form.phpmerci Link to comment Share on other sites More sharing options...
dangee Posted August 6, 2010 Share Posted August 6, 2010 Les voici...Pouvez vous confirmer que cela ne fonctionne pas contact-form.zip Link to comment Share on other sites More sharing options...
amaury Posted August 6, 2010 Share Posted August 6, 2010 Effectivement ça ne fonctionne pas. J'ai mal jugé le paramètre pour les fichiers attachés. Je m'en occupe.yaya tu aurai pu faire un effort, ça prend 5 minutes à faire ^^ Link to comment Share on other sites More sharing options...
amaury Posted August 6, 2010 Share Posted August 6, 2010 Voila, j'ai changé mon gros topic avec une méthode testée. Le problème se situait dans le paramètre file_attachment dans contact-form.php. Link to comment Share on other sites More sharing options...
yaya Posted August 6, 2010 Share Posted August 6, 2010 Bonjour,j'ai bien un fichier joint désormais cependant celui ne fait que 1 ko....et il n'a pas de .txt ou .jpg etcAmaury quand même ;-) Link to comment Share on other sites More sharing options...
dangee Posted August 6, 2010 Share Posted August 6, 2010 Nope...marche pas avec dernières modifs' de contact-form.php. Il y a 1 erreur : 1. une erreur s'est produite pendant l'envoi du message presta v1.31 Link to comment Share on other sites More sharing options...
amaury Posted August 6, 2010 Share Posted August 6, 2010 Pourtant sur mon Wamp, j'ai bien mon fichier image de 568Ko qui a été envoyé.Je joint à mon gros topic les deux fichiers mais je ne voit pas quel différence cela ferait.Peut être le MAX_FILE_SIZE qui bug (que j'utilise pas). Link to comment Share on other sites More sharing options...
dangee Posted August 6, 2010 Share Posted August 6, 2010 IMPEC' !!! Cela fonctionne...C'était le MAX_FILE_SIZE qui buggé !!! Pour l'utiliser il faut le mettre sous la ligne <input type="file" id="attached" name="attached" /> MERCI BCP !!! [EDIT] : Juste un petit truc...Quand on clique sur "envoyer", le bouton disparait pendant le transfert...y aurait-il un moyen d'arranger ça ? Link to comment Share on other sites More sharing options...
amaury Posted August 6, 2010 Share Posted August 6, 2010 Nope...marche pas avec dernières modifs' de contact-form.php.Il y a 1 erreur : 1. une erreur s'est produite pendant l'envoi du messagepresta v1.31 Là je ne voit pas, c'est pour cela que j'ai bien précisé comment j'étais arrivé à ce résultat sur mon topic afin que vous puissiez l'adapter en cas de problèmeEDIT :IMPEC' !!! Cela fonctionne...C'était le MAX_FILE_SIZE qui buggé !!! Pour l'utiliser il faut le mettre sous la ligne <input type="file" id="attached" name="attached" /> MERCI BCP !!! Ah, ça je ne le savais pas, désolé , je me sert jamais de ce truc là ^^ Link to comment Share on other sites More sharing options...
yaya Posted August 6, 2010 Share Posted August 6, 2010 Le pieces jointes n'ont pas etes prises dans ton messagesPeux tu mettre un zip ;-) Link to comment Share on other sites More sharing options...
amaury Posted August 6, 2010 Share Posted August 6, 2010 Sérieux Yaya, je viens de débloquer en une journée un message datant de Janvier et tu n'a pas la patience d'attendre 2 minutes ?Au moment où tu as cliqué sur "Envoyer" pour envoyer ton message, mon .zip était dispo sur le gros topic. Link to comment Share on other sites More sharing options...
yaya Posted August 6, 2010 Share Posted August 6, 2010 Excuses moi de cette rapidité .....j'ai bien mis tes fichiers, le message part bien cependant je ne reçois qu'un fichier de 1 ko et je ne vois pas ou est le problème....Pour info je suis sur la version 1.2.5 et je ne pense pas que cela joue bcp Link to comment Share on other sites More sharing options...
dangee Posted August 6, 2010 Share Posted August 6, 2010 Puisqu'on est sur les mails...Où peut-on modifier l'Objet des mails envoyés via le formulaire de contact ? J'ai regardé dans le répertoire /mails/fr/contact.html, mais pas de paramètre "Objet". Link to comment Share on other sites More sharing options...
amaury Posted August 6, 2010 Share Posted August 6, 2010 Puisqu'on est sur les mails...Où peut-on modifier l'Objet des mails envoyés via le formulaire de contact ? J'ai regardé dans le répertoire /mails/fr/contact.html, mais pas de paramètre "Objet". /mails/fr/lang.php ligne 9.Excuses moi de cette rapidité .....j'ai bien mis tes fichiers, le message part bien cependant je ne reçois qu'un fichier de 1 ko et je ne vois pas ou est le problème....Pour info je suis sur la version 1.2.5 et je ne pense pas que cela joue bcp Comme je l'ai déjà mis sur mon autre topic, si ça ne marche pas, il faut adapter soit même. Je pense que c'est le contact-form.php qui déconne mais j'en sais pas plus. J'ai donné toutes les clefs pour adapter soit même cette fonctionnalité.Bonne continuation. Link to comment Share on other sites More sharing options...
dangee Posted August 6, 2010 Share Posted August 6, 2010 Merci à toi Amaury... Link to comment Share on other sites More sharing options...
yaya Posted August 6, 2010 Share Posted August 6, 2010 Merci a toi amaury ;-) Link to comment Share on other sites More sharing options...
xtrem Posted August 9, 2010 Share Posted August 9, 2010 Bonjour,j'ai essayais de suivre les instruction pour ajouter une piece jointe mais en vain...le probleme est que je ne veux pas modifier mon formulaire de contact prédéfini par défault mais plutot un module qui génére un formulaire de contact modifié, "devis personnalisé" chez moi...je ne sais pas où est ce que je dois afficher :if(isset($_FILES['attached']['name'])){ $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']);}et $attachedje les ai placé de la sorte mais ca ne fonctionne pas, le message part mais sans la piece jointe: [b][u]if(isset($_FILES['attached']['name'])) { $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']); }[/u][/b] if (!$cookie->logged && empty($_POST['email']) OR !$cookie->logged && empty($_POST['name']) ) $error = $this->l('You must fill all fields'); elseif (!$cookie->logged AND !Validate::isEmail($_POST['email'])) $error = $this->l('Invalid mail'); elseif (!$cookie->logged AND !Validate::isName($_POST['name'])) $error = $this->l('Invalid name'); else { /* Email generation */ $subject = ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('Message from contact form')); $templateVars = array( '{customer}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('A visitor')), '{name}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : Tools::safeOutput($_POST['name']) ), '{email}' => ($cookie->email ? $cookie->email : Tools::safeOutput($_POST['email']) ), '{tel}' => $_POST['tel'], '{type_appareil}' => $_POST['type_appareil'], '{marque_chassis}' => $_POST['marque_chassis'], '{modele_chassis}' => $_POST['modele_chassis'], '{marque_moteur}' => $_POST['marque_moteur'], '{modele_moteur}' => $_POST['modele_moteur'], '{type}' => $_POST['type'], '{annee_fabrication}' => $_POST['annee_fabrication'], '{code_numserie}' => $_POST['code_numeserie'], '{numero_chassis}' => $_POST['numero_chassis'], '{autres_infos}' => $_POST['autres_infos'] ); [u][b]$attached;[/b][/u] /* Email sending */ if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/')) $error = $this->l('An error occurred'); else $confirm = $this->l('Your message has been sent successfully !'); } } merci d'avance pour votre aide Link to comment Share on other sites More sharing options...
amaury Posted August 9, 2010 Share Posted August 9, 2010 La variable $attached est juste une variable similaire à $_FILES qui sert à Mail::Send. Je génère cette variable à partir de $_FILES (qui sont les infos données par un fichier à uploader). if(isset($_FILES['attached']['name'])) { $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']); } Sert donc à générer cette variable quand le fichier a été envoyé. Il faut donc placer ce code dans un endroit où on est sur que le fichier a été envoyé.L'étape d'après est de mettre $attached dans Mail::Send, déjà, de ce que je vois ici, tu ne l'a pas, il faut donc modifier : if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/')) par : if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, $attached, NULL, dirname(__FILE__).'/mails/')) Si je dit pas de bétise, vérifie Mail::Send pour bien voir si la variable qui doit s'appeller à peu près $file_attachment est en 9eme position. Link to comment Share on other sites More sharing options...
xtrem Posted August 9, 2010 Share Posted August 9, 2010 je n'ai pas tres bien compris comment voir la position de file_attachment, je ne trouve pas cette variable dans mon code.D'autre part, je ne sais pas où est la condition dans laquelle le fichier a été envoyé a part $confirm = $this->l('Your message has been sent successfully !');voici la page complete de mon code: <?php class Contact extends Module { //Configuration::get('PS_SHOP_EMAIL') function __construct() { $this->name = 'contact'; $this->tab = 'devis'; $this->version = '1.0'; parent::__construct(); $this->page = basename(__FILE__, '.php'); $this->displayName = ('devis'); $this->description = $this->l('Allows to contact the owner of the shop.'); } function install() { if (!parent::install()) return false; return true; } public function displayFrontForm() { global $smarty; $error = false; $confirm = false; if (isset($_POST['submitQuestion'])) { global $cookie; /* Fields verifications */ if(isset($_FILES['attached']['name'])) { $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']); } $_FILES['attached']['mime'] = $_FILES['attached']['type']; if (!$cookie->logged && empty($_POST['email']) OR !$cookie->logged && empty($_POST['name']) ) $error = $this->l('You must fill all fields'); elseif (!$cookie->logged AND !Validate::isEmail($_POST['email'])) $error = $this->l('Invalid mail'); elseif (!$cookie->logged AND !Validate::isName($_POST['name'])) $error = $this->l('Invalid name'); else { /* Email generation */ $subject = ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('Message from contact form')); $templateVars = array( '{customer}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('A visitor')), '{name}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : Tools::safeOutput($_POST['name']) ), '{email}' => ($cookie->email ? $cookie->email : Tools::safeOutput($_POST['email']) ), '{tel}' => $_POST['tel'], '{type_appareil}' => $_POST['type_appareil'], '{marque_chassis}' => $_POST['marque_chassis'], '{modele_chassis}' => $_POST['modele_chassis'], '{marque_moteur}' => $_POST['marque_moteur'], '{modele_moteur}' => $_POST['modele_moteur'], '{type}' => $_POST['type'], '{annee_fabrication}' => $_POST['annee_fabrication'], '{code_numserie}' => $_POST['code_numeserie'], '{numero_chassis}' => $_POST['numero_chassis'], '{autres_infos}' => $_POST['autres_infos'] ); /* Email sending */ if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, $attached, NULL, dirname(__FILE__).'/mails/')) $error = $this->l('An error occurred'); else $confirm = $this->l('Your message has been sent successfully !'); } } $smarty->assign(array( 'validate_login' => $cookie->logged, 'cover' => $cover, 'errors' => $error, 'confirm' => $confirm, 'product' => $product, 'productLink' => $productLink )); return $this->display(__FILE__, 'contact.tpl'); } } ?> Link to comment Share on other sites More sharing options...
amaury Posted August 9, 2010 Share Posted August 9, 2010 Comme tu l'a fait ça m'a l'air bien, si tu à mis le enctype comme il faut, ça devrait marcher... Link to comment Share on other sites More sharing options...
xtrem Posted August 9, 2010 Share Posted August 9, 2010 ah ue ca marche nikel comme ca merci Link to comment Share on other sites More sharing options...
xtrem Posted August 9, 2010 Share Posted August 9, 2010 derniere chose.. je voudrais que l'on puisse joindre 3 fichiers.. j'ai modifié le code de la façon suivante mais ma page contact form ne s'affiche pas : <?php class Contact extends Module { //Configuration::get('PS_SHOP_EMAIL') function __construct() { $this->name = 'contact'; $this->tab = 'devis'; $this->version = '1.0'; parent::__construct(); $this->page = basename(__FILE__, '.php'); $this->displayName = ('devis'); $this->description = $this->l('Allows to contact the owner of the shop.'); } function install() { if (!parent::install()) return false; return true; } public function displayFrontForm() { global $smarty; $error = false; $confirm = false; if (isset($_POST['submitQuestion'])) { global $cookie; /* Fields verifications */ if(isset($_FILES['attached']['name'] && $_FILES1['attached1']['name1'] && $_FILES2['attached2']['name2'])) { $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']); $attached1['mime'] = $_FILES['attached']['type']; $attached1['name'] = $_FILES['attached']['name']; $attached1['content'] = file_get_contents($_FILES1['attached']['tmp_name']); $attached2['mime'] = $_FILES['attached']['type']; $attached2['name'] = $_FILES['attached']['name']; $attached2['content'] = file_get_contents($_FILES2['attached']['tmp_name']); } $_FILES['attached']['mime'] = $_FILES['attached']['type']; $_FILES1['attached']['mime'] = $_FILES1['attached']['type']; $_FILES2['attached']['mime'] = $_FILES2['attached']['type']; if (!$cookie->logged && empty($_POST['email']) OR !$cookie->logged && empty($_POST['name']) ) $error = $this->l('You must fill all fields'); elseif (!$cookie->logged AND !Validate::isEmail($_POST['email'])) $error = $this->l('Invalid mail'); elseif (!$cookie->logged AND !Validate::isName($_POST['name'])) $error = $this->l('Invalid name'); else { /* Email generation */ $subject = ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('Message from contact form')); $templateVars = array( '{customer}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('A visitor')), '{name}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : Tools::safeOutput($_POST['name']) ), '{email}' => ($cookie->email ? $cookie->email : Tools::safeOutput($_POST['email']) ), '{tel}' => $_POST['tel'], '{type_appareil}' => $_POST['type_appareil'], '{marque_chassis}' => $_POST['marque_chassis'], '{modele_chassis}' => $_POST['modele_chassis'], '{marque_moteur}' => $_POST['marque_moteur'], '{modele_moteur}' => $_POST['modele_moteur'], '{type}' => $_POST['type'], '{annee_fabrication}' => $_POST['annee_fabrication'], '{code_numserie}' => $_POST['code_numeserie'], '{numero_chassis}' => $_POST['numero_chassis'], '{autres_infos}' => $_POST['autres_infos'] ); $attached; /* Email sending */ if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, $attached, $attached1, $attached2, NULL, dirname(__FILE__).'/mails/')) $error = $this->l('An error occurred'); else $confirm = $this->l('Your message has been sent successfully !'); } } $smarty->assign(array( 'validate_login' => $cookie->logged, 'cover' => $cover, 'errors' => $error, 'confirm' => $confirm, 'product' => $product, 'productLink' => $productLink )); return $this->display(__FILE__, 'contact.tpl'); } } ?> avez vous une idée svp? Link to comment Share on other sites More sharing options...
xtrem Posted August 9, 2010 Share Posted August 9, 2010 en utilisant le code if(isset($_FILES['attached']['name'])) { $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']); } $_FILES['attached']['mime'] = $_FILES['attached']['type']; if(isset($_FILES1['attached']['name'] )) { $attached1['mime'] = $_FILES1['attached']['type']; $attached1['name'] = $_FILES1['attached']['name']; $attached1['content'] = file1_get_contents($_FILES1['attached']['tmp_name']); } $_FILES1['attached']['mime'] = $_FILES1['attached']['type']; if(isset($_FILES2['attached']['name'] )) { $attached2['mime'] = $_FILES2['attached']['type']; $attached2['name'] = $_FILES2['attached']['name']; $attached2['content'] = file_get_contents($_FILES2['attached']['tmp_name']); } $_FILES2['attached']['mime'] = $_FILES2['attached']['type']; j'obtient le message "Erreur - La template mail suivante n'existe pas : fr/send_question.txt" après avoir cliqué sur envoyer Link to comment Share on other sites More sharing options...
amaury Posted August 9, 2010 Share Posted August 9, 2010 Alors 1 : Je ne suis pas sur que le code suivant soit obligatoire : $_FILES['attached']['mime'] = $_FILES['attached']['type']; $_FILES1['attached']['mime'] = $_FILES1['attached']['type']; $_FILES2['attached']['mime'] = $_FILES2['attached']['type']; Je crois que je m'en suis servi de test parce que mettre $_FILES directement dans la variable $fileAttached marchait pas.Ensuite en PHP, très peu de fonction sont à taille variable, Mail::send ne va donc pas détecter que $attached1 et $attached2 sont en fait deux autres fichiers.On dirait que la méthode Mail::Send n'accèpte qu'un fichier par défaut d'après la signature du code.J'ai un peu la flemme de te donner un code propre alors je t'en donne un qui est, pour un développeur, pas très propre. Et c'est pas testé non plus.Dans ta classe email, remplace ce code : if ($fileAttachment AND isset($fileAttachment['content']) AND isset($fileAttachment['name']) AND isset($fileAttachment['mime'])) { $message->attach(new Swift_Message_Attachment($fileAttachment['content'], $fileAttachment['name'], $fileAttachment['mime'])); } par le code suivant : if ($fileAttachment AND isset($fileAttachment['content']) AND isset($fileAttachment['name']) AND isset($fileAttachment['mime'])) { $message->attach(new Swift_Message_Attachment($fileAttachment['content'], $fileAttachment['name'], $fileAttachment['mime'])); } global $attached1; global $attached2; if ($attached1 AND isset($attached1['content']) AND isset($attached1['name']) AND isset($attached1['mime'])) { $message->attach(new Swift_Message_Attachment($attached1['content'], $attached1['name'], $attached1['mime'])); } if ($attached2 AND isset($attached2['content']) AND isset($attached2['name']) AND isset($attached2['mime'])) { $message->attach(new Swift_Message_Attachment($attached2['content'], $attached2['name'], $attached2['mime'])); } Et remet ton appel à Mail::Send comme je te l'ai mis.J'ai pas testé, donc pas sûr que ça marche. Link to comment Share on other sites More sharing options...
xtrem Posted August 9, 2010 Share Posted August 9, 2010 avec le code suivant <?php class Contact extends Module { //Configuration::get('PS_SHOP_EMAIL') function __construct() { $this->name = 'contact'; $this->tab = 'devis'; $this->version = '1.0'; parent::__construct(); $this->page = basename(__FILE__, '.php'); $this->displayName = ('devis'); $this->description = $this->l('Allows to contact the owner of the shop.'); } function install() { if (!parent::install()) return false; return true; } public function displayFrontForm() { global $smarty; $error = false; $confirm = false; if (isset($_POST['submitQuestion'])) { global $cookie; /* Fields verifications */ if(isset($_FILES['attached']['name'])) { $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']); } if(isset($_FILES1['attached']['name'] )) { $attached1['mime'] = $_FILES1['attached']['type']; $attached1['name'] = $_FILES1['attached']['name']; $attached1['content'] = file1_get_contents($_FILES1['attached']['tmp_name']); } if(isset($_FILES2['attached']['name'] )) { $attached2['mime'] = $_FILES2['attached']['type']; $attached2['name'] = $_FILES2['attached']['name']; $attached2['content'] = file_get_contents($_FILES2['attached']['tmp_name']); } if (!$cookie->logged && empty($_POST['email']) OR !$cookie->logged && empty($_POST['name']) ) $error = $this->l('You must fill all fields'); elseif (!$cookie->logged AND !Validate::isEmail($_POST['email'])) $error = $this->l('Invalid mail'); elseif (!$cookie->logged AND !Validate::isName($_POST['name'])) $error = $this->l('Invalid name'); else { /* Email generation */ $subject = ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('Message from contact form')); $templateVars = array( '{customer}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('A visitor')), '{name}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : Tools::safeOutput($_POST['name']) ), '{email}' => ($cookie->email ? $cookie->email : Tools::safeOutput($_POST['email']) ), '{tel}' => $_POST['tel'], '{type_appareil}' => $_POST['type_appareil'], '{marque_chassis}' => $_POST['marque_chassis'], '{modele_chassis}' => $_POST['modele_chassis'], '{marque_moteur}' => $_POST['marque_moteur'], '{modele_moteur}' => $_POST['modele_moteur'], '{type}' => $_POST['type'], '{annee_fabrication}' => $_POST['annee_fabrication'], '{code_numserie}' => $_POST['code_numeserie'], '{numero_chassis}' => $_POST['numero_chassis'], '{autres_infos}' => $_POST['autres_infos'] ); /* Email sending */ if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, $attached, NULL, dirname(__FILE__).'/mails/')) $error = $this->l('An error occurred'); else $confirm = $this->l('Your message has been sent successfully !'); } } $smarty->assign(array( 'validate_login' => $cookie->logged, 'cover' => $cover, 'errors' => $error, 'confirm' => $confirm, 'product' => $product, 'productLink' => $productLink )); return $this->display(__FILE__, 'contact.tpl'); } } ?> et les modifications effectuées dans la classe mail, seul le premier fichier des 3 est envoyé...Si je mets $attached, $attached1, $attached2 dans mail send, j'ai l'erreur : Erreur - La template mail suivante n'existe pas : fr/send_question.txt Link to comment Share on other sites More sharing options...
amaury Posted August 11, 2010 Share Posted August 11, 2010 Alors essaye de modifier la signature de Mail::Send pour intégrer $attached1 et $attached2. Link to comment Share on other sites More sharing options...
xtrem Posted August 11, 2010 Share Posted August 11, 2010 Je ne sais pas vraiment comment modifier la signature du send mail, j'ai fais ca mais quand je clique sur envoyer, on me dit Erreur - La template mail suivante n'existe pas : fr/send_question.txt <?php class Contact extends Module { //Configuration::get('PS_SHOP_EMAIL') function __construct() { $this->name = 'contact'; $this->tab = 'devis'; $this->version = '1.0'; parent::__construct(); $this->page = basename(__FILE__, '.php'); $this->displayName = ('devis'); $this->description = $this->l('Allows to contact the owner of the shop.'); } function install() { if (!parent::install()) return false; return true; } public function displayFrontForm() { global $smarty; $error = false; $confirm = false; if (isset($_POST['submitQuestion'])) { global $cookie; /* Fields verifications */ if(isset($_FILES['attached']['name'])) { $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']); } if(isset($_FILES1['attached']['name'] )) { $attached1['mime'] = $_FILES1['attached']['type']; $attached1['name'] = $_FILES1['attached']['name']; $attached1['content'] = file1_get_contents($_FILES1['attached']['tmp_name']); } if(isset($_FILES2['attached']['name'] )) { $attached2['mime'] = $_FILES2['attached']['type']; $attached2['name'] = $_FILES2['attached']['name']; $attached2['content'] = file_get_contents($_FILES2['attached']['tmp_name']); } if (!$cookie->logged && empty($_POST['email']) OR !$cookie->logged && empty($_POST['name']) ) $error = $this->l('You must fill all fields'); elseif (!$cookie->logged AND !Validate::isEmail($_POST['email'])) $error = $this->l('Invalid mail'); elseif (!$cookie->logged AND !Validate::isName($_POST['name'])) $error = $this->l('Invalid name'); else { /* Email generation */ $subject = ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('Message from contact form')); $templateVars = array( '{customer}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('A visitor')), '{name}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : Tools::safeOutput($_POST['name']) ), '{email}' => ($cookie->email ? $cookie->email : Tools::safeOutput($_POST['email']) ), '{tel}' => $_POST['tel'], '{type_appareil}' => $_POST['type_appareil'], '{marque_chassis}' => $_POST['marque_chassis'], '{modele_chassis}' => $_POST['modele_chassis'], '{marque_moteur}' => $_POST['marque_moteur'], '{modele_moteur}' => $_POST['modele_moteur'], '{type}' => $_POST['type'], '{annee_fabrication}' => $_POST['annee_fabrication'], '{code_numserie}' => $_POST['code_numeserie'], '{numero_chassis}' => $_POST['numero_chassis'], '{autres_infos}' => $_POST['autres_infos'] ); /* Email sending */ if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, $attached, $attached1, $attached2, NULL, dirname(__FILE__).'/mails/')) $error = $this->l('An error occurred'); else $confirm = $this->l('Your message has been sent successfully !'); } } $smarty->assign(array( 'validate_login' => $cookie->logged, 'cover' => $cover, 'errors' => $error, 'confirm' => $confirm, 'product' => $product, 'productLink' => $productLink )); return $this->display(__FILE__, 'contact.tpl'); } } ?> encore merci pour votre aide Link to comment Share on other sites More sharing options...
amaury Posted August 11, 2010 Share Posted August 11, 2010 C'est dans le fichier /classes/Mail.phpJe conseille d'ajouter les deux argument à la fin plutôt qu'après fileAttachment pour éviter les problème de retro-compatibilité.Je t'ai dit que les méthodes en PHP possède des argumets de taille fixe, il faut que tu ajoute deux arguments, dans le style : static public function Send($id_lang, $template, $subject, $templateVars, $to, $toName = NULL, $from = NULL, $fromName = NULL, $fileAttachment = NULL, $modeSMTP = NULL, $templatePath = _PS_MAIL_DIR_, $attached1, $attached2) Et l'appel à Mail::Send donne : Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, $attached, NULL, dirname(__FILE__).'/mails/'), $attached1, $attached2) Link to comment Share on other sites More sharing options...
xtrem Posted August 11, 2010 Share Posted August 11, 2010 J'ai effectué les modifications que tu m'a dis mais seul le premier fichier est envoyé et maintenant l'email est dans les courriers indésirables...voici mon code actuel de la classe mail: class Mail { static public function Send($id_lang, $template, $subject, $templateVars, $to, $toName = NULL, $from = NULL, $fromName = NULL, $fileAttachment = NULL, $modeSMTP = NULL, $templatePath = _PS_MAIL_DIR_, $attached1, $attached2) global $attached1; global $attached2; if ($attached1 AND isset($attached1['content']) AND isset($attached1['name']) AND isset($attached1['mime'])) { $message->attach(new Swift_Message_Attachment($attached1['content'], $attached1['name'], $attached1['mime'])); } if ($attached2 AND isset($attached2['content']) AND isset($attached2['name']) AND isset($attached2['mime'])) { $message->attach(new Swift_Message_Attachment($attached2['content'], $attached2['name'], $attached2['mime'])); } Link to comment Share on other sites More sharing options...
amaury Posted August 11, 2010 Share Posted August 11, 2010 C'est que Swift (le module externe à Prestashop qui permet d'envoyer des mails) ne permet d'envoyer qu'un fichier via la méthode $message->attach.Là je ne peux rien faire car j'y connais rien en Swift...Bonne continuation... Link to comment Share on other sites More sharing options...
xtrem Posted August 11, 2010 Share Posted August 11, 2010 tu parle du fais que je ne puisse pas envoyer plusieurs fichiers ou bien du fait que le mail soit considéré comme un spam? Link to comment Share on other sites More sharing options...
amaury Posted August 11, 2010 Share Posted August 11, 2010 L'envoi de plusieurs fichiers.Pour le spam, c'est assez aléatoire alors je sais pas, mais c'est probablement le même message répété plusieurs fois sur la même adresse qui a du temporairement déclencher ça. Link to comment Share on other sites More sharing options...
xtrem Posted August 11, 2010 Share Posted August 11, 2010 ok, dans ce cas je voudrais envoyer autant de mail que de pièces jointes, c'est à dire que si 3 images sont jointes au mail, je voudrais que lorsque l'on clique sur Envoyer, 3 mails soient envoyé contenant chacun une piece jointe.J'ai modifié le code de la façon suivante, je reçoi bien 3 mails mais seulement l'un d'entre eux possède une piece jointe, celle contenu dans $attached... <?php class Contact extends Module { //Configuration::get('PS_SHOP_EMAIL') function __construct() { $this->name = 'contact'; $this->tab = 'devis'; $this->version = '1.0'; parent::__construct(); $this->page = basename(__FILE__, '.php'); $this->displayName = ('devis'); $this->description = $this->l('Allows to contact the owner of the shop.'); } function install() { if (!parent::install()) return false; return true; } public function displayFrontForm() { global $smarty; $error = false; $confirm = false; if (isset($_POST['submitQuestion'])) { global $cookie; /* Fields verifications */ if(isset($_FILES['attached']['name'])) { $attached['mime'] = $_FILES['attached']['type']; $attached['name'] = $_FILES['attached']['name']; $attached['content'] = file_get_contents($_FILES['attached']['tmp_name']); } if(isset($_FILES1['attached']['name'] )) { $attached1['mime'] = $_FILES1['attached']['type']; $attached1['name'] = $_FILES1['attached']['name']; $attached1['content'] = file1_get_contents($_FILES1['attached']['tmp_name']); } if(isset($_FILES2['attached']['name'] )) { $attached2['mime'] = $_FILES2['attached']['type']; $attached2['name'] = $_FILES2['attached']['name']; $attached2['content'] = file_get_contents($_FILES2['attached']['tmp_name']); } if (!$cookie->logged && empty($_POST['email']) OR !$cookie->logged && empty($_POST['name']) ) $error = $this->l('You must fill all fields'); elseif (!$cookie->logged AND !Validate::isEmail($_POST['email'])) $error = $this->l('Invalid mail'); elseif (!$cookie->logged AND !Validate::isName($_POST['name'])) $error = $this->l('Invalid name'); else { /* Email generation */ $subject = ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('Message from contact form')); $templateVars = array( '{customer}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : $this->l('A visitor')), '{name}' => ($cookie->customer_firstname ? $cookie->customer_firstname.' '.$cookie->customer_lastname : Tools::safeOutput($_POST['name']) ), '{email}' => ($cookie->email ? $cookie->email : Tools::safeOutput($_POST['email']) ), '{tel}' => $_POST['tel'], '{type_appareil}' => $_POST['type_appareil'], '{marque_chassis}' => $_POST['marque_chassis'], '{modele_chassis}' => $_POST['modele_chassis'], '{marque_moteur}' => $_POST['marque_moteur'], '{modele_moteur}' => $_POST['modele_moteur'], '{type}' => $_POST['type'], '{annee_fabrication}' => $_POST['annee_fabrication'], '{code_numserie}' => $_POST['code_numeserie'], '{numero_chassis}' => $_POST['numero_chassis'], '{autres_infos}' => $_POST['autres_infos'] ); /* Email sending */ if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, $attached, NULL, dirname(__FILE__).'/mails/')) $error = $this->l('An error occurred'); if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, $attached1, NULL, dirname(__FILE__).'/mails/')) $error = $this->l('An error occurred'); if (!Mail::Send(intval($cookie->id_lang), 'send_question', $subject, $templateVars, Configuration::get('PS_SHOP_EMAIL'), NULL, NULL, NULL, $attached2, NULL, dirname(__FILE__).'/mails/')) $error = $this->l('An error occurred'); else $confirm = $this->l('Your message has been sent successfully !'); } } $smarty->assign(array( 'validate_login' => $cookie->logged, 'cover' => $cover, 'errors' => $error, 'confirm' => $confirm, 'product' => $product, 'productLink' => $productLink )); return $this->display(__FILE__, 'contact.tpl'); } } ?> Link to comment Share on other sites More sharing options...
amaury Posted August 12, 2010 Share Posted August 12, 2010 if(isset($_FILES1['attached']['name'] )) { $attached1['mime'] = $_FILES1['attached']['type']; $attached1['name'] = $_FILES1['attached']['name']; $attached1['content'] = file1_get_contents($_FILES1['attached']['tmp_name']); } if(isset($_FILES2['attached']['name'] )) { $attached2['mime'] = $_FILES2['attached']['type']; $attached2['name'] = $_FILES2['attached']['name']; $attached2['content'] = file_get_contents($_FILES2['attached']['tmp_name']); } Ce n'est pas $_FILES1 et $_FILES2 mais $_FILES['attached1'] et $_FILES['attached2'] ! Link to comment Share on other sites More sharing options...
kevin C. Posted August 18, 2010 Share Posted August 18, 2010 J'ai testé plusieurs fois ta méthode amaury pour cet envoi de pièce jointe mais rien a faire, je reçois toujours une pièce jointe de 1ko qui ne contiens rien. J'ai testé en téléchargeant le zip et en modifiant directement les archives .php et .tpl, avec et sans la limitation de taille... rien. Amaury, quand tu dis "Le champ est actuellement nommé “File Attachment”" c'est à propos du label du champs input uniquement ? Cela n'a aucune incidence sur l'envoi ?Question pour dangee, tu est bien en ps 1.3.1 ? Et ca tourne au poil ? Yaya tu as réussi au final ?D'avance merci, je patauge sec. Link to comment Share on other sites More sharing options...
amaury Posted August 18, 2010 Share Posted August 18, 2010 1.3.1.1 oui, File attachment est bien le label qui se présente sous la forme {l s='File attachment'} de façon à ce qu'il puisse être traduit.J'ai testé moi même cette méthode avec les fichiers que j'ai attachés au post. Je ne sais pas quoi dire de plus... Link to comment Share on other sites More sharing options...
pierre bernard Posted November 4, 2010 Share Posted November 4, 2010 Boujour, xtrem, est t il possible de mettre en ligne les fichier ou module ? Merci d'avance Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now