Jump to content

Champ upload dans le formulaire contact


Guest ikalangita

Recommended Posts

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

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

  • 3 weeks later...

Bonjour

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

rajouter 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

  • 1 month later...
  • 4 months later...

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

  • Like 1
Link to comment
Share on other sites

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

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

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


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ème


EDIT :

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

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

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

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

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 $attached

je 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

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

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

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

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

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

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

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

C'est dans le fichier /classes/Mail.php
Je 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

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

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

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

 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

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

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

  • 2 months 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...