osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [résolu] Prix sur attributs
Rusti
posté 20 Feb 2012, 17:52
Message #1


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Voilà j'aimerais savoir si il est possible de mettre un prix fixe sur une option, quand je parle de prix fixe je veux dire un prix qui ne sera pas multiplier même si je met 10 fois le même articles dans mon panier.
Dans qu'elle fichiers dois-je modifier mon code ?
Merci

Ce message a été modifié par Rusti - 9 Mar 2012, 19:32.


--------------------
osCommerce v2.3
Go to the top of the page
 
Gnidhal
posté 20 Feb 2012, 21:09
Message #2


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Non, une option ou attribut est relative à la quantité du produit parent.
En revanche il doit exister des contribution qui font ce que tu veux genre bundled products si j'ai bonne mémoire.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
Rusti
posté 21 Feb 2012, 07:31
Message #3


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Merci Gnidhal pour cette réponse le soucis c'est que le tout fait parti d'un module de personnalisation dont le calcul des prix n'est pas simple.
En fait si mon client veut écrire un texte le prix est calculer en fonction du nombre de couleur choisi avec des frais fixe.

Exemple :
- Cas n°1 : le client veut un texte en une couleur : prix fixe de 40€ plus celui de la couleur 1€ x par le nombre d'article qu'il met au panier
- Cas n°2 : le client veut un texte en deux couleurs : prix fixe de 2x40€ plus celui des couleurs multiplier par le nombre d'article qu'il met au panier
Maintenant si le client met 50 ou 100 articles au panier les frais fixe ne bouge pas.

Et serait il possible à l'ajout au panier de lui dire par exemple, si l'article à l'option ID250 de sélectionné on rajoute 40€ au prix final ou si l'article à l'option ID250 et l'option ID260 de sélectionné alors on ajoute 80€ au prix final.

Le calcul du prix de mon module est un peu compliquer et du coup il me bloque pas mal.

Merci


--------------------
osCommerce v2.3
Go to the top of the page
 
Gnidhal
posté 21 Feb 2012, 09:39
Message #4


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Ouch!
En effet mais dans pareil cas on doit sortir du système de base de calcul de prix et revoir la méthode de dev.
Dans le principe 1 article = (1 prix + option)*qté
Si tu sors de ce cadre, tu dois revoir l'architecture du catalogue ou le système d'ajout au panier.
Et là, forcément il faut coder sérieux.

Il faut donc réfléchir plus avant sur la méthode de calcul et envisager des "fausses options" ou la modification du calcul dans le panier car le procédé utilisé de base ne permet pas ce que tu veux faire.
La solution passe à mon sens par l'ajout d'un produit lié (mais non visible individuellement), le forfait couleur, qui est lié au nombre d'options (la couleur à 1€)
donc
1 couleur = (1 produit + 1 option)* qté + 1 forfait
2 couleurs = (1 produit + 2 options)* qté + 2 forfaits
etc.
ou alors tu peux avoir (si ton nombre de couleurs se limite à 4 par exemple)
1 produit en 1 couleur = prix du produit intégrant l'option 1 couleur (produit + 1 euro) + produit lié 1 forfait à 40€
1 produit en 2 couleurs = prix du produit intégrant l'option 2 couleurs (produit + 2 euro) + produit lié 2 forfait à 40€ (ou un forfait à 80)
etc.
Cela me parait plus élégant. Dans la présentation, le client ne voit qu'un produit mais selon une pseudo option (menu déroulant) on ajoutera dans son panier le produit qui lui faut + le forfait adapté.
On a donc un catalogue démultiplié où chaque produit à une référence unique (la couleur) regroupés derrière un produit "gabarit" ou "parent" (appelle le comme tu veux) qui sert de fiche produit pilotant l'ajout au panier des vrais produits.

Cette méthode du produit parent qui sélectionne les bons produits pour les ajouter correctement dans le panier se gère dans la page produit.
Après la présentation du catalogue se fait sur la base de ces produits parents, les enfants n'étant jamais présentés au client directement.
Tu gardes alors ta structure de produit avec option, et tu ajoutes les produits selon un "gabarit d'achat" le groupe de produits vendus se transformant en lot indivisible.
38 tasses à thé avec 1 logo en 2 couleurs c'est :
38 tasses
2*38 options couleur
2* forfaits couleurs
(pareil pour des t-shirt ou des chaussettes et dans ce cas tu pourrais gérer en plus les tailles et les stocks des tailles)

C'est le problème du vendeur de chaussure qui a un modèle en cuir nommé Tantarpions en noir, vert et bleu du 38 au 44 mais avec 2x39 bleu, 1x40 noir, 3x41 vert, etc...
en réalité chaque paire a sa référence unique qui représente modèle, pointure, couleur... (on pourrait encore ajouter matière ou autres options)
On ne remplit donc pas son catalogue à partir du modèle avec des options de taille et de couleur mais bien en prenant chaque déclinaison comme un produit, regroupés dans une fiche produit sous le nom du modèle commun, les "options" étant des sélection de produit autour de ce modèle.

Tu dois pouvoir faire de même, suffit juste de prendre le problème sous un autre angle.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
Rusti
posté 22 Feb 2012, 14:04
Message #5


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Merci beaucoup Gnidhal sa me permet d'y voir plus clair.

Par contre je c'est pas trop si je doit fermer le post car si ajouter des produits lié à un article ne me pose pas de soucis.
Sélectionner le bon produit en fonction de l'option choisi et que le tout soit ajouter au panier correctement me pose déjà plus de soucis, en lisant ton post je me voyais déjà toucher au fichier application_top.php
Bref j'en suis pas encore la.

Merci


--------------------
osCommerce v2.3
Go to the top of the page
 
Rusti
posté 27 Feb 2012, 19:09
Message #6


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Bonjour,
Alors j'ai suivi tes conseils Gnidhal et j'ai donc installé la contrib Master Products pour affecter un produit lié (dans mon cas le forfait couleur) et j'y est apporté quelques modifications dans le fichier applications_top.php pour que lorsque le client choisi le nombre de couleur qu'il veut pour son texte ou logo, le forfait couleur soit multiplier en conséquence.
Exemple :
1 produit en 2 couleurs = prix du produit intégrant l'option 2 couleurs (produit + 2 euro) + produit lié 2 forfait à 40€

Jusque la pas de soucis mon forfait couleur est bien multiplier en fonction de l'option choisi (je me sert de l'id de la valeur de l'option 'options_values_id' pour que le choix soit fait).
Le problème vient que si mon client décide de faire un texte en 1 couleur et un logo en 1 couleur normalement il devrait s'ajouter 2 forfaits couleur (1 pour le texte et 1 pour le logo)

j'ai donc dans le fichier applications_top.php essayer de lui dire comme pour les options si tu à la valeur ID415 et ID419 tu ajoute 2 forfaits mais sa marche pas, j'ai l’impression qu'il ne regarde pas toutes les ID et que des qu'il en trouve une il ajoute se qui lui est demander.
Je pense que sa ne doit pas être un grosse erreur mais j'ai beau retourner le problème dans touts les sens je ne comprend pas.
Je laisse la modification que j'ai fait dans application_top.php car j'aimerais bien un petit coup de main en fait plutôt une explication sa me serait plus utile je pense même si je sais qu'elle prenne plus de temps aussi (désolé)

Code
//Master Products
// customer adds multiple products from the master_listing page
        case 'add_slave' :    if (isset($HTTP_POST_VARS['products_id']) && is_numeric($HTTP_POST_VARS['products_id'])) {
                                $purgeDir = opendir(TMP_DIR) or die ('Could not open '.TMP_DIR);
                                while ($file = readdir($purgeDir)) {
                                  if ($file != ('.htaccess') && $file != ('.') && $file != ('..') && filemtime(TMP_DIR . $file) < strtotime(OPTIONS_TYPE_PURGETIME)) {
                                    unlink(TMP_DIR . $file);  // Delete file from server...
                                    tep_db_query("delete from " . TABLE_FILES_UPLOADED . " where files_uploaded_name = '" . $file . "'"); // Remove File's database entry....
                                  }
                                }
                                closedir($purgeDir);

                                $real_ids = $HTTP_POST_VARS['id'];
                                if ($HTTP_POST_VARS['number_of_uploads'] > 0) {
                                  require(DIR_WS_CLASSES . 'upload.php');
                                  for ($i = 1; $i <= $HTTP_POST_VARS['number_of_uploads']; $i++) {
                                    $TEMP_FILE = $_FILES['id']['tmp_name'][TEXT_PREFIX . $HTTP_POST_VARS[UPLOAD_PREFIX . $i]];
                                    if (tep_not_null($TEMP_FILE) && $TEMP_FILE != 'none') {
                                      $products_options_file = new upload('id');
                                      if (tep_session_is_registered('customer_id')) {  // IF the customer is registered, use Upload Dir
                                        $products_options_file->set_destination(UPL_DIR);
                                      } else { // If the customer is not registered, use Temporary Dir
                                        $products_options_file->set_destination(TMP_DIR);
                                      }
                                      if ($products_options_file->parse(TEXT_PREFIX . $HTTP_POST_VARS[UPLOAD_PREFIX . $i])) {
                                        if (tep_session_is_registered('customer_id')) {
                                          tep_db_query("insert into " . TABLE_FILES_UPLOADED . " (sesskey, customers_id, files_uploaded_name, date) values('" . tep_session_id() . "', '" . $customer_id . "', '" . tep_db_input($products_options_file->filename) . "', '" . date("d-m-y") . "')");
                                        } else {
                                          tep_db_query("insert into " . TABLE_FILES_UPLOADED . " (sesskey, files_uploaded_name, date) values('" . tep_session_id() . "', '" . tep_db_input($products_options_file->filename) . "', '" . date("d-m-y") . "')");
                                        }
                                        if (OPTIONS_TYPE_FILEPREFIX == 'Database') {  //  Database ID as File prefix
                                          $insert_id = tep_db_insert_id() . '_';
                                        } else {  //  Date, time or both as File prefix (Change date formatting here)
                                          if (OPTIONS_TYPE_FILEPREFIX == 'Date' || OPTIONS_TYPE_FILEPREFIX == 'DateTime') {
                                            $insert_id = 'D'.date("d-m-y_");
                                          }
                                          $insert_id .= (OPTIONS_TYPE_FILEPREFIX == 'DateTime' || OPTIONS_TYPE_FILEPREFIX == 'Time') ? 'T'.date("H-i_") : '';
                                        }
                                        // Update filename in Database with correct prefix (For comparing database names with real files)
                                        tep_db_query("update " . TABLE_FILES_UPLOADED . " set files_uploaded_name = '" . tep_db_input($insert_id . $products_options_file->filename) . "' where sesskey = '" . tep_session_id() . "' and files_uploaded_name = '" . tep_db_input($products_options_file->filename) . "' and date = '" . date("d-m-y") . "'");
                                        $real_ids[TEXT_PREFIX . $HTTP_POST_VARS[UPLOAD_PREFIX . $i]] = $insert_id . $products_options_file->filename;
                                        $products_options_file->set_filename($insert_id . $products_options_file->filename);
                                        if (!($products_options_file->save())) {
                                          break 2;
                                        }
                                      } else {
                                        break 2;
                                      }
                                    } else { // No file uploaded -- use previously uploaded file (From Dropdown)
                                      $real_ids[TEXT_PREFIX . $HTTP_POST_VARS[UPLOAD_PREFIX . $i]] = $HTTP_POST_VARS[TEXT_PREFIX . UPLOAD_PREFIX . $i];
                                    }
                                  }
                                }
                                $cart->add_cart($HTTP_POST_VARS['products_id'], $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['products_id'], $real_ids)) + $HTTP_POST_VARS['cart_quantity'], $real_ids);
                              }




///////////////////////////////////////////////////////////////////////////////////////PARTIE MODIFIER/////////////////////////////////////////////////////////////

                              reset($HTTP_POST_VARS);
                              while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
                                if (substr($key,0,11) == "Qty_ProdId_") {
                                $prodId = substr($key,11);
                                $qty = $val;
    $products = $cart->get_products();
    for ($i=0, $n=sizeof($products); $i<$n; $i++) {
      if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
        while (list($option, $valueid) = each($products[$i]['attributes'])) {
          $attributes = tep_db_query("select popt.products_options_name, popt.products_options_comment, poval.products_options_values_name, pa.options_values_price, pa.price_prefix
                                      from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
                                      where pa.products_id = '" . (int)$products[$i]['id'] . "'
                                       and pa.options_id = '" . (int)$option . "'
                                       and pa.options_id = popt.products_options_id
                                       and pa.options_values_id = '" . (int)$valueid . "'
                                       and pa.options_values_id = poval.products_options_values_id
                                       and popt.language_id = '" . (int)$languages_id . "'
                                       and poval.language_id = '" . (int)$languages_id . "'");
          $attributes_values = tep_db_fetch_array($attributes);
                          
          if ($valueid == 415) { //Forfait 1 couleur texte
            $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['id_$prodId'],$prodId))+1, $HTTP_POST_VARS["id_$prodId"]);
          
          } elseif ($valueid == 416) { //Forfait 2 couleurs texte
            $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['id_$prodId'],$prodId))+2, $HTTP_POST_VARS["id_$prodId"]);
          
          } elseif ($valueid == 417) { //Forfait 3 couleurs texte
            $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['id_$prodId'],$prodId))+3, $HTTP_POST_VARS["id_$prodId"]);
          
          } elseif ($valueid == 419) { //Forfait 1 couleur logo
            $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['id_$prodId'],$prodId))+1, $HTTP_POST_VARS["id_$prodId"]);
          
          } elseif ($valueid == 420) { //Forfait 2 couleurs logo
            $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['id_$prodId'],$prodId))+2, $HTTP_POST_VARS["id_$prodId"]);
          
          } elseif ($valueid == 421) { //Forfait 3 couleurs logo
            $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['id_$prodId'],$prodId))+3, $HTTP_POST_VARS["id_$prodId"]);
          
          } elseif ($valueid == 415 && 419) { //Forfait 1 couleur texte et 1 couleur logo
            $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($HTTP_POST_VARS['id_$prodId'],$prodId))+2, $HTTP_POST_VARS["id_$prodId"]);
          } else {
            $cart->add_cart($prodId, $cart->get_quantity($prodId)+$qty);
          }

          $products[$i][$option]['options_values_id'] = $valueid;
        }
      }
    }
                                    }
                                }
                                tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                                break;
//Master Products EOF


Merci


--------------------
osCommerce v2.3
Go to the top of the page
 
Gnidhal
posté 27 Feb 2012, 19:48
Message #7


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Pas mal, mais au dela d'une erreur de syntaxe :
elseif ($valueid == 415 && 419) ne peux rien donner de bon
je ne vois pas trop comment fonctionne ta condition, ça se réfléchi...


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
Rusti
posté 27 Feb 2012, 20:11
Message #8


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Je ne comprend pas trop se que tu veux dire par "je ne vois pas trop comment fonctionne ta condition"
en fait $valueid représente l’identifiant de la valeur de l'option.
J'ai une option qui s'appel :
Nombre de couleur (pour le texte)
et des valeurs pour cette option qui sont :
1 couleur ($valueid 415)
2 couleurs ($valueid 418)
....
ceci pour le texte mais aussi pour le logo.

Je vais mettre la présentation du module au propre et je mettrais le lien sa sera peut être plus simple pour comprendre.

Désolé si je n'ai pas été assez clair dans mes explications.

Ce message a été modifié par Rusti - 27 Feb 2012, 20:13.


--------------------
osCommerce v2.3
Go to the top of the page
 
chti_poupon
posté 27 Feb 2012, 20:36
Message #9


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour
Pour t'aider, prends un papier et marques toutes les "couleurs" dessus.
Suis ton programme à partir du if et suis le cheminement jusqu'à une action. là barre la "couleur" c'est fini pour elle.
Passes à la suivante ... etc jusqu'au bout
Que se passe-t-il ?

Chti poupon
Go to the top of the page
 
Rusti
posté 27 Feb 2012, 21:49
Message #10


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Alors j'ai donc pris mon petit papier et suivi tes instructions chti_poupon.
J'en suis arriver à la déduction suivante :

En fait il faudrait que je demande à mon code de regarder la totalité des valeurs d'options sélectionner puis de faire le bon choix
Ce qu'il ne fait pas pour l'instant car en fait je lui demande de regarder les id des valeurs d'options et dès qu'il en trouve une il ajoute ce qui est demander (donc impossible de lui dire si tu trouve l'id 415 et 419 tu ajoute 2 forfaits puisque je lui demande déjà d'ajouter 1 forfait si il trouve l'id 415).

Donc si ma déduction est bonne (la j'avoue ne pas être sur wacko.gif ) mon soucis est comment je fait pour qu'il regarde la totalité des valeurs d'options avant de choisir.

Ce message a été modifié par Rusti - 27 Feb 2012, 21:55.


--------------------
osCommerce v2.3
Go to the top of the page
 
Gnidhal
posté 27 Feb 2012, 22:16
Message #11


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



waip, le principe est bon même si je trouve le principe du elseif un peu réducteur
le problème se pose si j'ai bien compris dans le cas où ton logo a une couleur et le texte une couleur : ce sont 2 options.
Il faut donc que tu allonges ta boucle de test d'autant avec les possibilité dur 2 bits ce qui n'est plus du test binaire simple.
Exemple :
actuellement tu testes si $valueid == 415 réponse 0 ou 1 (vrai ou faux)
mais tu ne passes ta boucle qu'une fois donc tu ne compte qu'une entrée, or il faut que tu passe une fois pour le texte et une fois pour le logo et une fois pour les deux mais tu ne peux pas car c'est un test booleen.
en effet tu passes par un test roulant qui sort si l'une des options est vraie
if 415 sort une valeur
if 419 sort une valeur
mais puisque tu glisse par un else si tu as un 415 tu ne peux plus avoir un 419
Normal aussi tu ne testes que $valueid qui ne peut avoir qu'une valeur or si tu as deux option quelle est le type de valueid ? une variable ou un tableau ?

pour ma part j'aurais pensé qu'il fallait prendre les options en tableau et vérifier la valeur de chaque :
dans la chaine qui est passé à application_top on a products_id=21{1}2{2}10 ce qui nous donne
produit 21 + option 1 = 2 + option 2 = 10
tu peux donc tester 2 option et faire des additions
admettons que option1 = couleur texte et option2 = couleur logo
si option1 = 1 => texte 1 couleur, option1 = 2 => texte 2 couleur, etc.
si option2 = 8 => logo 1 couleur, option2 = 9 => logo 2 couleur, etc.
tu peux donc faire un test sur la valeur des options et faire un incrément pour le nombre de couleur
21{1}2{2}10 = 3 couleurs logo et 2 couleurs texte = 5 options couleurs.
C'est de ce coté qu'il faut creuser.
tu as en effet plus de facilité à compter les valeurs des options que les index de ces options et tu le fais en un seul test en explode de la chaine options (les fonctions existent déjà pour ça)
la chaine est en effet assez facile à decoder : products_id{option1_id}valeur_opt1{option2_id}valeur_opt2
Reste à connaître les valeurs des id.
Là dessus je ferais bien une fonction qui irait chercher la correspondance de l'id de l'option avec sa description texte pour éviter de devoir tout refaire si tu bouges les options (les id peuvent alors changer)
tu peux récupérer facilement les products_options_id à partir de products_options_values_name en faisant une comparaison regex ou avec une requête de type LIKE sur la table products_options_values: à creuser.



--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
Rusti
posté 28 Feb 2012, 00:13
Message #12


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Serait il possible d'avoir un exemple de code ou un fichier dans oscommerce qui fait quelque chose de similaire sur lequel je puisse travailler car j'avoue m'y perdre un peu.
Je comprend parfaitement le raisonnement (j'ai essayé d'avoir un peu le même mais apparemment je me suis planté quelque part) mais je n'arrive pas à le mettre en pratique.

Je vais aller prendre un peu de repos je suis sur que demain le code m'apparaîtras beaucoup plus clair.

Merci beaucoup pour votre aide


--------------------
osCommerce v2.3
Go to the top of the page
 
N.Serge
posté 28 Feb 2012, 08:26
Message #13


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 277
Inscrit : 18-October 08
Membre no 23350



je me permets de prendre part , bien que je n'y connaisse pas grand chose.

en ce qui me concerne car les codages c'est pas mon truc, je mettrai l'option en produit normal, et j'y mettrai son lien direct dans la descritpion du produit qui nécessite éventuellement cette option.

Mais bon !!!!

Serge


--------------------
Version osCommerce Online Merchant v2.2 RC1 W3C Valid FR.
fckeditor-oscommerce_v2.2.1 ( bien ) - anti_spambot_contact_us_1.2 ( bien ) - Remise par catégorie (très bien) -Virement bancaire - Paypal IPN : V2.3 ( désactivé) - Déposit ( paiement avec acompte - très bien ) - Inactiveuser_1_3 ( pas terrible ) - Catégorie box ( génial ) -
Minimum_Order ( désactivé) - Minimum Amount To Make The Order ( très bien pour IE, mais bug pour autre navigateur )
discount_quant_v1 ( bien mais bug paypal et calcul sur le total du panier donc désactivé ) - lev_discountv2.4 ( bien mais bug paypal donc désactivé )
ParcelShop ( modification de la contrib kilopost - désactivé ) - TaxiPost ( bien - désactivé)


Version osCommerce Online Merchant v2.3.4 FR. (16/12/2016 test online )
Virement Bancaire 2.3.4.1 du 19/12/2016 (OK)
CKEditor 4.6.1 Full (OK)
Select Product Image Directory (OK)
Simple Order Discount (NON*) *remise sur tout le panier et non uniquement sur la quantité programmée


Go to the top of the page
 
Rusti
posté 28 Feb 2012, 15:02
Message #14


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Bon comme quoi avec un peu de repos tout apparaît plus clair.
Donc j'ai compris pourquoi je n'arrive pas à tester 2 valeurs puisque je n'indique aucun "while" dans mon code qui pourrait me permettre de testez deux variable ou mieux lui demander d'additionner les valeurs d'option (bizarre ça, j'ai l'impression que c'est justement ce que m'explique une partie du message de Gnidhal avec d'autre mot mais bon happy.gif ).
Donc je continue je vais bien voir ou tout sa me mèneras (dès fois je comprend vraiment comment je peut bloquer sur des codes qui j'en suis sur ne doivent pas être si compliqué que ça blink.gif )

PS: N.Serge j'ai pas tout compris ce que tu voulais dire


--------------------
osCommerce v2.3
Go to the top of the page
 
Gnidhal
posté 28 Feb 2012, 15:32
Message #15


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



pas franchement besoin de while je pense:
tu as une chaine d'achat produit qui contient l'id produit et l'id option + valeur de cette option.
tu peux donc trier cela selon la valeur :
$a = pid
$b = array('opt_id'=>$opt_value)
inspire toi de la fonction tep_get_uprid pour récupérer un tableau d'attributs à partir de la chaine produit
une fois que tu as ce tableau, tu peux utiliser un incrément et retourner le nombre de couleurs utilisées.
si tes valeurs d'options sont toutes différentes tu peux te contenter de ne prendre que les valeurs et déduire la quantité de couleur du code option comme tu fais avec ta série actuelle.
En analysant la chaine get (products_id=123{1}2{2}5) tu as en seul coup la conversion possible en nombre de couleurs totales :
pour products_id=123{1}2{2}5
on a
$pid = 123
$opt = array(1=>2, 2=>5);
avec un
Code
$nb_col = 0;
foreach ($opt as $k=>$v){
   if($k == 1 && $v==1) // option texte (k=1) et 1 couleurs (v=1)
      $nb_col += 1;
   if($k == 1 && $v==2) // option texte (k=1) et 2 couleurs (v=2)
      $nb_col += 2;
   if($k == 2 && $v==5) // option logo(k=2) et 1 couleurs (v=5)
      $nb_col += 1;
   if($k == 2 && $v==6) // option texte (k=2) et 2 couleurs (v=6)
      $nb_col += 2;

}

tu scannes en une fois ton tableau et tu récupères le nombre de couleurs au total dans $nb_col.
j'ai limité ici à 2 couleurs et les valeurs sont à adapter mais le principe est là
il ne te reste plus qu'à ajouter le nombre de produits couleurs jointes.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
Rusti
posté 28 Feb 2012, 16:52
Message #16


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Merci beaucoup Gnidhal tes explications et le fait d'avoir un visuel du code m'aide beaucoup


--------------------
osCommerce v2.3
Go to the top of the page
 
Rusti
posté 9 Mar 2012, 19:31
Message #17


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 103
Inscrit : 11-October 10
Lieu : Villemomble
Membre no 28103



Bonjour
Alors je vais faire passer ce post sur résolu car les explications donner par Gnidhal fonctionne très bien (Un GRAND MERCI au passage).
Maintenant j'avoue ne pas y être arriver de cette façon la, impossible de récupérer les informations avec la solution de Gnidhal. Cela vient du fait que pour mon module de personnalisation je me suit inspiré de la contribution Option Type (je dit bien inspirer car elle à subit de nombreuse modifications) et les options gérer par cette contribution ne fonctionne pas comme les options standard d'oscommerce elle ne me renvoie pas un résultat du type 123{1}{2}{3} quand on est dans le panier mais il y à juste l'id du produit.
j'ai fait un teste avec ta solution Gnidhal sur un produit avec les options standard et sa fonctionne très bien. Du coup pour ajouter mon supplément en fonction du nombre de couleur choisi j'effectue ce calcul non pas au moment de l'ajout au panier mais en amont au moment ou l'on sélectionne l'option le tout gérer par un code en javascript (bien sur il à fallut créer de nouvelles options cachées dans lequel est ajouter une quantité selon que le choisi tel ou tel option pour que le calcul se fasse corectement et que le tout soit bien enregistré au cas ou mon client déciderais de faire une modification sur son produit après l'avoir ajouter au panier (une vrai galère ce module wacko.gif ).

Bref l'important est que ça fonctionne même si j'avoue rester un peu sur ma faim.

Bien comme un problème n'arrive jamais seul je me retrouve maintenant avec un autre qui lui est plus lié à la contribution master products puisque si mon client décide de supprimer le produit lié (forfait couleur) dans le panier il faut que le produit maître ce supprime aussi, ce qui n'est pas le cas pour l'instant mais je pense que c'est un autre sujet qui n'a pas trop de rapport avec celui la donc je vais en créer un autre.

Je voulais juste terminer avec un grand merci pour l'aide qui m'a été donner même si la solution donner n'a pas fonctionner elle ma clairement permit d'étudier le problème sous un autre angle.


--------------------
osCommerce v2.3
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 28th March 2024 - 10:54
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)