stephforum Posted April 24, 2013 Share Posted April 24, 2013 (edited) Bonjour, je coince sur une requête sql , voici ce que je cherche à faire . j'ai modifié le module printlabel de facon à avoir deux liens. 1 pour l'etiquette de transport (ça c'est d'origine)et l'autre pour une étiquette reprenant les infos du colis (n° de commande, marque du produit, référence produit et quantité. le seul probleme, c'est que je n'arrive pas a construire la ligne qui appel la table "order_detail" en partant de la table "order" déjà présente dans le module (je ne sais pas si je suis bien clair là ! ) Voici ce qui existe actuellement if(intval($_GET["id_order"]) > 0) { $order = new Order(intval($_GET["id_order"])); $customer = new Customer($order->id_customer); $ad = new Address(intval($order->id_address_delivery)); $products = $order->getProducts(); et voici ce que j'ai fait mais, j'ai une erreur 500 if(intval($_GET["id_order"]["id-order-detail"] ) > 0) { $order = new Order(intval($_GET["id_order"])); $produit = new Order_detail(intval($_GET["id_order_detail"])); $customer = new Customer($order->id_customer); $ad = new Address(intval($order->id_address_delivery)); $products = $order->getProducts(); J'ai l'impression que je cherche à faire compliqué alors que cela est surement simple Est ce que quelqu'un peu me dire quelle erreur je fait ? J'ai oublié quelques chose ou ce n'est pas du tout comme ça qu'il faut faire ? Merci beaucoup pour votre aide Edited April 26, 2013 by stephforum (see edit history) Link to comment Share on other sites More sharing options...
stephforum Posted April 26, 2013 Author Share Posted April 26, 2013 Personne n'a d'idée ??? Un conseil ???? Je pense que c'est un problème de jointure mais je n'arrive pas à la réaliser Link to comment Share on other sites More sharing options...
Vinum Posted April 27, 2013 Share Posted April 27, 2013 Bonjour, Tu n'as pas besoin de id_order_detail, toutes les infos sont soit dans $order soit dans $products mais tu peux avoir les details produits de la commande avec : $products = $order->getProductsDetail(); Normalement avec tout ça tu devrais récuperer toutes les infos voulues. Link to comment Share on other sites More sharing options...
stephforum Posted April 27, 2013 Author Share Posted April 27, 2013 Merci Vinum pour ton aide , J'avais bien essayé cette solution mais, j' arrive toujours pas a faire affiché le résultat Doit me manqué un détail.. Link to comment Share on other sites More sharing options...
Vinum Posted April 27, 2013 Share Posted April 27, 2013 après avoir envoyé les infos que tu désires, il faut aller dans le template de l'email et mettre tes infos comme cela pour les afficher : {firstname} Link to comment Share on other sites More sharing options...
stephforum Posted April 27, 2013 Author Share Posted April 27, 2013 C'est pas un email que je veux envoyé, c'est juste créer des étiquettes comprenant le détail des produits commandés l'étiquette comprend : Le numéro de commande ( ça c'est bon) le nom du client ( ça c'est bon) la référence article , le nom de l'article, la quantité commandé) ça, je bloque Link to comment Share on other sites More sharing options...
Vinum Posted April 27, 2013 Share Posted April 27, 2013 Ok désolé. Donc : $products = $order->getProductsDetail(); foreach($products as $product) { $reference=$product->reference; $product_name=$product->product-name; $product_quantity=$product->product_quantity; } Link to comment Share on other sites More sharing options...
stephforum Posted April 27, 2013 Author Share Posted April 27, 2013 merci Vinum pour ton aide , j'ai testé et meme modifié en m'en inspirant mais, ça marche pas Link to comment Share on other sites More sharing options...
Vinum Posted April 27, 2013 Share Posted April 27, 2013 Bah si ça doit marcher. C'est comme ça que je fais pour récupérer les infos des produits d'une commande. Vérifies que tu récupères bien les données. Fait un print_r($product); Ensuite, si les données sont bien récupérés, il te faut savoir comment les utiliser pour la création de l'étiquette. Link to comment Share on other sites More sharing options...
stephforum Posted April 27, 2013 Author Share Posted April 27, 2013 (edited) j'ai fait le print_r($product); ca affiche bien tout le contenu concernant le produit commandé. c'est bon signe j'appel l'affichage de cette maniere : $pdf ->Write(5,"Reférence: $reference "); Tout les autres champs ( n] de commande, adresse) sont appelé de cette manière et ca marche. doit y avoir une autre façon de faire alors ? Edited April 27, 2013 by stephforum (see edit history) Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 Encore merci Vinum , J'ai réussi a faire affiché les valeurs que je recherchais grâce à tes explications Cela ne s'affichait pas car il faillais que cette partie soit sous cette forme : $reference=$product['product_reference']; me reste plus qu'a faire la mise en forme Link to comment Share on other sites More sharing options...
Vinum Posted April 28, 2013 Share Posted April 28, 2013 Bonjour, La fonction ou tu récupères les infos produits est elle écrite dans le même fichier que la fonction ou tu écrits le pdf ? Si non, il faut envoyer dans ce fichier les infos que tu désires. Enfin pour l'écriture dans le pdf, j'écrirai plutôt : $pdf->write(5,"Référence:".$reference); Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 oui, c'est écrit dans le même fichier ok pour l’écriture dans le pdf, en plus, je trouve que c'est plus facile à lire Link to comment Share on other sites More sharing options...
Vinum Posted April 28, 2013 Share Posted April 28, 2013 et est ce que c'est écrit dans la même fonction ? sinon, il faut soit faire une variable globale (pas génial) soit envoyer ces données dans la fonction. Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 (edited) voici une copie du fichier include('../../config/config.inc.php'); if ($_GET["token"] != md5(Configuration::get('EXPINET_TOKEN'))) Tools::redirect('../..'.urldecode($_GET["adminfolder"]).'login.php'); if(intval($_GET["id_order"]) > 0) { $order = new Order(intval($_GET["id_order"])); $customer = new Customer($order->id_customer); $ad = new Address(intval($order->id_address_delivery)); $products=$order->getProductsDetail(); // exemple proposé par vinun foreach($products as $product) { $reference=$product['product_reference']; $product_name=utf8_decode($product['product_name']); $product_quantity=$product['product_quantity']; } $pdf=new FPDF('L', 'mm', array(150,110)); //taille de l ' etiquette $pdf->AddPage(); $pdf->SetDrawColor(255); $pdf->SetAutoPageBreak(false); $pdf->SetFont("$police",'',12); $pdf->SetMargins(30,0,0); $pdf->SetXY(10,120); $pdf->write(5,"".$reference." ".$product_name." ".$product_quantity); $pdf->Output(); } else { echo "No Order identifier.<br />"; } par contre, je me rend compte que que si la commande contient plusieurs articles différents, j'arrive seulement à afficher le dernier de la liste Edited April 28, 2013 by stephforum (see edit history) Link to comment Share on other sites More sharing options...
Vinum Posted April 28, 2013 Share Posted April 28, 2013 Ok, donc tes données ne sont qu'à l’intérieur de la boucle foreach. Elles ne sont donc valables qu'à l'intérieur. Il te faut les définir à l’extérieur comme cela : $reference=""; $product_name=""; $product_quantity=""; foreach($products as $product) { $reference=$product->product_reference; $product_name=utf8_decode($product->product_name); $product_quantity=$product->product_quantity; } Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 (edited) Pour que cela fonctionne, j'ai du l'ecrire comme cela par contre, seule le dernier article de la commande est présent. Je pense que c'est ma mise en forme pour la création des lignes qui est pas bonnes. tu peu me le confirmer ? $reference=""; $product_name=""; $product_quantity=""; foreach($products as $product) { $reference=$product['product_reference']; $product_name=utf8_decode($product['product_name']); $product_quantity=$product['product_quantity']; } Quoi que je viens de faire un print_r($product); et en effet, seule la dernier ligne de la commande sort, je n'ai pas les autres Edited April 28, 2013 by stephforum (see edit history) Link to comment Share on other sites More sharing options...
Vinum Posted April 28, 2013 Share Posted April 28, 2013 (edited) Normal, il faut que tu réorganises le fichier de façon à ce que le $pdf->write soit dans la boucle foreach. Sinon effectivement, tu n'auras que le dernier produit. Quelque chose du genre : $pdf=new FPDF('L', 'mm', array(150,110)); //taille de l ' etiquette $pdf->AddPage(); $pdf->SetDrawColor(255); $pdf->SetAutoPageBreak(false); $pdf->SetFont("$police",'',12); $pdf->SetMargins(30,0,0); $y=0; foreach($products as $product) { $pdf->SetXY(10,120+$y); $reference=$product['product_reference']; $product_name=utf8_decode($product['product_name']); $product_quantity=$product['product_quantity']; $pdf->write(5,"".$reference." ".$product_name." ".$product_quantity); $y+=10; } $pdf->Output(); A toi de voir exactement pour la mise en page. Tu peux également éviter de créer de nouvelles variables et inscrire directement $product["reference"] dans le $pdf->write. Etc... PS: IL me semble également que le bon referencement est $product["reference"] mais je peux me tromper, je n'ai pas vérifié. Edited April 28, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 Merci vinum , Après une très petite adaptation, ça fonctionne !! reste plus qu'a trouvé comment faire pour que les lignes produits ne se superposent ... Link to comment Share on other sites More sharing options...
Vinum Posted April 28, 2013 Share Posted April 28, 2013 (edited) Il te faut regarder la doc fpdf mais normalement avec le $pdf->SetXY(X,Y) tu devrais y arriver. PS: Je viens de remarquer que ton étiquette fait 110 en hauteur et tu commences à imprimer à 120. Cela risque de poser problème. Edited April 28, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 heu excuse ma question bete , on l'a trouve ou cette doc ? :unsure: Link to comment Share on other sites More sharing options...
Vinum Posted April 28, 2013 Share Posted April 28, 2013 (edited) http://www.fpdf.org/ Plutôt que write regardes cell et multicell qui permettent plus de choses. Edited April 28, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 merci j’espère que je n'aurai plus à t’ennuyer !! je mettrai le résultat une fois terminé Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 Décidément!! rien n'y fait. pas moyen d'arriver à faire quelques chose Pas moyen de dé-superposer les lignes d'articles commandés. J'ai regardé la doc pour l'utilisation de cell et multicell mais mal-grès les différents exemples, j'ai l'impression qu'il faut tout ré-écrire et ça, ca va etre trop gros pour moi Au pire,si je n'y arrive pas, je vais le tenter sans le format pdf pour la mise en forme Link to comment Share on other sites More sharing options...
Vinum Posted April 28, 2013 Share Posted April 28, 2013 (edited) Il n'y a aucune raison que tu n'y arrives pas. Si tu fais comme je t'ai montré: $y=10; { $pdf->setXY(10,$y); .... ..... $y+=10; } Normalement cela fonctionne. De même en utilisant cell, il n'y a pas besoin de tout réécrire. C'est simplement de la mise en page. Dans l'exemple, les lignes seront écrites à : setxy(10,10); setxy(10,20); setxy(10,30); etc... En tout cas, mois c'est comme ça que je fais pour écrire mes pdf et il n'y a aucun problème. Donc il y'a quelque chose que tu fais mal mais quoi? Edited April 28, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 je dois avoir une m**** quelque part! c'est pas possible ?? ça reste toujours superposé. foreach($products as $product) { $Y=10; $pdf->SetFont("$police",'',12); $pdf->SetXY(10,30,$Y); // Si j'enleve le 30, cela remonte le texte en haut $reference=$product['product_reference']; $product_name=utf8_decode($product['product_name']); $product_quantity=$product['product_quantity']; //$pdf->write(5,"".$reference." ".$product_quantity); $pdf->write(5,"$reference $product_quantity "); $Y+=10; } Tu vois quelques choses ? Link to comment Share on other sites More sharing options...
Vinum Posted April 28, 2013 Share Posted April 28, 2013 (edited) Tu regardes mal les exemples que je t'ai montré dans un précédent post. Tu definis Y dans la boucle donc à chaque fois, tu initialises Y avec la même valeur. Donc effectivement le texte est toujours écrit à la même place. De même pour la police. Tu dois faire comme ça: $pdf->SetFont("Arial","",12); $y=10; foreach($products as $product) { $pdf->SetXY(10,$y); $reference=$product['product_reference']; $product_name=utf8_decode($product['product_name']); $product_quantity=$product['product_quantity']; //$pdf->write(5,"".$reference." ".$product_quantity); $pdf->write(5,"$reference $product_quantity "); $y+=10; } PS: Pour la font, je ne pense pas que $police fonctionne. Il faut que tu donnes le nom d'une font valide. Edited April 28, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
stephforum Posted April 28, 2013 Author Share Posted April 28, 2013 Halala!!! j'ai passé l'après midi à chercher ce qui était devant les yeux . Ya des fois, je me mettrai des claques!!! Merci beaucoup Vinum. C'est super gentil d'offrir un peu de ton temps à aider les novices Grace à toi, je vais enfin pouvoir finir ce fichier pour imprimer des étiquettes qui vont mettre bien utiles Dès que c'est fini, je mettrai le code à la suite pour ceux que ça intéresse Link to comment Share on other sites More sharing options...
Vinum Posted April 28, 2013 Share Posted April 28, 2013 La prochaine fois, regardes bien les exemples qui te sont montrés (sans modifier à ta sauce) et poste ton code en entier. La réponse sera plus facile à te donner. Link to comment Share on other sites More sharing options...
Max elz Posted May 11, 2013 Share Posted May 11, 2013 Halala!!! j'ai passé l'après midi à chercher ce qui était devant les yeux . Ya des fois, je me mettrai des claques!!! Merci beaucoup Vinum. C'est super gentil d'offrir un peu de ton temps à aider les novices Grace à toi, je vais enfin pouvoir finir ce fichier pour imprimer des étiquettes qui vont mettre bien utiles Dès que c'est fini, je mettrai le code à la suite pour ceux que ça intéresse bonjour, avez vous réussi? car moi aussi j'essaye de modifier pour avoir mes articles sous forme de ticket de caisse à partir de ce module et je galère. merci d'avance Link to comment Share on other sites More sharing options...
stephforum Posted May 14, 2013 Author Share Posted May 14, 2013 Bonjour, J'ai pris du temps afin de tester le fichier en prod , je vous met le code du fichier nouvellement créé ainsi que la ligne de code à ajouter dans le fichier printlabel.php ligne 123 juste avant </fieldset>'; <img src="../modules/'.$this->name.'/logo.gif" />'.$this->l(' Imprimer un bon de livraison : ').'</a><a href="../modules/'.$this->name.'/download-livraison.php?id_order='.$params["id_order"].'&adminfolder='.urlencode(substr($_SERVER["SCRIPT_NAME"], strlen(__PS_BASE_URI__) - 1, - strlen("index.php"))).'&token='.md5(Configuration::get('EXPINET_TOKEN')).'" target="blank" ><b>' .$this->l(' Click here ').'</b></a><br /> et voici le code du fichier à créer ( je l'ai appelé " download-livraison.php") <?php require ('../../tools/fpdf/fpdf.php'); //download-label.php?id_order= //------------------------------------------------------ //------------------------------------------------------------ //define('PS_ADMIN_DIR', getcwd()); include('../../config/config.inc.php'); if ($_GET["token"] != md5(Configuration::get('EXPINET_TOKEN'))) Tools::redirect('../..'.urldecode($_GET["adminfolder"]).'login.php'); if(intval($_GET["id_order"]) > 0) { $order = new Order(intval($_GET["id_order"])); /* origine */ $customer = new Customer($order->id_customer); $carrier = new Carrier(intval($order->id_carrier)); //rechercher transporteur //$products = $order->getProducts(); $products=$order->getProductsDetail(); //print_r($product); $norder=($_GET["id_order"]); $entreprise=utf8_decode($ad->company); $prenom=ucfirst(utf8_decode($ad->firstname)); $nom=mb_strtoupper(utf8_decode($ad->lastname)); $nomboutique=Configuration::get('PS_SHOP_NAME'); $police=Configuration::get('POLICE'); $pdf=new FPDF('L', 'mm', array(150,110)); //taille de l ' etiquette $pdf->AddPage(); $pdf->SetDrawColor(255); $pdf->SetAutoPageBreak(true); //nom de l'entreprise $pdf->SetFont("arial",'',10); $pdf->SetMargins(20,0,0); // marge coté gauche $pdf->SetXY(5,3); // deplacement horizontal gauche droite , hauteur du texte $pdf ->Write(5,"$nomboutique"); //espace entre ligne //numero de commande, nom, prenom $pdf->SetFont("arial",'',14); $pdf->SetMargins(5,0,0); // marge coté gauche $pdf->SetXY(5,10); // deplacement horizontal gauche droite , hauteur du texte $pdf ->Write(5,"Cmde. n° : $norder "); //espace entre ligne $pdf->SetFont("arial",'',12); $pdf->SetXY(5,15); // deplacement horizontal gauche droite , hauteur du texte $pdf ->Write(5,"$nom $prenom "); //espace entre ligne $pdf->SetXY(50,10); // deplacement horizontal gauche droite , hauteur du texte //$pdf ->Write(5," $transport "); //espace entre ligne $pdf->Cell(0,5,substr($transport,0,35),1,1,'L'); $pdf->SetFont("arial",'',12); //$pdf->SetMargins(5,0,0); // marge coté gauche $pdf->SetXY(5,25); //deplacement horizontal gauche droite , hauteur du texte $pdf ->Write(5,"Référence"); $pdf->SetXY(30,25); //deplacement horizontal gauche droite , hauteur du texte $pdf ->Write(5,"Qté"); $pdf->SetXY(45,25); //deplacement horizontal gauche droite , hauteur du texte $pdf ->Write(5,"Nom du produit"); //detail du bon de livraison $pdf->SetFont("Arial",'',10); $Y=30; foreach($products as $product) { $pdf->SetXY(5,$Y); // deplacement horizontal gauche droite , hauteur du texte $reference=$product['product_reference']; $product_name=utf8_decode($product['product_name']); $product_quantity=$product['product_quantity']; $pdf->write(5,"".$reference); $pdf->SetXY(30,$Y); // deplacement horizontal gauche droite , hauteur du texte $pdf->write(5,"".$product_quantity); $pdf->SetXY(45,$Y); // deplacement horizontal gauche droite , hauteur du texte $pdf->Cell(0,5,substr($product_name,0,35),1,1,'L'); $Y+=5; } $pdf->Output(); } else { echo "No Order identifier.<br />"; } ?> Il n'est pas très propre, je vous le donne comme ça , j'ai quelques amélioration de personnalisation à lui apporter 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