Forum CMS Made Simple FR

Version complète : [Résolu] Module Products : ajout d'un forfait
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.11.2
#~ Hébergeur / Soft : infomaniak
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~




Bonjour,

Voilà, je dois réaliser une partie "shop" pour un site internet vendant des cours de langues,

et cela devrait se passer ainsi :

la personne choisit un type de cours dans une certaine langue puis le nombre de périodes voulues, le calcul du prix se fait puis il devrait être ajouté un forfait matériel, puis cette somme ajoutée au panier.

Ex : 3 périodes du cours XYZ anglais = 3 x 500.- + 100.- de forfait = 1600.-

tout se passe bien jusqu'à l'ajout du forfait que je n'arrive pas à réaliser.

J'ai installé les modules CGEcommercebase, CGPaymentGateway, Products, Cart, ,FRShipping, FRtaxes, FrontEndUser, Order, et Paypalgateway.

J'ai ajouté au module products un champs "fees", et j'arrive à additionner le forfait au prix mais seulement à l'affichage de l'article, dans le template comme ceci :

Code :
[== Indéfini ==]
{if $field->name =='fees'}{$field->value} ] {$entry->price+$field->value assign="price"}{/if}

Cela fait quelques jours que je tourne sur les forums etc, mais je ne m'en sors pas... si quelqu'un peux m'aider Smile

Ce serait très apprécié.

Bonne journée

David
je ne t'apporterai pas de réponse, ne connaissant pas assez le module

mais par contre IL FAUT que tu te mette à jour ! ta version possède des failles de sécu et tout le monde connait ton site.

Traine pas Wink
Merci pour la remarque, mais j'ai un souci avec le safephp que je n'arrive pas à contourner chez infomaniak, malgré leur information sur le htaccess, peut-être pourra tu m'aider de ce côté ci, pour que je puisse passer en version 1.11 Smile
Bonjour,
essaie : $field->fees->value ou $field->fees.value
Pour dumper ta variable :{$field|var_dump}
ouvre un topic pour l'upgrade de ton site en parallèle alors Wink
Merci à Bess,

J'ai finallement réessayé de mettre à jour et cela à fonctionné donc je suis en 1.11.2.1 "Isabela", parcontre c'est toujours l'ancien template d'admin, m'enfin, puisque cela fonctionne, on évitera un topic supplémentaire pour l'instant Smile

Merci à Jissey,

si je dump la variable :

Code :
[== Indéfini ==]
object(stdClass)#294 (8) { ["id"]=> string(1) "1" ["name"]=> string(4) "fees" ["prompt"]=> string(7) "forfait" ["type"]=> string(7) "textbox" ["options"]=> array(1) { [""]=> string(0) "" } ["max_length"]=> string(3) "255" ["value"]=> string(2) "50" ["fielddef_id"]=> string(1) "1" }


Avec mon bout de code de l'autre fois :
Code :
[== Indéfini ==]
{$entry->price+$field->value assign="price"}
Ca m'ajoute bien le forfait au prix de base, mais je ne sais pas comment lui dire au moment où la personne clique sur ajouter au panier que le module fasse : prix de base x quantité + forfait et envoie le résultat au panier.
Citation :parcontre c'est toujours l'ancien template d'admin

normal, faut choisir le nouveau dans tes paramètres de compte utilisateur côté admin
Je ne connais pas le module pour pouvoir t'aider, mais tu peux sans doute glisser une balise utilisateur (UDT) quelque part pour faire cette opération?
J'essaie justement de trouver où le calcul (prix du produit x quantité) ce fait... mais je ne l'ai pas encore trouvé.

Si je le trouve il me suffirait d'y ajouter (+fees) et cela devrait fonctionner logiquement.

Mais je peine à comprendre comment les infos sont envoyé au cart et où elles sont traitées,

A la fin du detailtemplate du produit il y a ca :

Code :
[== Indéfini ==]
{cge_have_module m='CGEcommerceBase' assign='tmp'}
{if $tmp}
<div>
{cgecomm_form_addtocart product=$entry->id}
</div>
{/if}


et visiblement il y a un bout avant qui permet de faire une opération de réduction :

Code :
[== Indéfini ==]
{* promo_get_prod_discount product_id=$entry->id assign='foo' *}
{if isset($foo.promo_id)}
<span style="color: red;">Discount:  {$currency_symbol}{$foo.discount|number_format:2} ({$foo.percentage|number_format:2}%)</span><br/>
{if $entry->price ne ''}
Price {$currency_symbol}: {$entry->price * $foo.decimal|number_format:2}<br />
{/if}
{elseif $entry->price ne ''}
Price {$currency_symbol}: {$entry->price}<br />
{/if}

Mais cela me paraîtrait étrange que le simple fait de faire un {$entry->price+$field->value}
règle la question... mais je vais tester quand même Smile
On s'est croisé, regarde le post au-dessus.
Et ici : http://www.smarty.net/docs/en/language.math.tpl
A Jean le Chauve,

merci oui en effet on s'est croisé, je vais regarder cela de suite Smile
retour en arrière....

le seul moment où le calcul fonctionne c'est lorsque je fais ceci :

Code :
[== Indéfini ==]
{if $field->name =='fees'}
{$field->value + $entry->price assign="price"}
{$price}
{/if}

Mais j'ai trouvé ceci dans le template viewcartform

Code :
[== Indéfini ==]
{$oneitem->quantity*$oneitem->unit_price|number_format:2}

donc si je trouve le moyen d'ajouter qqch du genre +$oneitem->fees....
Code :
{$oneitem->quantity*$oneitem->unit_price+$field->value|number_format:2 assign="price"}

non ?

si ca veut pas il faut passer par du
Code :
{capture [...]}{$oneitem->quantity*$oneitem->unit_price+$field->value|number_format:2}{/capture}

Je te laisse découvrir la syntaxe http://www.smarty.net/docs/en/language.f...apture.tpl
Bon, j'aurai au moins compris qqch,

c'est que le calcul

{$oneitem->quantity*$oneitem->unit_price|number_format:2}

ce fait dans le template du module Cart,

mais, si je veux transformer cette ligne en celle ci :
Code :
[== Indéfini ==]

{$oneitem->quantity*$oneitem->unit_price+$field->value|number_format:2}

il faut que j'arrive à faire passer mon champs fees jusqu'au module cart.

Je peux récupérer le champs au travers du template qui ajoute le bouton "ajouter au panier" :

Code :
[== Indéfini ==]
{* add to cart template *}
{if isset($cart_error)}
{cgerror}{$cart_error}{/cgerror}
{/if}
coucou
{$formstart}
<input type="text" name="{$quantityname}" value="1" size="2" maxlength="2"/>
<input type="text" name="fees" value="{$feesprice}" size="2"/>
{if isset($attribute_count) && $attribute_count gt 0}&nbsp;
  {foreach from=$attributes item='attrib'}
    {$attrib->name}: {$attrib->control}
  {/foreach}
{/if}
<input type="submit" name="{$submitname}" value="{$addtocarttext}"/>
{$formend}

via ces lignes :

dans le template produit : {if $field->name =='fees'}{$field->value assign="feesprice"}{$feesprice}{/if}

dans le template ajout au panier : <input type="text" name="fees" value="{$feesprice}" size="2"/>

Est-ce que quelqu'un saurait comment récupérer le $feesprice ou fees ensuite ? J'ai essayé avec
$smarty.post.fees mais cela n'a rien donné.
Bon, une autre aproche :

j'ai remis en ordre les trois modules orders, products, cart.

J'ai modifié le module Products pour qu'il y ait d'origine un champs fees que l'on peut appelé par $entry-fees.

ce qu'il faudrait que j'arrive à faire maintenant, c'est récupérer le fees dans le panier.

dans Cart.module.php il y a :

Code :
[== Indéfini ==]
$this->_subtotal += $obj->get_unit_price() * $obj->get_quantity();

que je peux modifier en

Code :
[== Indéfini ==]
$this->_subtotal += $obj->get_unit_price() * $obj->get_quantity() + $obj->get_fees();

Mais je ne vois pas comment créer le $obj->get_fees()

Quelqu'un a une idée ?
Bon en résumé,

celui qui veut faire ce que je voulais faire...

n'a qu'a utiliser les attributs des produits plutôt que les définitions de champs....

et comme par magie tout fonctionne tout seul.

Désolé du dérangement.