Jump to content

Bllidz

Members
  • Posts

    197
  • Joined

  • Last visited

Posts posted by Bllidz

  1.  

    Bonjour,

    je suis sur la création d'un module qui a pour but d'envoyer un mail à une adresse email. 2 types de mails peuvent être envoyé soit un AR soit la facture. j'ai une table avec l'email de compta et l'email a qui je dois envoyé l'ar. Mais je bloque avant car je mets mon email en brut histoire de tester. 

    "Possible de retrouver des erreurs de code"

    voici le rendu du tpl. 

    image.png.6e92650ef0c5477b08037629f4f90b00.png

     

    Ma fonction qui est censé envoyer un mail

     public function send_mail1($id_order,$typeMail){
            $order = new Order($id_order);
            $customer = new Customer((int)$order->id_customer);
            $id_customer=((int)$order->id_customer);
            $templateVars = array(
                '{firstname}' => $customer->firstname,
                '{lastname}' => $customer->lastname,
                '{id_order}' => $order->id,
                '{order_name}' => $order->getUniqReference(),
            );
            $id_lang = $order->id_lang;
            $id_lang = 0 ;
            if ($typeMail == "AR") {
                $subject = $this->l('Accusé de réception pour la commande');
                $template_name = 'mail_ar';
                $mail = Db::getInstance()->getValue('SELECT email_ar FROM`' . _DB_PREFIX_ .'jv_mail` where id_customer = '. (int)$id_customer);
                $mail1 = "[email protected]";
                
                $file_attachment=null ;
            }
            if ($typeMail == "Compta") {
                $subject = $this->l('Facture de la commande');
                $template_name = 'mail_compta';
                $mail = Db::getInstance()->getValue('SELECT email_compta FROM`' . _DB_PREFIX_ .'jv_mail` where id_customer = '. (int)$id_customer);
                $mail1 = "[email protected]";
                //$file_attachment['content'] = file_get_contents(_PS_ROOT_DIR_.'/pdf/ar.pdf'); //Chemin du fichier
                $file_attachment=null ;
            }
           
            Mail::Send(
                $id_lang,
                $template_name,
                $subject,
                $templateVars,
                $mail1,//mail du destinataire
                null,
                null,
                null,
                null,
                null,
                dirname(__FILE__) . '/mails/'
            );
        }

     

    Mon js 

     

         $('button.submitSendMail').unbind('click').click(function(e) { 
                e.preventDefault(); 
                //var email =$('#emailComptable').val();
                //alert(email);
                var typeMail =  document.querySelector('input[name=typeMail]:checked').value;
    
                //alert(typeMail);
                query = 'ajax=1&token='+token+'&action=envoi&id_customer='+id_customer+'&typeMail='+typeMail+'&id_order='+id_order+'&';
                $.ajax({ 
                    type:'POST', //Methode POST
                    url: "../modules/jv_mails/ajax_jv_mails.php", 
                    cache: false, 
                    dataType: 'json', 
                    data : query, 
                    success: function(data) 
                    { 
                        if (data.result) 
                        { 
                            console.log('ok'); 
                        } 
                        else     
                            jAlert(data.error); 
                    } 
                }); 
                return false; 
            }); 

    et mon fichier ajax_mon_module 

    
    if (Tools::getValue('action') == 'envoi')
    {
      //$id_customer = Tools::getValue('id_customer');
      $typeMail = Tools::getValue('typeMail');
      $id_order=Tools::getValue('id_order');
      $j->send_mail1($id_order,$typeMail);
      
    }

    et l'erreur en question 

    image.png.2e83102413195b3c99a75ef32faabbcd.png

    Merci pour tout aide d'avance

    Je suis sous prestashop 1.7.6.9

  2. Salut,

    Si ps_mode_dev est à true et que tu as sauvegardé alors  tu es bien en mode debug ça c'est sûr ( tu peux le vérifier dans le back) . Après avoir une page blanche c'est pas le mode debug qui va t'afficher l'erreur et dans quel fichier, elle se trouve. 

    Tu peux toujours vider le cache manuellement , supprimé le contenu du dossier cache ( dossier prod et dev) dans var/cache. 

    Sinon as tu regardé dans ta console si il y'a une ou des erreurs ?

     

    Jérémy 

  3. Bon le problème vient de customer à priori, vu que j'ai mit le tpl du hookDisplayAdminCustomers dans le hookDisplayAdminOrder. 

    Car dans le admin js j'ai mit une alert au clique du bouton:

    $(document).ready(function() {
        $('button.submitAdd_compta').click(function(e){
            e.preventDefault(); 
            alert("je suis le test du module");
            var email =$('#emailComptable').val();
            
            var data= "?action=updateEmail&email="+email+"&id_customer="+id_customer+"&";
            
            $.post("'.$this->context->shop->physical_uri.$this->context->shop->virtual_uri.'modules/'.$this->name.'/ajax_'.$this->name.'.php", data);
        });
    });

    image.png.2c773f9aab2a63631edaaf9fcd1f3041.png 

    et ça s'affiche bien...

    Sauf que après avoir cliqué sur le ok j'ai ça 

    image.png.8db38f1412cd1492122b10b46d356267.png

    je ne sais pas pourquoi le AdminDashboard est appelé ? et au dessus c'est la redirection qui est dans le Post mais qui n'arrive pas à ce charger

    As tu une idée de pourquoi le controller de dashboard est appelé et pourquoi aussi du coup y'a une erreur de Jquery seulement dans le client  ? 

    Merci par avance :) 

     

    jv_mails.zip

  4. On 7/12/2021 at 11:54 AM, caroled01 said:

    Bonjour,

    La saisie du n° de téléphone est bien rendue obligatoire mais par contre certains caractères non numériques sont acceptés (comme par exemple "--").

    Comment faire pour n'accepter que des chiffres ?

    Merci par avance si vous avez une solution !

    Bone journée :)

    Salut, 

    Il faut aller dans la classe Address.php et changer le type du phone_number 

    Edit: bien sur faire un override ;) 

     

    CDT

  5. Update: 

    J'ai du coup rajouté cette partie:

    '<script type="text/javascript">
                $(function() {
                    $('button.submitadd_compta').click(function(e) { 
                      e.preventDefault(); 
                      var email =$('#emailComptable').val();
                      var data= "?action=updateEmail&email="+email+"&id_customer="+id_customer+"&";
                      $.post("'.$this->context->shop->physical_uri.$this->context->shop->virtual_uri.'modules/'.$this->name.'/ajax_'.$this->name.'.php", data);
                  });
                });
            </script>'

    dans un document texte et que je mets dans la variable grace à un :

    $html = file_get_contents('./txt_varHtml.txt');

    Mais le problème est toujours là, toujours pas de Jquery après ce n'est peut-être pas la bonne méthode pour la variable Html d'y mettre ce texte.

    Je vais me pencher dessus aujourd'hui pour résoudre ce problème car j'étais sur autre chose ces derniers jours et pas vraiment eu le temps de m'y plonger dedans.

    CDT 

  6. 19 hours ago, RF47 said:

    Bonsoir doekia,

    Merci pour cette réponse. Avant de faire une erreur, je voudrais être sûr de bien comprendre.

    Dans filezilla je vois ce qui est en pièce jointe. Si je ne me trompe pas la démarche serait la suivante :

    - je conserve le www
    - je copie son contenu dans un www/sous-repertoire
    - je crée une nouvele page index.php ou index.html dans www et je mets par exemple un lien vers le index.php initial qui se trouvera dans www/sous-repertoire

    Est ce correct ?

    ps : puis je supprimer le dossier tmp ? que faire de .ovhconfig ?

    Merci d'avance !!!

    Capture d’écran 2021-07-07 à 19.38.42.png

    Bonjour RF47 

    C'est ça , vous codez votre page index.html que vous mettez dans dans www donc ce sera la page qui s'ouvrira quand vous irez sur www.monsite.com et il suffit dans votre index.html de mettre une redirection vers le sous répertoire.

    exemple de code a mettre dans l'index.html pour rediriger vers votre autre page 

    <head>
    	<meta http-equiv="refresh" content="5; url='http://monsite.com/sous-repertoire/index.php'" />
     </head>

     

    • Thanks 1
  7. 4 hours ago, Julien said:

    Hello,

     

    Je ne sais pas trop pourquoi tu n'as pas de JQuery , mais personnellement lorsque j'utilise un petit bout de JQuery j'utilise une fonction dans le contrôleur de mon module:

        /**
         * Header of admin configuration page, for drag and drop sort
         */
        public function getHeaderHTML()
        {
            if (Tools::getValue('controller') != 'AdminModules' && Tools::getValue('configure') != $this->name) {
                return;
            }
    
            $this->context->controller->addJqueryUI('ui.sortable');
            /* Style & js for fieldset 'slides configuration' */
            $html = '<script type="text/javascript">
                $(function() {
                    $('button.submitadd_compta').click(function(e) { 
                      e.preventDefault(); 
                      var email =$('#emailComptable').val();
                      var data= "?action=updateEmail&email="+email+"&id_customer="+id_customer+"&";
                      $.post("'.$this->context->shop->physical_uri.$this->context->shop->virtual_uri.'modules/'.$this->name.'/ajax_'.$this->name.'.php", data);
                  });
                });
            </script>';
    
            return $html;
        }

     

    Et j'appelle cette fonction avant le contenu de ma page dans ta fonction getContent():

    public function getContent()
        {
    
            // RESTE DE TON CODE
           
            return $this->getHeaderHTML()
                . $this->output
                . $this->renderForm();
        }

     

    J'espère que ca fera l'affaire !

    Bonne journée

     

    EDIT: J'ai téléchargé ton module mais je n'ai pas assez de temps pour regarder en détails, essais avec la solution au dessus ca devrait fonctionner ! Et pense à indenter ton code c'est très indigeste haha

    Si tu compte diffuser ton module il faut toujours éviter d'écrire le nom de tables en dure comme "ps_mail" mais toujours utiliser le préfix qui peut changer: '. _DB_PREFIX_ .'mail :)

    Merci , je test ce soir chez moi et je te redis en éditant ce message :) 

    Quote

    J'ai téléchargé ton module mais je n'ai pas assez de temps pour regarder en détails, essais avec la solution au dessus ca devrait fonctionner ! Et pense à indenter ton code c'est très indigeste haha

    Pour l'indentation je sais.. c'est mon problème 😂même mes profs me le disent.. je vais tester ça ce soir 

    Après a vu d'oeil va y'avoir un problème de guillemet sur le $html mais bon ça je vais m'amuser pendant 5 minutes avec. 

     

    Quote

    Si tu compte diffuser ton module il faut toujours éviter d'écrire le nom de tables en dure comme "ps_mail" mais toujours utiliser le préfix qui peut changer: '. _DB_PREFIX_ .'mail :) 

    Bonne remarque tu fais bien de me le dire. je vais y apporter tout ces petits changements et j'éditerai ce post afin de savoir si tout fonctionne ou non ;) 

    En tout cas merci à toi Julien 

  8. Bonjour Julien, 

     

    Merci de ton aide, j'ai ajouté l'appel du js et le hook dans l'installation. 

    J'ai repris ton aide pour le js pour que ça donne 

    $('button.submitadd_compta').click(function(e) { 
    
        e.preventDefault(); 
    
        var email =$('#emailComptable').val();
        
        var data= "?action=updateEmail&email="+email+"&id_customer="+id_customer+"&";
        
        $.post("'.$this->context->shop->physical_uri.$this->context->shop->virtual_uri.'modules/'.$this->name.'/ajax_'.$this->name.'.php", data);
        
      
     
    });

    j'ai ajouté un fichier ajax_jv_mails.php a la racine comme indique le chemin dans le js 

    Mais j'ai du coup une erreur dans ma console 

    image.png.84f3fe854dcdbfb8e2e21937bbb39490.png
    Qui correspond à cette ligne 

     

     $('button.submitadd_compta').click(function(e){

     

    J'ai vu que c'était une erreur du a un manque de jquerry 

    Est-ce que tu aurais une idée ? 

    ps: je glisse le zip du module à son stade pour que ce soit plus simple 

    jv_mails.zip

     

     

  9. 7 minutes ago, Eolia said:

    Ben non car ça n'empêche pas d'envoyer un formulaire en post qui sera géré par le contrôleur.

    Cacher un lien n'empêche pas d'y accéder car https://www.votre_site/index.php?controller=authentication renverra bien le formulaire d'inscription et d'autre part vous n'empêchez pas la création de compte lors du processus de commande^^

    Certes c'est vrai, vous avez raison. 

    Après dans mon optique je me disais que pour trouver le lien si les clients en question n'y connaissent rien, c'est une tache compliquée. Cependant ma "solution" est vrai qu'elle n'est pas correct après réflexion :(  

  10. Bonjour, 

     

    Je suis actuellement entrain de développer mon 1er module (version 1.7.6.9). J'ai regardé la doc , et quelques tuto 

    https://newslang.ch/blog/guide-complet-creer-module-prestashop-1-7/

    https://pierrebelin.fr/blog/guide-complet-creer-module-prestashop/

     Mon module a /aura pour but d'envoyer par mail un document pré-défini à l'email défini. Je m'explique, ce module créer une nouvelle table dans la bdd, qui stockera l'email et le nom , exemple je souhaite envoyer la facture a la comptable de mon client, il faudra d'abord que j'aille enregistré l'email de la comptable lié à ce client et ensuite aller dans les détails de la commande et sélectionner l'email et cliquer sur envoyer. 

     Donc pour ce faire  j'ai greffé mon module à plusieurs hook , qui sont : 

     

    'displayAdminOrder' et 'displayAdminCustomers'.

    Dans le displayAdminCustomers, c'est ici que je souhaite entrer les emails des clients autre que leur email de compte (ex: comptable, ect...) 

    et dans le displayAdminOrder c'est ici que je sélectionnerai l'email que je souhaite et cliquer sur envoyer qui enverra selon l'email soit l'ar soit la facture ect.. 

    Pour l'instant je bloque,

    J'ai dans  dans mon hook AdminCustomers l'appel d'un tpl

    public function hookDisplayAdminCustomers($params)   
        {
          return $this->display(__FILE__, 'customer.tpl');   //affiche mon tpl
        }

     Dans ce tpl il y'a 

    ce qui me permet d'afficher le block pour pouvoir enregistrer l'email de la comptable

    <div style =" margin-left:15px;box-shadow: 2px 2px 8px 0 rgba(0,0,0,.2);
        background: #fff;
        padding: 1.563rem 1.25rem;
        margin-bottom: 1.563rem;">
    <br>
    
    <h4>email de la comptable: </h4>
    <td><input type="text" name="emailComptable" class="emailComptable" id="emailComptable" value="[email protected]" style="display : inline-block; width:80%;" /> <br/> <br/>
    <button type="button" class="btn btn-default submitadd_compta"  style="display : inline-block; width:80%; margin-left: 2%;" > 
    <i class="icon-ok"></i>
    {l s='Enregister' d='Admin.Actions'}
    
    </button> 
    </td>
    <div>

    Et du coup l'affichage donne 

    image.png.0eabbdf4a83c411d25ff2d9d1c631f65.png

    L'affichage bon je changerai tout ça plus tard.

    Donc la actuellement je souhaiterai que quand je clique enregistrer l'email écrite aille dans ma BDD.

    donc pour ce faire

    J'ai crée un fichier Comptable.js qui se trouve dans modules/jv_mails/views/js

    /*Modif Jérémy*/ 
    $('button.submitadd_compta').unbind('click').click(function(e) { 
    
        e.preventDefault(); 
    
        var emailComptable =$('#emailComptable').val();
        
        
        query = 'ajax=1&token='+token+'&action=add_compta&id_customer='+id_customer+'&emailComptable='+emailComptable+'&'; //envoi de l'id_customer par tokeb
    
        $.ajax({ 
            type:'POST', //Methode POST
            url: admin_order_tab_link, 
            cache: false, 
            dataType: 'json', 
            data : query, 
            success: function(data) 
            { 
                if (data.result) 
                { 
                    console.log('ok'); 
                } 
                else     
                    jAlert(data.error); 
            } 
        }); 
        return false; 
    }); 
    
    //}
     /*Modif Jérémy*/ 

    et un fichier AdminComptable.php dans modules/jv_mails/controllers/admin 

    qui lui comporte

        public function ajaxProcessadd_compta()
    	{
    		$id_customer = Tools::getValue('id_customer');
    
    		$mail_compta =Tools::getValue('mail_compta');
            return $sql= Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'jv_mail` (id_customer,mail_compta) VALUES
            ('.$id_customer.''.$mail_compta.')' ; //Requete sql afin d'insert
            
    		
    		var_dump($id_customer);
    		var_dump($mail_compta);
    
    		die();
    
    	}

    Cependant je ne vois pas comment faire le lien entre mon tpl et mon js et controller . afin que quand j'appuis sur mon Bouton ça exécute cette fonction et envoie les infos avec le js.   

    Merci de toute aide pour ce module (et à la fin je le mettrai a disposition de tous pour ce qui ça intéresse :) )  

    Ma version 1.7.6.9

    • Like 1
  11. 14 hours ago, Bornat said:

    Bonjour et merci pour votre réponse.

    En effet, j'ai désactivé et supprimé mes modules.

    Tout remarche. Je vais les tester 1 par 1. 

    C'est des modules que je viens d'acheter.

    Cordialement 

    Après avoir identifié le module qui cause ce problème n'hésitez pas à contacter le développeur de ce module afin qu'il puisse vous aidez.

     

    CDT

  12. 23 hours ago, floretie said:

    Bonjour,
    Même problème également :PS 1.7.6.8, installation de mail alert, les clients recoivent bien les confirmations de commande et autres messages envoyés depuis le FO ou le BO. En revanche, rien côté marchand. J'ai un email associé à mon domaine, j'ai fais le test d'email PS qui est ok, c'est bien le seul que je recoive! Pour le reste, je ne recois même pas les messages de demandes de clients ou autres. Je dois continuellement vérifier sur le BO si de nouveaux messages sont arrivés. C'est vraiment problématique.
    Une idée d'autre piste de recherche, ou quelqu'un pourrait-il m'aider? Un développeur dispo?
    Merci d'avance.

    Bonjour, 

    il suffit d'override la classe mail.php  et d'y ajouter 

    $bbc = 'votre-email';

    afin d'avoir les mails en copie. 

    Si vous avez besoin de plus d'informations ou si vous avez  une question hésité pas :) 

    CDT

    Jérémy

  13. 4 minutes ago, Befstream said:

    Mon dossier thèmes s'était deplacé dans le dossier tools juste au dessus. 

    J'ai donc ramené mon dossier thèmes à la racine et mon site remarche à nouveau.

    je te remercie, et te souhaite une bonne soirée

    Aucun problème :) 

    ps: penses à éditer ton topic et rajouter Résolu devant pour aider une future personne ayant le même problème ;) 

     

    Bonne soirée à toi également ! 

  14. 35 minutes ago, Befstream said:

    Bonjour merci pour votre réponse,

    Les droits de mes dossiers sont tous en 755 ainsi que mes fichiers.

    Oui c'est le thème boostrap de départ.

    Je suis chez ovh, voici mon site : https://prometys.fr/

    Peux-tu me dire si dans /thèmes tu as "default-bootstrap" et si les droits sont bien en 755

    Si tu n'as pas ce dossier le problème vient de là 

    CDT

  15. 17 hours ago, doekia said:

    En effet j'avais zappé que la syntaxe :: n'est pas admise. Il faut enregistrer la fonction en extension Twig

    https://stackoverflow.com/questions/32920217/how-to-call-static-function-in-symfony2-twig-template#46636220

     

    En même temps ton use case (requête SQL) devrait être pensé ailleurs qu'en view (twig)

    Bon je reviens car j'ai été regarder ta solution , et regarder sur le net pour comprendre comment marche la solution cependant je ne comprends pas tout.

    Donc la solution pour créer un filtre est ça 

    
    $viewVars['MyStaticClass'] = new MyStaticClass();
    // ...
    $html = $twig->render('myTemplate.html.twig', $viewVars);

    et dans le fichier twig :

    {{ MyStaticClass.getData() }}

     

    Cependant je ne vois pas ou faut mettre la première partie, car cette solution utilise la fonction render() de $twig cependant je n'ai pas d'objet portant ce nom. Dois mettre dans ma classe product.php  ? ou dois-je créer une fonction si oui comment est elle appelé ? 

    
    $viewVars['prod'] = new Product();
    // ...
    $html = $twig->render('Product.html.twig', $viewVars);
    
    
    et dans le fichier product.html.twig
    {{ prod.mafonction(id_order) }}

     

    Merci de ton aide 

  16. 1 hour ago, doekia said:

    En effet j'avais zappé que la syntaxe :: n'est pas admise. Il faut enregistrer la fonction en extension Twig

    https://stackoverflow.com/questions/32920217/how-to-call-static-function-in-symfony2-twig-template#46636220

     

    En même temps ton use case (requête SQL) devrait être pensé ailleurs qu'en view (twig)

    Merci je regarde ça demain matin, je reviens si besoin.

    Dans un sens tu as raison mais sachant que je refais juste tout ce que j'avais fait en 1.7.6.9 sur la partie commande qui a migré en symfony. Après je me prends certainement la tête et il y'a sûrement mieux a faire dans un sens. :D 

    CDT 

  17. 23 minutes ago, doekia said:

    Si la fonction est statique, comme en smarty {{Product::mafonction($id_order_detail)}}

    Salut doekia, 

     

    Merci de ta réponse cependant j'avais déjà essayé et ça me retournait une erreur

    l'erreur en question :

     image.png.2758d09d24a0dd9c4edf6a1d60c695f9.png

     

    (j'ai mit un paramètre brut qui et 14 pour tester)

    le td du fichier product.html.twig qui se trouve dans src/PrestaShopBundle/Resources/views/Admin/Sell/Order/Order/Blocks/View

    <td >{{Product::maFonction(14)}}</td>

    et ma fonction Product.php dans  override/classes

    
    class Product extends ProductCore
    {
    
         /*Modif jérémy*/
        
          public static function maFonction($id_order_detail) 
         { 
             return Db::getInstance()->getvalue('SELECT date_liv FROM `' . _DB_PREFIX_ . 'order_detail`
     
                 WHERE  `id_order_detail` = '. (int) $id_order_detail) ;          
          } 

    (c'est une simple requete sql) 

    Je ne sais pas si le code aide a mieux comprendre l'erreur car de ce que je comprends c'est qu'il n'aime pas les :: après Product 

    Et j'ai bien vidé le cache également car on ne sait jamais 

     

  18. Bonjour,

    Je créer actuellement une boutique en 1.7.7.4 et je rencontre actuellement un problème. Ce problème est mon manque de connaissance sur symfony. Fin bon je m'explique je souhaite faire appel a une fonction ce trouvant dans ma classe de Product qui est en override, ceci étant dit je souhaite que cette fonction s'affiche sur un bloc qui se trouve dans order.Le fichier en question est product.html.twig mais vu que ce n'est pas un tpl je ne peux pas faire un simple

    {Product::mafonction($id_order_detail)}

    donc j'ai été faire mes recherches afin de trouver une solution.. j'ai vu qu'il n'était pas "possible" directement d'appeler une fonction php dans un fichier twig et que la syntaxe pour appeler une fonction est la suivante

    {{mafonction(Parametre)}}

    Mais du coup ce qui semble logique il ne trouve pas ma fonction qui se trouve dans la classe Product.php

    Alors j'aimerai savoir si quelqu'un connaitrait la solution afin que je puisse appeler ma fonction dans le fichier twig 

     

    Merci d'avance 

     

    ma version ps 1.7.7.4

×
×
  • Create New...

Important Information

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