alexandrieb Posted October 1, 2016 Share Posted October 1, 2016 (edited) Bonjour, j'ai une petite question... J'ai un bouton dans un module pour lequel j'aimerais ouvrir un popup. Donc j'ai un div caché et lors du clic, je modifie le style pour l'afficher. Jusque là, pas de soucis. Par contre, avant de l'afficher, j'aimais appliquer une fonction PHP afin d'actualiser les données de cette DIV... Ma fonction est dans le fichier php de mon module, tout comme le "content" qui contient affichera le bouton, la fonction js sur le onclick du bouton... Dois je forcément passer par ajax? Ou dois ajouter un <form> et ajouter une action sur le bouton qui permettra de mettre à jour les données... en espérer que le JS s'execute apres DSl je suis une débutante Edited October 6, 2016 by alexandrieb (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted October 1, 2016 Share Posted October 1, 2016 Oui dans votre cas, le plus simple est de passer en ajax: Au clic, appel ajax vers votre fichier php Celui-ci renvoie le contenu actualisé Javascript récupère le contenu et remplace l'existant dans la div la div est alors affichée Link to comment Share on other sites More sharing options...
alexandrieb Posted October 1, 2016 Author Share Posted October 1, 2016 Merci ndiaga, je regarde à cela Eolia et au niveau ajax, je peux rappeler la page elle même? ou je recopie la fonction dans un autre fichier phg Link to comment Share on other sites More sharing options...
Eolia Posted October 1, 2016 Share Posted October 1, 2016 On peut appeler la page mais c'est recharger tout pour pas grand chose. Perso je préfère utiliser un fichier séparé (ajax.php) Link to comment Share on other sites More sharing options...
alexandrieb Posted October 3, 2016 Author Share Posted October 3, 2016 Ok merci, je vais tester cela. Link to comment Share on other sites More sharing options...
alexandrieb Posted October 4, 2016 Author Share Posted October 4, 2016 (edited) Bonjour, J'ai trouvé ceci: var url = "controller/admin/AdminAjaxController.php"; $.post(url, MaFonction(data){ / Tu affiches le contenu dans ta div $('#popup').html(data); }); Ma fonction possède un paramètre, dois je remplacer data par mon parametre? Et comment puis je récupérer non pas de l HTML mais directement une variable array? Merci Edited October 4, 2016 by alexandrieb (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted October 4, 2016 Share Posted October 4, 2016 Non, du tout^^ Il s'ajoute. Mais vu que vous utilisez l'écriture la plus simple, les paramètres sont passés en GET donc ajoutez juste votre paramètre à l'url: var param = "votre_valeur_a_passer"; var url = "controller/admin/AdminAjaxController.php?param="+ param; Link to comment Share on other sites More sharing options...
alexandrieb Posted October 4, 2016 Author Share Posted October 4, 2016 Et comment puis je récupérer une variable array plutot que le .html? Link to comment Share on other sites More sharing options...
Eolia Posted October 4, 2016 Share Posted October 4, 2016 Pouvez répéter la question ? Je ne comprends pas. Vous mélangez datas et fonction js. Soit le contenu entier en html est contenu dans le data et vous l'ajoutez dans la div, soit vous récupérez diverses données dans votre data (qui est un array en json) et appliquez chacune au sein de la div suivant les id Si vous ne comprenez rien à ce que j'écris, il vaut mieux demander à quelqu'un qui maitrise un peu parce que sinon vous allez avoir du mal^^ Link to comment Share on other sites More sharing options...
alexandrieb Posted October 4, 2016 Author Share Posted October 4, 2016 En fait ma fonction va retourner une liste de clients Et je voudrais récupérer directement ce tableau contenant les différents clients afin de modifier les informations de la div par les informations clients (nom prénom,...) Link to comment Share on other sites More sharing options...
Eolia Posted October 4, 2016 Share Posted October 4, 2016 Ok, donc vous devez parser le tableau en js, et créer le resultat en html que vous injectez dans votre div. Pas d'autre solution, car envoyer le tableau directement dans la page html ne fera rien qu'afficher des données brutes sans mise en forme Link to comment Share on other sites More sharing options...
alexandrieb Posted October 4, 2016 Author Share Posted October 4, 2016 et si maintenant je veux faire la méthode html. Je dois faire un return dans ma fonction qui contiendra directement le html voulu? Si je passe par cette méthode, je peux insérer des méthode prestashop dans mon ajax.php comme le $this->l('Name') ? Link to comment Share on other sites More sharing options...
Eolia Posted October 4, 2016 Share Posted October 4, 2016 le $this se rapporte à l'objet de la classe en cours. Si vous instanciez une classe qui dépend de celle de votre module, oui Mais je ne suis pas sûr que vous maîtrisiez tout là... Link to comment Share on other sites More sharing options...
alexandrieb Posted October 4, 2016 Author Share Posted October 4, 2016 effectivement j'ai du mal, je débute. Avez-vous un exemple? Link to comment Share on other sites More sharing options...
Eolia Posted October 4, 2016 Share Posted October 4, 2016 Mieux, un cours https://openclassrooms.com/courses/un-site-web-dynamique-avec-jquery/le-fonctionnement-de-ajax Link to comment Share on other sites More sharing options...
alexandrieb Posted October 4, 2016 Author Share Posted October 4, 2016 En fait, mon soucis est que le data revient toujours vide... Meme si je met un simple echo "test"; dans mon fichier php... Apparemment, c'est parce que la requete est asynchrone Link to comment Share on other sites More sharing options...
Eolia Posted October 5, 2016 Share Posted October 5, 2016 Non rien à voir... Collez-moi le contenu de votre js et de votre php ici svp Link to comment Share on other sites More sharing options...
alexandrieb Posted October 5, 2016 Author Share Posted October 5, 2016 Mon fichier ajax.php <?php echo $_POST['id_customer']; ?> Mon script JS <script type="text/javascript"> function showPopup($this) { var name = $($this).attr("name"); var id_customer =name.substring(10); var url = "ajax.php?id_customer="+ id_customer; $.post(url, getCustomer(data){ $('#popup').html(data); }) $("#popup").show(); } </script> Merci pour votre aide Link to comment Share on other sites More sharing options...
coeos.pro Posted October 5, 2016 Share Posted October 5, 2016 Sinon tu peux étudier le code de modules qui contient de l'ajax comme https://www.prestashop.com/forums/topic/504883-big-data-r%C3%A9cup%C3%A9rer-des-donn%C3%A9es-sql-en-csv-facilement/ à mon avis c'est le chemin qui n'est pas bon (le var url) Link to comment Share on other sites More sharing options...
Eolia Posted October 5, 2016 Share Posted October 5, 2016 Pareil pour l'url^^ Là cela fait référence en relatif au fichier en cours, donc le controleur de la page Ecrivez le chemin en dur pour faire les tests var url ='http://mondomaine.com/mon_fichier_ajax.php'; Link to comment Share on other sites More sharing options...
alexandrieb Posted October 5, 2016 Author Share Posted October 5, 2016 (edited) Ok merci, je test cela de suite Dans la console de firebug, j'ai ce message: " Blocage d’une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://www.mondomaine.com/modules/monmodule/ajax.php?id_mail=4. Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant. Edited October 5, 2016 by alexandrieb (see edit history) Link to comment Share on other sites More sharing options...
Arnaud_69 Posted October 6, 2016 Share Posted October 6, 2016 Ah mais en fait tu veux faire une interrogation sur un autre serveur ! Sur le distant tu dois autoriser les requêtes autres que locales. Link to comment Share on other sites More sharing options...
Eolia Posted October 6, 2016 Share Posted October 6, 2016 Ce qui m'amuse, c'est qu'on nous donne des informations qui sont contradictoires au fur et à mesure où l'on avance... Si vous nous disiez vraiment ce que vous voulez faire, depuis où et vers où, on pourrait peut-être vous aider efficacement. En ajax, oubliez l'appel à un serveur hors-domaine, faites-le depuis votre php en curl ou file_get_content(). Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 Non le fichier est sur le même serveur... J'ai juste mis l'adresse du fichier en dur comme demandé avant. C'est justement ca que je comprends pas Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 Je viens de placer le fichier ajax.php dans mon dossier controller/admin/ et j'ai remis url="ajax.php?..." et je n'ai plus ce message d'erreur et le code renvoyer n'est plus empty mais une chaine sans rien... Link to comment Share on other sites More sharing options...
Eolia Posted October 6, 2016 Share Posted October 6, 2016 il n'y aurait pas un conflit http/https ? Link to comment Share on other sites More sharing options...
coeos.pro Posted October 6, 2016 Share Posted October 6, 2016 Vous avez bien changé mondomaine.com par le nom de votre domaine dans l'exemple donné par Eolia ? Pareil pour l'url^^ Là cela fait référence en relatif au fichier en cours, donc le controleur de la page Ecrivez le chemin en dur pour faire les tests var url ='http://mondomaine.com/mon_fichier_ajax.php'; Link to comment Share on other sites More sharing options...
Eolia Posted October 6, 2016 Share Posted October 6, 2016 Ou donnez-nous les vraies urls^^ Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 coeos.pro oui j'avais bien changé. Eolia Non, mais ici en ayant changé l'emplacement du fichier, plus d'erreur et il passe bien dans la fonction mais data = "" Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 ca marche enfin lol Maintenant je vais essayer d'utiliser les fonctions Db::getInstance de prestashop pour récupérer les infos dans la db Merci en tout cas Link to comment Share on other sites More sharing options...
coeos.pro Posted October 6, 2016 Share Posted October 6, 2016 Maintenant je vais essayer d'utiliser les fonctions Db::getInstance de prestashop pour récupérer les infos dans la db un peu de lecture : https://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/ c'est pour 1.5 mais ça n'a pas changé pour 1.6 ou 1.7 Link to comment Share on other sites More sharing options...
Eolia Posted October 6, 2016 Share Posted October 6, 2016 ca marche enfin lol Maintenant je vais essayer d'utiliser les fonctions Db::getInstance de prestashop pour récupérer les infos dans la db Merci en tout cas Expliquez aux suivants pourquoi ça marche maintenant, parce que là ce n'est pas évident à comprendre.. Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 Merci. J'avais deja lu et j'ai deja créer ma fonction mais apparemment. Il m'indique une erreur 500 et me spécifie que la connexion a la DB est close... J'ai créer mon select dans $sql et ma requete est $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); Dois je inclure un fichier spécifique à prestashop dans mon fichier ajax.php qui ne contient pour le moment qu'un <?php function getCustomer($id_customer) { $html = ''; if (isset($id_customer) && $id_customer != NULL) { $sql = 'SELECT `id_customer`,`email`,`firstname`, `lastname` FROM `'._DB_PREFIX_.'customer` WHERE id_customer = ' . $id_customer; $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); $html = ' <TABLE style="width:100%"> <TR> <TD style="width:25%">'.$this->l('Customers ID').'</TD> <TD style="width:25%">'.$results['id_customer'].'</TD> <TD style="width:25%">'.$this->l('Email').'</TD> <TD style="width:25%">'.$results['email'].'</TD> </TR> <TR> <TD style="width:25%">'.$this->l('Lastname').'</TD> <TD style="width:25%">'.$results['lastname'].'</TD> <TD style="width:25%">'.$this->l('Firstname').'</TD> <TD style="width:25%">'.$results['firstname'].'</TD> </TR> </TABLE>'; } return $html; } echo getCustomer($_POST["id_customer"]); ?> Link to comment Share on other sites More sharing options...
coeos.pro Posted October 6, 2016 Share Posted October 6, 2016 6. La méthode executeS($sql, $array = true, $use_cache = 1) Cette méthode exécute la requête SQL donnée et charge l’ensemble des résultats qu’elle retourne dans un tableau multidimensionnel. Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 Expliquez aux suivants pourquoi ça marche maintenant, parce que là ce n'est pas évident à comprendre.. Cela fonctionne car le chemin de l'url n'était pas correcte... Il prennait un fichier ajax.php propre à prestashop et pas celui que j'avais créer... comme quoi un manque d'attention fait beaucoup Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 6. La méthode executeS($sql, $array = true, $use_cache = 1) Cette méthode exécute la requête SQL donnée et charge l’ensemble des résultats qu’elle retourne dans un tableau multidimensionnel. J'ai utilisé execute mais erreur 500 connection close Link to comment Share on other sites More sharing options...
Arnaud_69 Posted October 6, 2016 Share Posted October 6, 2016 6. La méthode executeS($sql, $array = true, $use_cache = 1) Cette méthode exécute la requête SQL donnée et charge l’ensemble des résultats qu’elle retourne dans un tableau multidimensionnel. Il a dit "un tableau", un array, donc un truc avec des dimensions à parcourir. Et qui dit parcourir, dit foreach... Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 Il a dit "un tableau", un array, donc un truc avec des dimensions à parcourir. Et qui dit parcourir, dit foreach... Ici le soucis vient pas du foreach mais apparemment la connection avec la db ne se fait pas Link to comment Share on other sites More sharing options...
Arnaud_69 Posted October 6, 2016 Share Posted October 6, 2016 le $html dans la fonction ne peut pas bien fonctionner. Tu fais un executeS et après un echo sans foreach, donc pas bon. Si tu as une erreur 500, regarde le dump dans les logs, ça aidera, il y a peut être une erreur ailleurs. Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 J'ai refait un execute simple car le resultat sera unique, pas besoin de tableau multi puisque j'ai un where id_customer Je vais regarder le dump Link to comment Share on other sites More sharing options...
Eolia Posted October 6, 2016 Share Posted October 6, 2016 Vous n'avez vraiment pas du lire la doc... Execute simple ne veux rien dire^^ Il y a 2 méthodes Prestashop: Execute et ExecuteS La 1ère pour les select, la seconde pour les action (insert, update, delete, etc...) Le ExecuteS renvoie TOUJOURS un tableau, même s'il n'y a qu'une valeur autrement il faut utiliser getValue() Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 J'ai survolé la doc Mais j'avance ^^ Ici j'ai ajouté un require '../../config/config.inc.php'; Et maintenant, je regarde pour utiliser les traductions du module dans mon fichier ajax.php et pour ce faire, je dois récupérer la variable $this du module Link to comment Share on other sites More sharing options...
Arnaud_69 Posted October 6, 2016 Share Posted October 6, 2016 Il y a une astuce pour passer des traductions dans un ajax... Si tu pêches, je te la livre, mais je laisse d'abord chercher un peu ! Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 ok ici je suis entrain de chercher Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 J'ai trouvé ceci, J'ai finalement trouvé la solution :1. DAns le fichier Ajax faire un : $module=new NomDeMonModule();2. Puis faire $module->l('Texte à traduire','nomdemonmodule'); Je teste ^^ Link to comment Share on other sites More sharing options...
Arnaud_69 Posted October 6, 2016 Share Posted October 6, 2016 (edited) Bravo ! Comme dirait l'autre : Charles Trenet, mais le petit poucet Edited October 6, 2016 by Arnaud_69 (see edit history) Link to comment Share on other sites More sharing options...
alexandrieb Posted October 6, 2016 Author Share Posted October 6, 2016 J'ai juste du ajouter un require avec le fichier de mon module et c'est bon ^^ Maintenant un peu de css pour rendre cela plus joli et c'est fait Un grand merci à tout le monde pour votre aide 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