Forum CMS Made Simple FR

Version complète : Products : prix en fonction du nombre d'articles
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.3
#~ Url du site :
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.10.3
#~ Installed Modules:
#~ CMSMailer: 2.0.2
#~ CMSPrinting: 1.0
#~ FileManager: 1.2.0
#~ MenuManager: 1.7.7
#~ MicroTiny: 1.1.1
#~ ModuleManager: 1.5.3
#~ News: 2.12.3
#~ Search: 1.7
#~ ThemeManager: 1.1.4
#~ CGExtensions: 1.29.1
#~ CGSimpleSmarty: 1.5.1
#~ Products: 2.18.2
#~ CGEcommerceBase: 1.3.11
#~ Cart: 1.8.4
#~ FormBuilder: 0.7.2
#~ CGGoogleMaps: 2.3.1
#~ JQueryTools: 1.1
#~ CGSmartImage: 1.9
#~ Showtime: 3.2
#~ TinyMCE: 2.9.9
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template: false
#~ output_compression: false
#~ max_upload_size: 64000000
#~ default_upload_permission: 664
#~ url_rewriting: mod_rewrite
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.3.14
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ E_DEPRECATED: 8192
#~ memory_limit: 128M
#~ max_execution_time: 120
#~ output_buffering: 4096
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 64M
#~ upload_max_filesize: 64M
#~ session_save_path: /tmp (1777)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ Server Information:
#~ Server Api: cgi-fcgi
#~ Server Db Type: MySQL (mysql)
#~ Server Db Version: 5.1.49
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour bonjour !
Pour le site sur lequel je travail j'utilise Products et cart pour présenter des produits et faire des demandes devis.
Jusque là, pas besoin de gérer les prix donc pas de problème.

En revanche, voilà qu'on me demande de faire deux pages spéciales pour des promotions ponctuelles, le panier devant pouvoir calculer les prix des articles.

Pour chaque produit le prix dépend de la quantité commandée.

La première promotion ne m'a pas trop posé de problème, j'ai modifié le gabarit du panier de telle sorte :
Code :
[== Indéfini ==]
{if $oneitem->quantity >= 25 && $oneitem->quantity < 50 && $oneitem->summary == 'Produit1'}

{$pricetext} : {capture assign="soustotal1"}{$oneitem->quantity*4.56}{/capture}{$oneitem->quantity*4.56} {$currencysymbol}

{/if}

J'ai donc mis une condition pour chaque quantité et pour le total du panier j'ai utilisé le code suivant :

Code :
[== Indéfini ==]
{$total_text} HT : {$soustotal1+$soustotal2+$soustotal3} {$currencysymbol}

Bon, là, ça fonctionne mais c'est juste une solution de secours pour peu d'articles et sans attributs.

Dans mon deuxième cas, j'ai des attributs (5 tailles et 24 couleurs) donc il me faut trouver une autre solution.

Dans le gabarit de détail de products le pris est affiché par : {$entry->price}
Je voulais savoir s'il est possible de lui assigner une autre valeur que celle qui est contenu dans le champ "prix" du produit, ou s'il existe un autre moyen ou bien si mon problème est une cause perdue.

Je suis allée voir les fichiers sources des modules pour tenter de comprendre comment le pris est transmis au panier et où sont stockées les données de ce dernier, mais j'ai pas tout saisi.

Sur ce, j'espère avoir été explicite.

Bonne journée à tous.
Je ne comprends pas exactement ce que tu désires.
Pourrais-tu donner des exemples concrets ?
N'oublie pas que tu as la doc de smarty à ta disposition, celle-ci en particulier : http://www.smarty.net/docs/en/language.f...n.math.tpl
Désolée si j'ai pas été très claire.

Alors j'ai trois articles et je souhaiterais que pour chacun d'eux il y ait un prix qui varie en fonction de la quantité.

Par exemple pour un t-shirt, si le client commande entre :

- 25 et 50 pièces = tarif 1
- 50 et 75 pièces = tarif 2... et ainsi de suite.

Comme dit dans le premier poste j'ai réussi à le faire pour une promotion précédente. On peut voir l'exemple ici.

Pour ces articles, je souhaiterais obtenir un panier de ce genre :

- 50 t-shirts blancs S à 5€ = 250 €
- 50 casquettes blanches à 4€ + 50 casquettes noires à 4€ (application du tarifs 100 casquettes à 2,5€) = 250€
- total panier = 500 €

La méthode utilisée pour le premier lien ne peut pas être appliquée puisque ces articles possèdent des attributs couleur et taille, et m'affiche le panier de cette manière :

- 50 t-shirts blanc s à 5 € = 250€
- 50 t-shirts noir s à 5€ = 250€
- Total = 250€

Voilà, j'espère que c'est moins embrouillé.
Merci pour le lien, je continue de potasser la doc smarty.
Et si tu travaillais uniquement en ajoutant la réduction une fois le panier remplit ?
Les prix normaux + la réduction.
et ça? tu as essayé?
http://dev.cmsmadesimple.org/projects/peritemshipping

<edit>non, je suis allé trop vite, c'est le prix du port en fonction du nombre...il faudrait clowner le module pour l'adapter à ton besoin</edit>
Oui, j'ai bien pensé à une chose de ce genre. Cela sous-entend que je fais un sous-total pour chaque modèle de casquette et un sous-total pour les t-shirts vu que les prix ne sont pas les mêmes.

Dans le gabarit par défaut seules les quantités par item sont affichées donc je cherche encore comment obtenir les quantités par type de produit.

Côté modules j'ai déjà regardé, effectivement il a de quoi calculer les taxes et les frais de ports, mais pas de quoi calculer un prix en fonction de la quantité. Il y a aussi le module Promotion mais lui non plus ne convient pas...
Une solution est de créer ta propre fonction d'ajout au panier. C'est ce que j'ai fait sur un site pour lequel j'avais besoin de personnaliser les produits.

Par exemple, dans une balise utilisateur :
Code :
[== Indéfini ==]
// Ajout d'un produit au panier
if (isset($_POST['ajouter_panier']) && isset($_POST['id_produit']))
{
    $cart = cg_ecomm::get_cart_module();
    $id_produit = $_POST['id_produit'];
    $quantite = $_POST['quantite'];
    if ($quantite <= 0)
        $quantite = 1;

    // Infos produit
    $product = cg_ecomm::get_product_info('Products', $id_produit);

    $item = new cg_ecomm_cartitem('', $id_produit, $quantite, 'Products');
    $item->set_type(cg_ecomm_cartitem::TYPE_PRODUCT);

    // ici on attribue le prix de base
    $item->set_base_price($product->get_price());

    // Tu peux donc avoir une logique du type :
    if ($quantite < 50)
        $item->set_base_price(10);
    else
        $item->set_base_price(8);

    $res = $cart->AddCartItem($item);

    if ($res)
        redirect_to_alias('panier');
    else
        echo 'erreur';
}

Puis dans products tu fais ton propre formulaire avec les champs "id_produit", "quantite" en POST que tu envoies vers une page qui contient ta balise utilisateur.

Je réfléchis de plus en plus à développer un module de produits qui gérerai ce genre d'options (prix dégressif), mais c'est un gros boulot et c'est pas prêt d'être prêt malheureusement Wink
Bonjour,

Tout d'abord merci pour vos idées et désolée de ne pas avoir donné de retour plus tôt.

Alors au final j'ai opté pour la solution d'Aire Libre qui fonctionne bien pour le calcul des prix.
Néanmoins, les attributs (couleur et taille) n'apparaissent plus lors de l'ajout au panier.

Bien entendu j'ai rajouté ces champs en POST dans products. Là où je bloque c'est comment modifier la balise utilisateur pour récupérer les valeurs des attributs sélectionnes.

Je suis allée voir les fichiers sources du module cart pour voir comment se faisait l'ajout au panier, et m'en inspirer pour la balise mais en vain.

Quelqu'un aurait-il une piste ?
Bonjour,

Là par contre, je ne sais pas, mais si tu étudies le code source de Cart ou de CGEcommerceBase tu devrais trouver... là j'ai pas beaucoup de temps pour voir, désolé :/
Y'a pas de mal, c'est déjà sympa d'avoir pris le temps de répondre.

Sinon, je me demandais s'il était possible de passer par les attributs du produit pour ajuster les prix.
Le soucis c'est comment sélectionner la bonne option de l'attribut en fonction de la quantité saisie par l'utilisateur ?