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] Master Products - suppression dans le panier, Supprimer aussi le produit maître en supprimant l'esclave
Rusti
posté 9 Mar 2012, 19:54
Message #1


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 62
Inscrit : 11-October 10
Membre no 28103



Voila je me sert de Master Products et j'aimerais que dans mon panier lorsque l'on supprime le produit dit esclave le produit maître qui lui est lié ce supprime aussi (et vice et versa).

Dans mon panier j'ai ajouter la modification qui permet de supprimer mon article en 1 clic et j'ai donc essayé de modifier ce morceau de code mais sans succès
Pour l'instant dans mon panier j'ai ce morceau de code qui permet de supprimer l'article :
Code
'<a href="' . tep_href_link(FILENAME_SHOPPING_CART, 'action=remove_product&products_id=' . $products[$i]['id']) . '">' . tep_image(DIR_WS_ICONS . 'ndc_picto_bin.gif', TABLE_HEADING_REMOVE, 11, 13) . '</a>'


et cette fonction dans application_top.php :
Code
      case 'remove_product' :  if (isset($HTTP_GET_VARS['products_id'])) {
                                 $cart->remove($HTTP_GET_VARS['products_id']);
                                 tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
                              }
                              break;


et la contribution master products nous fait rajouter le code suivant dans le panier (shopping_cart.php) :
Code
    $master_prod = tep_db_query("select products_master, products_master_status, products_listing_status from " . TABLE_PRODUCTS . " where products_id = '" . $products[$i]['id'] . "'");
    $master_prod_values = tep_db_fetch_array($master_prod);
    $prod_link_id = $master_prod_values['products_master'];


j'ai donc essayer de modifier mon code dans le panier en lui disant de supprimer le produit lié et le produit maître :
Code
'<a href="' . tep_href_link(FILENAME_SHOPPING_CART, 'action=remove_product&products_id=' . $products[$i]['id'] . '&products_id=' . $prod_link_id) . '">' . tep_image(DIR_WS_ICONS . 'ndc_picto_bin.gif', TABLE_HEADING_REMOVE, 11, 13) . '</a>'


problème sa marche pas, il voit bien l'id du produit lié et l'id du produit maître mais il n'en supprime qu'un seul (le produit maître).
Dois-je modifier plutôt ma fonction dans application_top.php ou dois-je continuer sur shopping_cart.php

Bref une petite aide serait la bienvenue.
Merci

Ce message a été modifié par Rusti - 30 Mar 2012, 22:03.


--------------------
osCommerce v2.3
Go to the top of the page
 
Rusti
posté 19 Mar 2012, 07:06
Message #2


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 62
Inscrit : 11-October 10
Membre no 28103



Bon je progresse mais j'ai du mal.
Est ce que quelqu'un pourrait me dire la syntaxe qui permet de dire ci tel article est dans mon panier alors je fait tel action.
Je pensais que c'était $cart->content qui permettait de voir ce qui était dans le panier mais j'ai beau essayé différente choses, impossible de lui dire de supprimer l'esclave et le maître en même temps.
Je pense que quelque chose m'échappe mais je vois pas ou.

Merci


--------------------
osCommerce v2.3
Go to the top of the page
 
Gnidhal
posté 19 Mar 2012, 23:04
Message #3


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9206
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Ne touche pas à la classe shopping_cart à moins de bien savoir ce que tu fais... wink.gif

Tu ne peux passer qu'un seul id de produit depuis le panier car l'info est passé en get et que application_top se charge de récupérer l'action à faire ($_GET['action']) et l'id du produit ($_GET['products_id']).
C'est donc là que tu dois agir (dans application_top)
quand tu supprimes un produit tu as bien identifié la section qui l'enlève du panier :
Code
                             case 'remove_product' :  if (isset($HTTP_GET_VARS['products_id'])) {
                                 $cart->remove($HTTP_GET_VARS['products_id']);
                                 tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
                              }
                              break;

Donc avant la redirection (tep_redirect...) récupère l'id de ton produit maître avec la requête que tu cites plus bas (une fonction générique déportée pourrait faire cela) et supprime le aussi du panier avec $cart->remove()
pour bien faire, il faudrait tester :
1 que l'id du master existe
2 que le master est bien dans le panier.
Sinon des erreurs peuvent s'afficher.



--------------------
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é 25 Mar 2012, 15:26
Message #4


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 62
Inscrit : 11-October 10
Membre no 28103



Désolé d'avoir mis si longtemps à répondre,
Donc j'ai créer une fonction pour récupérer mes id comme tu me la conseillé Gnidhal, la voici :
Code
    function master_in_cart($products_id) {
     global $cart;
      
      $value_id = $products_id;
      foreach ($cart->contents as $key => $value) {
        $prod_id = explode('{',$key);
        if ($prod_id[0] == $products_id) {
        $value_id = $prod_id[0];
        }
      }
      return $value_id;
    }

Alors si j'intègre le tout à mon panier (shopping_cart.php) et que j'ajoute le code suivant :
Code
    $master_prod = tep_db_query("select products_master, products_master_status, products_listing_status from " . TABLE_PRODUCTS . " where products_id = '" . $products[$i]['id'] . "'");
    $master_prod_values = tep_db_fetch_array($master_prod);
      if (!master_in_cart($master_prod_values['products_master'])) {
        $master_link_id = $products[$i]['id'];
      }
      if ($master_prod_values['products_master'] == $master_link_id) {
        $prod_link_id = $master_prod_values['products_master'];
      } else {
        $prod_link_id = $products[$i]['id'];
      }
     $info_box_contents[$cur_row][] = array('align' => 'center',
                                             'params' => 'class="productListing_image" valign="midlle" width="20px"',
                                             'text' => '<a class="opacity_min" href="' . tep_href_link(FILENAME_SHOPPING_CART, 'action=remove_product&products_id=' . $prod_link_id) . '">' . tep_image(DIR_WS_ICONS . 'ndc_picto_bin.gif', TABLE_HEADING_REMOVE, 11, 13) . '</a>');

là si mon client décide de supprimer le produit esclave (forfait couleur dans mon cas), c'est le produit maître qui ce supprime en premier puis il faut qu'il clique une seconde fois pour supprimer le forfait couleur (produit esclave).
Donc dans un sens sa me convient (a moitié) puisqu'il ne faut surtout pas qu'il puisse supprimer uniquement le forfait couleur mais sa aurait été beaucoup mieux si on pouvait supprimer les deux en même temps.
Problème je n'arrive pas en passant par la case remove_product du fichier application_top.php à lui faire comprendre ma demande, en fait soit il me supprime rien, soit (au malheur) il me supprime le produit esclave mais jamais il me supprime le produit maître et le produit esclave.

Voici le code que j'ai mis dans application_top :
Code
      case 'remove_product' : if (isset($HTTP_GET_VARS['products_id'])) {
                                  $master_prod = tep_db_query("select products_master, products_master_status, products_listing_status from " . TABLE_PRODUCTS . " where products_id = '" . $HTTP_GET_VARS['products_id'] . "'");
                                  $master_prod_values = tep_db_fetch_array($master_prod);
                                  if (!master_in_cart($master_prod_values['products_master'])) {
                                $master_link_id = $HTTP_GET_VARS['products_id'];
                                  }
                                  if ($master_prod_values['products_master'] == $master_link_id) {
                                 $cart->remove($master_prod_values['products_master'] && $cart->remove($HTTP_GET_VARS['products_id']));
                                  } else {
                                 $cart->remove($HTTP_GET_VARS['products_id']);
                                  }
                                 tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
                              }
                              break;

et la fonction master_in_cart est intégré au fichier general.php
Voila je ne comprend pas d'ou vient mon erreur pourquoi sa fonctionne dans shopping_cart et pas application_top.

Merci

EDIT :
bon en modifiant remove_product de cette façon :
Code
      case 'remove_product' : if (isset($HTTP_GET_VARS['products_id'])) {
                                  $master_prod = tep_db_query("select products_master, products_master_status, products_listing_status from " . TABLE_PRODUCTS . " where products_id = '" . $HTTP_GET_VARS['products_id'] . "'");
                                 $master_prod_values = tep_db_fetch_array($master_prod);
                                 $cart->remove($HTTP_GET_VARS['products_id'], $cart->remove($master_prod_values['products_master']));
                                 tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
                              }
                              break;


Je m’aperçois que sa fonctionne, le produit maître et esclave est sont bien supprimer.
Mais pourquoi j'ai l'impression que ma première idée avec la fonction master_in_cart pour récupérer les id (comme conseillé par Gnidhal) était meilleur.

Merci

Ce message a été modifié par Rusti - 25 Mar 2012, 16:54.


--------------------
osCommerce v2.3
Go to the top of the page
 
Rusti
posté 30 Mar 2012, 22:02
Message #5


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 62
Inscrit : 11-October 10
Membre no 28103



Bon pour ceux qui comme moi voudrais supprimer le produit esclave et le produit maître en même temps (et qui utilise la suppression en un clic dans leur panier case 'remove_product')le code suivant fonctionne :

Dans application_top.php :
Code
case 'remove_product' : if (isset($HTTP_GET_VARS['products_id'])) {
                                    $master_prod = tep_db_query("select products_master, products_master_status, products_listing_status from " . TABLE_PRODUCTS . " where products_id = '" . $HTTP_GET_VARS['products_id'] . "'");
                                    $master_prod_values = tep_db_fetch_array($master_prod);
                                    $cart->remove($HTTP_GET_VARS['products_id'], $cart->remove($master_prod_values['products_master']));
                                    tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
                              }
                              break;


Maintenant avec ce code aucune vérification n'est faite (voir le post de Gnidhal au dessus) donc j'ai un autre code avec une fonction déportée et les vérifications, le soucis est que je ne me sert pas de Master Product pour ce qui la été conçu au départ et ma boutique est déjà très modifier donc je ne le post pas mais si quelqu’un le veux quand même il suffit juste de me le demander, je le posterais ou l'enverais.
Merci


--------------------
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 : 22nd September 2014 - 05:13
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)