CyBeRCeD Posted February 9, 2010 Share Posted February 9, 2010 Bonjour, j’utilisais un champ texte de personalisation pour garder une référence d’un produit personnalisé une fois ce dernier dans mon panier. Jusqu‘à ce que je découvre que Prestashop gérait tout seul un “customizationId” pour chaque produit qui s’incrémentait tout seul (on peut le voir dans le lien de suppression ou d’ajout du produit) Donc j’ai refais tout mon système confiant en pensant avoir trouvé la solution la plus simple et la plus efficace de mémoriser certaines informations du produit pour enregistrer des informations dans ma Bdd en indiquant comme id ce “customizationId”.J’ai donc supprimé mes champs de personnalisation “TextFields” et là plus de “customizationId”.Existe t’il donc un moyen afin de conserver la gestion de ce customizationId sans avoir de champ de personnalisation ?Merci d'avance Link to comment Share on other sites More sharing options...
Julien Breux Posted February 9, 2010 Share Posted February 9, 2010 Bonjour,Pourquoi ne pas avoir utilisé l'ID produit et ID attribut ?Cordialement Link to comment Share on other sites More sharing options...
CyBeRCeD Posted February 9, 2010 Author Share Posted February 9, 2010 bonjour, merci de vous interrésser à mon problème. En fait, j'ai créer un module qui permet de personnaliser des cartes de visites pour les professionnels. Mon module contient un formulaire pour renseigner des champs, une barre d'outil pour personnaliser ces champs (couleur, gras italique, police...) et donc un bouton qui me permet grâce à de l'ajax, d'appeler une fonction PHP (qui utilise la librairie GD) pour créer l'aperçu de ma carte afin que l'utilisateur sache ce qu'il va acheter. Il peut donc personnaliser au maximum sa carte et c'est ainsi que chaque produit ajouté au panier est différent, même si c'est toujours pour prestashop, le même produit de la même catégorie...J'ai donc ajouté une table à ma BDD où, lors de l'ajout d'un produit au panier, enregistre toutes les infos nécessaires (si tel ou tel champ est en gras, sa couleur, taille...) dans une enregistrement (ou mon identifiant est ce fameux customization_id) pour, lors de la confirmation de la commande, appeler une fonction PHP me permettant de générer un PDF que j'envoie à mon imprimeur.J'ai donc résolu un de mes problèmes lorsque j'ai découvert que Prestashop géré de lui même des numéro de customization qui suivent le produit jusqu'à la confirmation de la commande (pour peu de modifier quelques bout de codes par ci par là. Et une fois la commande confirmée, j'effectue une requete SQL me permettant de lier mon produit customizer avec le numero de la commande (id_order) que l'on récupère une fois la commande confirmée.Ainsi à l suite de tout cela, je peut récupérer un peu où je veux (dans l'historique des commandes par exemple) pour chaque numéro de commande, telle ou telle carte qui a été commandé et ainsi afficher les miniatures des visuels au client (cela parle toujours plus que des numéros).Voilà, j'espère que vous avez saisi le sens de mon problème. Il suffit juste que je trouve un moyen de garder ce customization_id, sans pour autant avoir des champs de personnalisation. Car la seule solution que j'ai trouvé, c'est de cacher mon formulaire que propose Prestashop pour personnaliser mon produit, de mettre une valeur dans un champ caché grâce à du javascript, puis d'envoyer le formulaire. Le soucis majeur est donc que je suis obligé de recharger la page alors que mon module est optimisé à la base pour fonctionner au maximum avec de l'ajax.Merci d'avance pour votre aide, en espérant que vous aurez une solution à m'apporter. Link to comment Share on other sites More sharing options...
Julien Breux Posted February 9, 2010 Share Posted February 9, 2010 Oui, mais pourquoi ne pas utiliser une clé unique pour personnaliser le produit : $cart->id . $cart->getProducts()[2]->id_product. (ligne théorique)Le panier étant unique, le produit aussi... Le tout dans un $cookie->ma_cle_de_mon_produit.Vous récupérez le tout derrière newOrder par exemple et le tour est joué.Sinon, la seconde solution c'est dans la table cart_product ajouter un champs id_perso... qui lit la personnalisation effectuée en Ajax ou Ajaj Link to comment Share on other sites More sharing options...
CyBeRCeD Posted February 9, 2010 Author Share Posted February 9, 2010 Oui, mais pourquoi ne pas utiliser une clé unique pour personnaliser le produit : $cart->id . $cart->getProducts()[2]->id_product. (ligne théorique)Le panier étant unique, le produit aussi... Le problème c'est que non. regardez j'ai 2 occurences d'un même produit mais qui sont différents car ils sont différenciés par un customization_id (image jointe)Je réalise dans ma page shopping-cart.tpl une boucle me permettant d'afficher tout les attributs de tout mes produits :global $cart; foreach($cart->getProducts() as $unproduit) { foreach ($unproduit as $key => $value) { echo $key." : ".$value." "; } } Et voici ce qui me ressort : id_product_attribute : 111id_product : 20cart_quantity : 2name : Cartes de visitedescription_short :Cartes de visite pour les kinésithérapeutes.available_now :available_later :id_category_default : 19id_supplier : 0id_manufacturer : 0id_tax : 1on_sale : 0ecotax : 0.00quantity : 2price : 75.000000reduction_price : 0.00reduction_percent : 0reduction_from : 2009-06-23reduction_to : 2009-06-23weight : 0out_of_stock : 2active : 1date_add : 2009-06-23 14:35:38date_upd : 2010-01-26 15:40:06tax : TVA 19.6%rate : 19.6price_attribute : 0.00quantity_attribute : 2ecotax_attr : 0.00id_image : 20-55legend : Cartes de visitelink_rewrite : cartes-de-visite-kinesitherapeutecategory : cartes-de-visite-kinesitherapeutesunique_id : 20111reference :supplier_reference :weight_attribute : 0ean13 :stock_quantity : 2price_wt : 89.700000total : 150total_wt : 179.4allow_oosp : 1features : Arrayattributes : La quantité : 500attributes_small : 500 Prestashop considère mes 2 produit comme un seul, et l'unique_id:20111 est en fin de compte toujours le même. normal vu que ce sont tout les deux des occurrences du même produit, seulement mon module fait en sorte que mes produit, soient TOUS différents. Sans customization_id, ils ne sont pas différentiables (enfin à ce que j'ai pu comprendre lors de mes tests).Donc peut être que je n'ai pas compris la solution que vous m'apportez. Si je suis dans ce cas et que j'ai mal compris, je m'en excuse. Mais sinon pouvez vous me dire si oui ou non il est possible de faire ce que je désire.Cela doit être une seule ligne à modifier dans le product.php ou le product.tpl mais impossible de trouver. Il me faut juste enlever une condition qui indique que si il existe des données envoyés par post par le formulaire de personnalisation d'un produit, un customization_id est ajouté au produit.Je pense que tout se passe dans la fonction :function textRecord(Product $product, Cart $cart) { global $errors; if (!$fieldIds = $product->getCustomizationFieldIds()) return false; $authorizedTextFields = array(); foreach ($fieldIds AS $fieldId) if ($fieldId['type'] == _CUSTOMIZE_TEXTFIELD_) $authorizedTextFields[intval($fieldId['id_customization_field'])] = 'textField'.intval($fieldId['id_customization_field']); $indexes = array_flip($authorizedTextFields); foreach ($_POST AS $fieldName => $value) if (in_array($fieldName, $authorizedTextFields) AND !empty($value)) { if (!Validate::isMessage($value)) $errors[] = Tools::displayError('Invalid message'); else $cart->addTextFieldToProduct(intval($product->id), $indexes[$fieldName], htmlentities($value, ENT_COMPAT, 'UTF-8')); } elseif (in_array($fieldName, $authorizedTextFields) AND empty($value)) $cart->deleteTextFieldFromProduct(intval($product->id), $indexes[$fieldName]); } et plus particulièrement sur cette ligne : if (!$fieldIds = $product->getCustomizationFieldIds()) return false; Mais rien à faire je n'y parvient pas --'Merci encore pour le temps que vous m'accordez. Link to comment Share on other sites More sharing options...
CyBeRCeD Posted February 22, 2010 Author Share Posted February 22, 2010 un petit UP Merci d'avance Link to comment Share on other sites More sharing options...
adiboo Posted March 19, 2010 Share Posted March 19, 2010 Bonjourest ce que je peux essayer ton module de personnalisation de carte?merci Link to comment Share on other sites More sharing options...
salut270778 Posted November 14, 2010 Share Posted November 14, 2010 bonsoirc clair ce serait l'idéale pour plusieurs d'entre nous ce module... Link to comment Share on other sites More sharing options...
timos Posted June 16, 2011 Share Posted June 16, 2011 BonjourAs-tu réussi à résoudre ton problème.J'ai le même genre de problème dans un cas un peu différent mais je pense que la solution doit être du même style.Mon client est un site de vente de confiture en ligne et l'internaute peut se constituer des coffrets personnalisés (le nombre de pots de confiture et les parfums disponibles sont définis en admin)Donc une fois que l'acheteur à constituer son coffret et l'a ajouté à son panier, il faudrait effectivement une espèce de customization_id permettant d'identifier de manière unique chaque coffret constitué afin de pouvoir restitué les parfums choisi et leur quantité.Je vais partir sur les pistes données sur ce post, puisqu'en définitive la problématique est exactement la même.Si tu as eu du nouveau depuis, je suis preneur. sinon je te tiendrais au courant de la manière dont j'ai procédé (enfin si c'est possible)Et évidemment s'il s'est avéré que ce type de customisation n'était pas possible... et bien merci aussi de me le direTimothée 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