Aide - Recherche - Membres - Calendrier
Version complète : [résolu]Limité le nombre de produit
Forum osCommerce-fr > Adapter OsCommerce MS2 > Contributions
yopyop22
Bonjour,

Je cherche une façon de pouvoir limité le nombre de produit que le client peut acheter.

Il arrive que je fasse des vente à perte et je voudrais que les clients ne peuvent pas en acheter plus de un à la fois. donc qu'il ne puisse pas placer les quantités à 2 ou un autre chiffres.

Merci à tous
blancheneige
Enlève la zone de saisie quantité sur la page shopping_cart.php !! Et force la valeur à 1 par un input hidden.
xaglo
je ne sais pas si la contribution existe mais son développement ne devrait pas être trop compliqué. Sur le principe que je verrais:
- tu ajoutes une colonne dans la table product
- tu ajoutes la saisie dans la fiche produit de l'admin pour renseigner ce champs
- tu mets une condition dans le shopping cart pour empêcher que le nombre de produits ne dépasse la valeur indiquée

c'est beaucoup plus simple que ça n'y parait et c'est une bonne façon de s'approprier le code d'OsC et d'apprendre un peu le php. La preuve, il y en a même qui sont arrivés à faire quelque chose s'approchant de ce principe sans rien connaitre au php (products_on_order)
xaglo
grillé par blancheneige biggrin.gif biggrin.gif

peut-être que la solution marche et serait beaucoup plus simple!!! 2/3 choses cependant:
1- cela sera valable pour TOUS les articles (d'où la nécessité d'ajouter un champs à renseigner dans l'admin si tu veux que ce ne soit valable QUE pour certains produits)
2- le champs de l'admin permettrait d'autoriser 2,3... ce qu'on veut comme nombre d'article achetable
3- il faut vérifier le comportement si la personne ajoute une deuxième fois l'article via le bouton "acheter" et donc peut-être fouiller un peu plus dans le shopping_cart
yopyop22
Bonjour,
effectivement la suggestion de blancheneige est pas bonne pour mon cas car je veux faire sa sur quelque produits seulement.

Donc les suggestions de Xaglo sont les meilleurs je vais attendre avant de me lancer pour voir s'il y a pas personne d'autre qui aurait déjà eu ce genre de chose a gérer

Merci pour vos suggestions
blancheneige


Question imprécise, réponse approximative.


Avec les précisions faites ensuite, la préconisation de xaglo est nettement meilleure.
alainsoundi
Je voudrais faire la même chose et j'ai presque trouvé la solution en adaptant une contrib.

dans shopping cart

après
CODE

     $products_name .= '    </td>' .
                       '  </tr>' .
                       '</table>';


je rajoute
CODE

if ($products[$i] ['quantity'] > 1 ) {

  $products[$i]['quantity']=1;

  echo '<script language="javascript">alert ("la quantité maximum pour ce produit  est 1.");</script>';



Résultat => ce mets toutes les quantité à 1.

Maintenant il faudrait qeu ça ne le fasse que sur une ref précise avec une isntruction du genre :

Si le panier contient la ref "X" et que si la quantité > 1 alors changer la quantité par 1.

Donc il me manque le début.

J'ai essayé
CODE

if ($model ="XX" $products[$i] ['quantity'] > 1 ) {

  $products[$i]['quantity']=1;

  echo '<script language="javascript">alert ("la quantité maximum pour ce produit  est 1.");</script>';


mais ça ne marche pas.

Qui qui peu m'aider ?


HA, si j'avais pris PHP au BAC... sad.gif
yopyop22
Salut,
j'ai trouvé une solution avec ma boutique pour que sa marche avec tes indiquations. Je voulais limité le nombre de produit uniquement quand je fais une vente flash , j'utilise la contribution flash selling.


Donc dans shopping carte j'ai ajouté

2- Après
CODE
   
$products_name .= '    </td>' .
                      '  </tr>' .
                      '</table>';


J'ai ajouté

CODE


//J'ouvre la table special pour savoir si le produit est une vente flash
$product_specials_product = tep_db_query("select specials_new_products_price, specials_price_flash_selling, status,  status_flash_selling  from " . TABLE_SPECIALS . " where products_id = '" . $products[$i]['id'] . "'  ");

$product_specials_product = tep_db_fetch_array($product_specials_product);

// Je fais la condition si la vente flash =1 tu dois les avertir
if (($product_specials_product['status_flash_selling'] == '1') & ($products[$i] ['quantity'] > 1)) {
 $products[$i]['quantity']=1;

 echo '<script language="javascript">alert ("La quantité maximum pour ce produit est 1.");</script>';
}


Sa fonctionne très bien, même s'il y a 2 produits différentes 1 en vente flash et l'autre non. On peux modifier la quantité de l'autre sans pouvoir changer la quantité de la vente flash

Merci à tous pour votre aide si précieuse
alainsoundi
J'ai essayé ça :
CODE

//Ouvrir la table Products
$products = tep_db_query("*  from " . Products . " where products_id = '" . $products[$i]['id'] . "'  ");

$products = tep_db_fetch_array($products);

// Changer la quantité si la quantité >1 pour la ref 152.30
if (($products['products_model'] == '152.30') & ($products[$i] ['quantity'] > 1)) {
$products[$i]['quantity']=1;

echo '<script language="javascript">alert ("La quantité maximum pour ce produit est 1.");</script>';
}


Mais ça ne marche pas.
Il doit y avoir une erreur de synthaxe.
PS. Je n'ai qu'un seul pdt concerné, c'est pour ça que je veux faire la modif "en dur" dans shopping_cart plutôt que de passer par une contrib.

Merci de votre aide
yopyop22
Salut,
effectivement il y a des erreurs, tu as pas placé de select et tu n'as pas donné le bon nom de table

Essais sa à la place

CODE

//Ouvrir la table Products
$products = tep_db_query("select products_model  from " . TABLE_PRODUCTS . " where products_id = '" . $products[$i]['id'] . "'  ");

$products = tep_db_fetch_array($products);

// Changer la quantité si la quantité >1 pour la ref 152.30
if (($products['products_model'] == '152.30') & ($products[$i] ['quantity'] > 1)) {
$products[$i]['quantity']=1;

echo '<script language="javascript">alert ("La quantité maximum pour ce produit est 1.");</script>';
}


C'est un drole de model 152.30 sa ressemble plus a un prix mais c'est toi qui le sais.

En espérant que sa t'aide

Bonne journée
alainsoundi
Ca ne marche pas.

Je laisse tomber pour le moment et je reviendrai dessus plus tard.

NB : c'est marrant que mes référence de forme 123.45 intriguent, plusieurs personnes le pensent aussi. Mais y'a pas de risque de confusion puisque le prix est indiqué sous la forme 9.99 Euro TTC.
yopyop22
Bonjour,
je place ce message pour informer les gens qui serais intéressé par sa.

La solution trouvé avant n'est pas bonne car le javascript avertit les gens et montre que le chiffre est 1 mais en réalité la quantité est 2 car elle a été mise a jour avant que le javascript entre en fonction.

J'ai donc changé de méthode , ce que je fais maintenant c'est que je fais disparaitre le champs ou l'on peux changer les quantité quand c'est un produit que je ne veux pas vendre plus d'une copie à la fois. Mais je fais quand même paraître le chiffre 1

Dans shopping_cart.php

à la ligne 169 j'ai ajouté
CODE

$product_specials_product = tep_db_query("select specials_new_products_price, specials_price_flash_selling, status,  status_flash_selling, flash_selling_end_date  from " . TABLE_SPECIALS . " where products_id = '" . $products[$i]['id'] . "'  ");

  $product_specials_product = tep_db_fetch_array($product_specials_product);

if (($product_specials_product['status_flash_selling'] == '1')) {

$nombre_supperieur_accepte = ( $products[$i]['quantity'] . tep_draw_hidden_field('cart_quantity[]', $products[$i]['quantity'], 'size="4"') . tep_draw_hidden_field('products_id[]', $products[$i]['id']));

}    
else {
$nombre_supperieur_accepte = (tep_draw_input_field('cart_quantity[]', $products[$i]['quantity'], 'size="4"') . tep_draw_hidden_field('products_id[]', $products[$i]['id']));

}  



ET j'ai modifé

CODE

     $info_box_contents[$cur_row][] = array('align' => 'center',
                                            'params' => 'class="productListing-data" valign="top"',
                                            'text' => tep_draw_input_field('cart_quantity[]', $products[$i]['quantity'], 'size="4"') . tep_draw_hidden_field('products_id[]', $products[$i]['id'];    



Par

CODE


     $info_box_contents[$cur_row][] = array('align' => 'center',
                                            'params' => 'class="productListing-data" valign="top"',
                                            'text' => $nombre_supperieur_accepte);


Et sa fonctionne très bien. De cette façon le nombre de produit ne peux jamais être modifié et on est quand même capable de l'effacer


Bonne journée à tous
alainsoundi
Effectivemet j'ai remarqué le pb (voir mon autre poste).
La qté se met bien sur 1 mais il faut cliquer sur le bouton recalculer.
Ma piste à moi c'est de lancer le recalcul automatique après avoir forcé la qté. Mais je n'ai pas encore trouvé.
Je trouve que c'est quand même plus propre car on indique au client qu'il ne peut pas en commander plus d'un.
yopyop22
Tu as effectivement raison, il faut prévenir le client.

Je le fais dans la fiche descriptive mais je viens d'ajouter un ** apr;es chiffre 1 avec une description en bas disant pourquoi on ne peux pas changer la quantité

Merci

Bonne journée
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2013 Invision Power Services, Inc.