[Résolu] Option Types : pb avec les options dans le panier

Messagepar Gil1256 » Mar 20 Juil 2010, 00:45

Bonsoir à vous,

Cela fait un temps que j'ai installé la contribution Option Types. Rapidement, elle permet de créer des options produits tels que des cases à cocher, des boutons radios, des uploads, des champs de saisie texte, etc. Elle m'intéressait justement pour les champs de texte.
La voilà donc installée. Dès lors que je sélectionne tout un tas d'options sur un produit, le calcul des tarifs supplémentaires s'effectue bien, le produit s'ajoute au panier avec la liste des options sélectionnées (et notamment le texte saisi).
Seulement voilà, lorsque je souhaite ajouter un produit différent (avec seule l'option "taille" par exemple), le prix supplémentaire s'ajoute correctement, mais dans le panier, à la ligne correspondant au 2ème produit, je me retrouve avec toutes les options du 1er produit (en plus de l'option "taille"). Le prix du 2ème est cependant tout à fait correct (le calcul ne prend en compte que l'option "taille").
Le "pire" est qu'en ajoutant un 3ème produit, sans aucune option de sélectionnée, ce même produit se retrouve dans le panier avec les options des deux autres produits... et ainsi de suite !
J'ai bien mis la condition suivante
Code: Tout sélectionner
<?php
   if (tep_not_null($attributes_values['products_options_name'])) {
  echo $products_options;
   } else {
  }
   ?>

Mais rien n'y fait.
Quelqu'un connaît-il cette contribution et si oui a-t-il eu le même souci que moi ?
Je suis bien entendu prêt à balancer le contenu des mes fichiers "includes/content/shopping_cart.php et "includes/classes/shopping_cart.php" à celui qui a envie de fouiller... Je ne vois guère d'autres fichiers pouvant être en cause.
Je sèche.
Dernière édition par Gil1256 le Mer 21 Juil 2010, 23:25, édité 1 fois.
Gil1256
Membre très actif
 
Messages: 108
Inscription: Jeu 21 Mai 2009, 01:16

Messagepar oscim » Mar 20 Juil 2010, 00:51

Je pense que ton problème vient du shopping cart. la class.

Cela dit, il me semble me souvenir que dans cetet contrib il est necessaire de revoir la fonction qui gere les id de produits avec attribut. genre (11{1-2}).

dans general je croit.

Je sais plus bien, elle sont intégres à la V2, mais j'ai installé en même temps le poids et de 3 bidouille.

Cela dis, tu as installé aussi Qtpro ? ou pas ?
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Messagepar Gil1256 » Mar 20 Juil 2010, 14:22

Merci Oscim.

Les id des options choisies s'intègrent bien à l'url sous la forme product_info.php?products_id=31{1}2{3}6 par exemple. Cela fonctionne bien : en revenant à la fiche produit à partir de cet url, je dispose bien en retour des options choisies.

Non, je n'ai pas installé Qtpro.

Je mets ci-dessous le contenu de includes/classes/shopping_cart.php, dans le cas où tes yeux se posent sur un problème... Les modifications apportées à ce fichier sont localisées avec le mention Option Types.

Code: Tout sélectionner
<?php
/*
  $Id: shopping_cart.php,v 1.2 2005/05/21 17:14:01 manmachine Exp $
+-----------------------------------------------------------------------+
|                  osCSS Open Source E-commerce                         |
+-----------------------------------------------------------------------+
| Copyright (c) 2005 The osCSS developers                               |
|                                                                       |
| http://www.oscss.org                                       |
|                                                                       |
| Portions Copyright (c) 2003 osCommerce                                |
+-----------------------------------------------------------------------+
| This source file is subject to version 2.0 of the GPL license,        |
| available at the following url:                                       |
| http://www.oscss.org/license/2_0.txt.                      |
+-----------------------------------------------------------------------+
*/

  class shoppingCart {
    var $contents, $total, $weight, $cartID, $content_type;

    function shoppingCart() {
      $this->reset();
    }

    function restore_contents() {
      global $customer_id;

      if (!tep_session_is_registered('customer_id')) return false;

// insert current cart contents in database
      if (is_array($this->contents)) {
        reset($this->contents);
        while (list($products_id, ) = each($this->contents)) {
          $qty = $this->contents[$products_id]['qty'];
          $product_query = tep_db_query("select products_id from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
          if (!tep_db_num_rows($product_query)) {
            tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET . " (customers_id, products_id, customers_basket_quantity, customers_basket_date_added) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id) . "', '" . $qty . "', '" . date('Ymd') . "')");
            if (isset($this->contents[$products_id]['attributes'])) {
// Option Types -->
     $uploads_query = tep_db_query("select files_uploaded_name from " . TABLE_FILES_UPLOADED . " where sesskey = '" . tep_session_id() . "'");
              while ($uploads_array = tep_db_fetch_array($uploads_query)) {
                if (file_exists(TMP_DIR . $uploads_array['files_uploaded_name'])) {
                  @rename(TMP_DIR . $uploads_array['files_uploaded_name'], UPL_DIR . $uploads_array['files_uploaded_name']);
                  tep_db_query("update " . TABLE_FILES_UPLOADED . " set customers_id = '" . (int)$customer_id . "' where sesskey = '" . tep_session_id() . "' and files_uploaded_name = '" . $uploads_array['files_uploaded_name'] . "'");
                }
              }
// <-- Option Types     
              reset($this->contents[$products_id]['attributes']);
              while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
        // Option Types -->
       $attr_value = $this->contents[$products_id]['attributes_values'][$option];
                //tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id) . "', '" . (int)$option . "', '" . (int)$value . "')");
        tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id, products_options_value_text) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id) . "', '" . $option . "', '" . (int)$value . "', '" . tep_db_input($attr_value) . "')");
       // <-- Option Types
              }
            }
          } else {
            tep_db_query("update " . TABLE_CUSTOMERS_BASKET . " set customers_basket_quantity = '" . $qty . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
          }
        }
      }

// reset per-session cart contents, but not the database contents
      $this->reset(false);

      $products_query = tep_db_query("select products_id, customers_basket_quantity from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "'");
      while ($products = tep_db_fetch_array($products_query)) {
        $this->contents[$products['products_id']] = array('qty' => $products['customers_basket_quantity']);
// attributes
        // Option Types -->
   //$attributes_query = tep_db_query("select products_options_id, products_options_value_id from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products['products_id']) . "'");
   $attributes_query = tep_db_query("select products_options_id, products_options_value_id, products_options_value_text from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products['products_id']) . "'");
    // <-- Option Types
        while ($attributes = tep_db_fetch_array($attributes_query)) {
          $this->contents[$products['products_id']]['attributes'][$attributes['products_options_id']] = $attributes['products_options_value_id'];
     // Option Types -->
     if ($attributes['products_options_value_id'] == OPTIONS_VALUE_TEXT_ID) {
            $this->contents[$products['products_id']]['attributes_values'][$attributes['products_options_id']] = $attributes['products_options_value_text'];
          }
     // <-- Option Types
        }
      }

      $this->cleanup();
    }

    function reset($reset_database = false) {
      global $customer_id;

      $this->contents = array();
      $this->total = 0;
      $this->weight = 0;
      $this->content_type = false;

      if (tep_session_is_registered('customer_id') && ($reset_database == true)) {
        tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "'");
        tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "'");
      }

      unset($this->cartID);
      if (tep_session_is_registered('cartID')) tep_session_unregister('cartID');
    }

// add ms2 maj a verif..
function add_cart($products_id, $qty = '1', $attributes = '', $notify = true) {
  global $new_products_id_in_cart, $customer_id;

  $products_id_string = tep_get_uprid($products_id, $attributes);
  $products_id = tep_get_prid($products_id_string);

  if (is_numeric($products_id) && is_numeric($qty)) {
    $check_product_query = tep_db_query("select products_status from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'");
    $check_product = tep_db_fetch_array($check_product_query);

    if (($check_product !== false) && ($check_product['products_status'] == '1')) {
      if ($notify == true) {
        $new_products_id_in_cart = $products_id;
        tep_session_register('new_products_id_in_cart');
      }

      if ($this->in_cart($products_id_string)) {
        $this->update_quantity($products_id_string, $qty, $attributes);
      } else {
        $this->contents[$products_id_string] = array('qty' => $qty);
// insert into database
        if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET . " (customers_id, products_id, customers_basket_quantity, customers_basket_date_added) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$qty . "', '" . date('Ymd') . "')");

        if (is_array($attributes)) {
          reset($attributes);
          while (list($option, $value) = each($attributes)) {
      // Option Types -->
     $attr_value = NULL;
                $blank_value = FALSE;
                if (strstr($option, TEXT_PREFIX)) { 
                  if (trim($value) == NULL) {
                    $blank_value = TRUE;
                  } else {                               
                    $option = str_replace(TEXT_PREFIX,'',$option);
                    $attr_value = htmlspecialchars(stripslashes($value), ENT_QUOTES);
                    $value = OPTIONS_VALUE_TEXT_ID;
                    $this->contents[$products_id_string]['attributes_values'][$option] = $attr_value;
                  }
                }

                if (!$blank_value) { 
     // <-- Option Types
     $this->contents[$products_id_string]['attributes'][$option] = $value;
// insert into database
            // Option Types -->
     //if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$option . "', '" . (int)$value . "')");
     if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id, products_options_value_text) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . $option . "', '" . (int)$value . "', '" . tep_db_input($attr_value) . "')");
                }
     // <-- Option Types
          }
        }
      }

      $this->cleanup();

// assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure
      $this->cartID = $this->generate_cart_id();
    }
  }
}

// add ms2 maj a verif..
function update_quantity($products_id, $quantity = '', $attributes = '') {
  global $customer_id;

  $products_id_string = tep_get_uprid($products_id, $attributes);
  $products_id = tep_get_prid($products_id_string);

  if (is_numeric($products_id) && isset($this->contents[$products_id_string]) && is_numeric($quantity)) {
    $this->contents[$products_id_string] = array('qty' => $quantity);
// update database
    if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET . " set customers_basket_quantity = '" . (int)$quantity . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "'");

    if (is_array($attributes)) {
      reset($attributes);
      while (list($option, $value) = each($attributes)) {
    // Option Types -->
   $attr_value = NULL;
           $blank_value = FALSE;
            if (strstr($option, TEXT_PREFIX)) { 
              if (trim($value) == NULL) {
                $blank_value = TRUE;
              } else {                               
                $option = str_replace(TEXT_PREFIX,'',$option);
                $attr_value = htmlspecialchars(stripslashes($value), ENT_QUOTES);
                $value = OPTIONS_VALUE_TEXT_ID;
                $this->contents[$products_id_string]['attributes_values'][$option] = $attr_value;
              }
            }
            if (!$blank_value) {
   // <-- Option Types
        $this->contents[$products_id_string]['attributes'][$option] = $value;
// update database
        // Option Types -->
   //if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " set products_options_value_id = '" . (int)$value . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "' and products_options_id = '" . (int)$option . "'");
   if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " set products_options_value_id = '" . (int)$value . "', products_options_value_text = '" . tep_db_input($attr_value) . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "' and products_options_id = '" . (int)$option . "'");
            }
    // <-- Option Types
      }
    }
  }
}

    function cleanup() {
      global $customer_id;

      reset($this->contents);
      while (list($key,) = each($this->contents)) {
        if ($this->contents[$key]['qty'] < 1) {
          unset($this->contents[$key]);
// remove from database
          if (tep_session_is_registered('customer_id')) {
            tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
            tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
          }
        }
      }
    }

    function count_contents() {  // get total number of items in cart
      $total_items = 0;
      if (is_array($this->contents)) {
        reset($this->contents);
        while (list($products_id, ) = each($this->contents)) {
          $total_items += $this->get_quantity($products_id);
        }
      }

      return $total_items;
    }

    function get_quantity($products_id) {
      if (isset($this->contents[$products_id])) {
        return $this->contents[$products_id]['qty'];
      } else {
        return 0;
      }
    }

    function in_cart($products_id) {
      if (isset($this->contents[$products_id])) {
        return true;
      } else {
        return false;
      }
    }

    function remove($products_id) {
      global $customer_id;
   
// Option Types -->
   $products_id = tep_get_uprid($products_id, $attributes);
// <-- Option Types
   
      unset($this->contents[$products_id]);
// remove from database
      if (tep_session_is_registered('customer_id')) {
        tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
        tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
      }

// assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure
      $this->cartID = $this->generate_cart_id();
    }

    function remove_all() {
      $this->reset();
    }

    function get_product_id_list() {
      $product_id_list = '';
      if (is_array($this->contents)) {
        reset($this->contents);
        while (list($products_id, ) = each($this->contents)) {
          $product_id_list .= ', ' . $products_id;
        }
      }

      return substr($product_id_list, 2);
    }

    function calculate() {
      $this->total = 0;
      $this->weight = 0;
      if (!is_array($this->contents)) return 0;

      reset($this->contents);
      while (list($products_id, ) = each($this->contents)) {
        $qty = $this->contents[$products_id]['qty'];

// products price
        $product_query = tep_db_query("select products_id, products_price, products_tax_class_id, products_weight from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'");
        if ($product = tep_db_fetch_array($product_query)) {
          $prid = $product['products_id'];
          $products_tax = tep_get_tax_rate($product['products_tax_class_id']);
          $products_price = $product['products_price'];
          $products_weight = $product['products_weight'];

          $specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'");
          if (tep_db_num_rows ($specials_query)) {
            $specials = tep_db_fetch_array($specials_query);
            $products_price = $specials['specials_new_products_price'];
          }

          $this->total += tep_add_tax($products_price, $products_tax) * $qty;
          $this->weight += ($qty * $products_weight);
        }

// attributes price
        if (isset($this->contents[$products_id]['attributes'])) {
          reset($this->contents[$products_id]['attributes']);
          while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
            $attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$prid . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "'");
            $attribute_price = tep_db_fetch_array($attribute_price_query);
            if ($attribute_price['price_prefix'] == '+') {
              $this->total += $qty * tep_add_tax($attribute_price['options_values_price'], $products_tax);
            } else {
              $this->total -= $qty * tep_add_tax($attribute_price['options_values_price'], $products_tax);
            }
          }
        }
      }
    }

    function attributes_price($products_id) {
      $attributes_price = 0;

      if (isset($this->contents[$products_id]['attributes'])) {
        reset($this->contents[$products_id]['attributes']);
        while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
          $attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$products_id . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "'");
          $attribute_price = tep_db_fetch_array($attribute_price_query);
          if ($attribute_price['price_prefix'] == '+') {
            $attributes_price += $attribute_price['options_values_price'];
          } else {
            $attributes_price -= $attribute_price['options_values_price'];
          }
        }
      }

      return $attributes_price;
    }

    function get_products() {
      global $languages_id;

      if (!is_array($this->contents)) return false;

      $products_array = array();
      reset($this->contents);
      while (list($products_id, ) = each($this->contents)) {
        $products_query = tep_db_query("select p.products_id, pd.products_name, pd.products_subtitle, p.products_model, p.products_quantity, p.products_category, p.products_image, p.products_price, p.products_price_up, p.products_weight, p.products_tax_class_id, s.specials_new_products_price from " . TABLE_PRODUCTS . " p, " . TABLE_SPECIALS . " s, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$products_id . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
        if ($products = tep_db_fetch_array($products_query)) {
          $prid = $products['products_id'];
          $products_price = $products['products_price'];

          $specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'");
          if (tep_db_num_rows($specials_query)) {
            $specials = tep_db_fetch_array($specials_query);
            $products_price = $specials['specials_new_products_price'];
          }

          $products_array[] = array('id' => $products_id,
                                    'name' => $products['products_name'],
                 'subtitle' => $products['products_subtitle'],
                                    'model' => $products['products_model'],
                                    'image' => $products['products_image'],
                 // Option Types -->
                 'attributes_values' => (isset($this->contents[$products_id]['attributes_values']) ? $this->contents[$products_id]['attributes_values'] : ''),
                 // <-- Option Types
                 'category' => $products['products_category'],
                                    'price' => $products['products_price'],
                  'price_up' => $products['products_price_up'],
                 'stock' => $products['products_quantity'],
                                    'quantity' => $this->contents[$products_id]['qty'],
                 'specials' => $products['specials_new_products_price'],
                                    'weight' => $products['products_weight'],
                                    'final_price' => ($products_price + $this->attributes_price($products_id)),
                                    'tax_class_id' => $products['products_tax_class_id'],
                                    'attributes' => (isset($this->contents[$products_id]['attributes']) ? $this->contents[$products_id]['attributes'] : ''));
        }
      }

      return $products_array;
    }

    function show_total() {
      $this->calculate();

      return $this->total;
    }

    function show_weight() {
      $this->calculate();

      return $this->weight;
    }

    function generate_cart_id($length = 5) {
      return tep_create_random_value($length, 'digits');
    }

    function get_content_type() {
      $this->content_type = false;

      if ( (DOWNLOAD_ENABLED == 'true') && ($this->count_contents() > 0) ) {
        reset($this->contents);
        while (list($products_id, ) = each($this->contents)) {
          if (isset($this->contents[$products_id]['attributes'])) {
            reset($this->contents[$products_id]['attributes']);
            while (list(, $value) = each($this->contents[$products_id]['attributes'])) {
              $virtual_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad where pa.products_id = '" . (int)$products_id . "' and pa.options_values_id = '" . (int)$value . "' and pa.products_attributes_id = pad.products_attributes_id");
              $virtual_check = tep_db_fetch_array($virtual_check_query);

              if ($virtual_check['total'] > 0) {
                switch ($this->content_type) {
                  case 'physical':
                    $this->content_type = 'mixed';

                    return $this->content_type;
                    break;
                  default:
                    $this->content_type = 'virtual';
                    break;
                }
              } else {
                switch ($this->content_type) {
                  case 'virtual':
                    $this->content_type = 'mixed';

                    return $this->content_type;
                    break;
                  default:
                    $this->content_type = 'physical';
                    break;
                }
              }
            }
          } else {
            switch ($this->content_type) {
              case 'virtual':
                $this->content_type = 'mixed';

                return $this->content_type;
                break;
              default:
                $this->content_type = 'physical';
                break;
            }
          }
        }
      } else {
        $this->content_type = 'physical';
      }

      return $this->content_type;
    }

    function unserialize($broken) {
      for(reset($broken);$kv=each($broken);) {
        $key=$kv['key'];
        if (gettype($this->$key)!="user function")
        $this->$key=$kv['value'];
      }
    }

  }
?>
Gil1256
Membre très actif
 
Messages: 108
Inscription: Jeu 21 Mai 2009, 01:16

Messagepar oscim » Mar 20 Juil 2010, 14:33

La comme ca je ne voit pas, de tête ca se joue soit dans upate_quantity, soit dans add_cart.

J'ai eu le même probleme, je me souviens plus comment j'ai reglé.

Sinon, si tu regarde les infos arrivant à la class shopping cart, lors add ou update d'un item du panier. Tu as toutes tes info qui arrive correct.

Ca passe par les appel de application top qui intercepte les action au panier ?
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Messagepar Gil1256 » Mer 21 Juil 2010, 11:53

J'ai vérifié jusqu'à tard hier soir les fichiers includes/classes/shopping_cart.php et application_top.php, au niveau des fonctions update et add, mais rien. Les ai comparés aux fichiers sources de la contribution, mais rien.
Quand j'ajoute un produit avec options au panier, je dispose bien au niveau de l'url du produit dans le panier de toutes les indications propres aux options choisies (du type "{1}2{3}6" par exemple).

Je résume ici :

Si ajout produit n°1 avec options :
panier = produit n°1 avec options produit n°1

Si ajout produit n°2 avec options :
panier = produit n°1 avec options produit n°1
= produit n°2 avec options produits n°1 + options produit n°2

Si ajout produit n°3 sans options :
panier = produit n°1 avec options produit n°1
= produit n°2 avec options produits n°1 + options produit n°2
= produit n°3 avec options produits n°1 + options produit n°2

A signaler qu'ici, à chaque fois, le calcul du prix s'opère correctement au niveau du panier (pas de cumul d'options entre les différents produits... et ce malgré le fait que le produit n°2 par exemple dispose dans le détail du panier de ses propres options ainsi que de celles du produit n°1). D'autre part, l'url des produit est correct (seuls les produits sélectionnés avec options disposent d'une url du type product_info.php?products_id=31{1}2{3}6).

Le truc c'est que le détail entre les différents produits ajoutés s'opère correctement au niveau du checkout_confirmation... Je regarde ce soir comment le retour des options se fait dans ce cadre, histoire de le calquer sur le shopping_cart. En définitive, mon souci au niveau du panier n'est qu'un problème de détails d'options de produits. Tout se déroule correctement sinon !

J'ai posté un message sur le forum US. Je revois la chose ce soir... mais si pas de solution, je me verrai contraint de retirer du panier le détail des options, et de les conserver au niveau de la confirmation de commande. Dommage...

Vous tiens au courant.
Gil1256
Membre très actif
 
Messages: 108
Inscription: Jeu 21 Mai 2009, 01:16

Messagepar oscim » Mer 21 Juil 2010, 12:46

Logiquement ca doit marcher, je 'l'est inatllé dans la v2, et c'est ok.

effectivement , ej n'avais pas bine lu ton post, mais il semble bien que le pbs viennent de l'affichage du panier et rien d'autre.

Dans ce cas, un truc bete, mais il ne verifie pas un sous tableau attribute, dans la boucle des produits ? Je ne sais plus bien compte tenu, que sur la v2, a ce niveau ca à pas mal changé.

Mais il me semblait qu'il verifier un sous tableau. Dans cette boucle du produit, si tu utilise un print_r, tes tableau sont correct ?

Pour ce qui est nuance entre order/cart, en fait il y as 2 boucles, qui refont les même traitement ou presque, l'une dans order.php, et l'autre dans le content/schopping_cart.

Donc effectivement, il s'appuie tous les 2 sur la base de la class shopping_cart, cependant, il restructure les donnée pour les exploiter apres.
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Messagepar Gil1256 » Mer 21 Juil 2010, 23:28

C'est ok !
Ma faute en définitive. En adaptant la contribution Option Types à osCSS, j'ai mal interprété les boucles en reformulant notamment les fameux $info_box_contents, du coup il y avait répétition des options...
Tout fonctionne comme je le souhaite... désolé pour le dérangement.
:coucou:
Gil1256
Membre très actif
 
Messages: 108
Inscription: Jeu 21 Mai 2009, 01:16


Retourner vers Plugin

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron