Jump to content

comment garder le customizationId d’un produit sans avoir de champ texte de personalisation ?


Recommended Posts

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à :o 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

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

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

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 : 111
id_product : 20
cart_quantity : 2
name : Cartes de visite
description_short :

Cartes de visite pour les kinésithérapeutes.

available_now :
available_later :
id_category_default : 19
id_supplier : 0
id_manufacturer : 0
id_tax : 1
on_sale : 0
ecotax : 0.00
quantity : 2
price : 75.000000
reduction_price : 0.00
reduction_percent : 0
reduction_from : 2009-06-23
reduction_to : 2009-06-23
weight : 0
out_of_stock : 2
active : 1
date_add : 2009-06-23 14:35:38
date_upd : 2010-01-26 15:40:06
tax : TVA 19.6%
rate : 19.6
price_attribute : 0.00
quantity_attribute : 2
ecotax_attr : 0.00
id_image : 20-55
legend : Cartes de visite
link_rewrite : cartes-de-visite-kinesitherapeute
category : cartes-de-visite-kinesitherapeutes
unique_id : 20111
reference :
supplier_reference :
weight_attribute : 0
ean13 :
stock_quantity : 2
price_wt : 89.700000
total : 150
total_wt : 179.4
allow_oosp : 1
features : Array
attributes : La quantité : 500
attributes_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. ;)

18546_nEr5v222GShFS0yRbjwL_t

Link to comment
Share on other sites

  • 2 weeks later...
  • 4 weeks later...
  • 7 months later...
  • 7 months later...

Bonjour

As-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 dire

Timothée

Link to comment
Share on other sites

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