pipo83 | Bonsoir,
J'ai un petit problème que je retourne dans tous les sens depuis, plus d'une semaine, sans trouver de solutions !
Pour un site e-commerce (version oscommerce 2.3 modifiée), j'ai besoin de créer une règle de calcul des frais de port.
Ci dessous un copie d’écran pour une explication simplifiée :
Sur l'image on voit que j'ai 4 produits dans mon panier vendus par 2 vendeurs differents.
Les frais de port par article sont stockés en session dans $_SESSION['ship']
Je cherche à faire une règle qui lorsque dans mon panier j'ai plus d'un article du vendeur X, les frais de port du deuxième article (colissimo seulement) du même vendeur uniquement soit égal à 1€ (au lieu du montant par défaut).
En clair:
Si la panier contient au moins 2 articles du vendeur X alors le coût de transport du 2eme article = 1€
Sachant que si un des deux articles est en sans frais de port (remise en main propre), le cout devra être de 0€
Voici le code de mon panier :
Code :
- // on passe les valeurs postées en session
- $array = array_keys($_POST);
- foreach ($array as $value) {
- $_SESSION[$value] = $_POST[$value];
- }
- // [...]
- for ($i=0, $n=sizeof($products); $i<$n; $i++) {
- $id = $products[$i]['id'];
- $remiseMainsPropres = '';
- $colissimo = '';
- $shippingCost = getShippingCost($id);
- $shippingMethods = getShippingMethods($id);
- $methods = explode(";", $shippingMethods);
- if(!isset($_SESSION['ship'][$id])) {
- // spu = remise en main prope
- // flat = colissimo
- if( (in_array('flat', $methods)) && (in_array('spu', $methods)) ) {
- $_SESSION['ship'][$id] = $shippingCost;
- } elseif( (!in_array('flat', $methods)) && (in_array('spu', $methods)) ) {
- $_SESSION['ship'][$id] = 0;
- } elseif( (in_array('flat', $methods)) && (!in_array('spu', $methods)) ) {
- $_SESSION['ship'][$id] = $shippingCost;
- } else {
- $_SESSION['ship'][$id] = 0;
- }
- }
- echo '<tr class="rowCart">';
- echo '<td align="center"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '">' . tep_image(DIR_WS_IMAGES . $products[$i]['image'], $products[$i]['name'], 60, 60) . '</a></td>';
- echo '<td class="main"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '">' . $products[$i]['name'] . '</a><br /><span class="rose">Vendeur:</span> '.getSeller( $products[$i]['id']);
- if (STOCK_CHECK == 'true') {
- $stock_check = tep_check_stock($products[$i]['id'], $products[$i]['quantity']);
- if (tep_not_null($stock_check)) {
- $any_out_of_stock = 1;
- echo '<br />' . $stock_check;
- }
- }
- echo '</td>';
- echo '<td class="main">';
-
- // si remise en main propre et colissmo sont proposés
- if( (in_array('spu', $methods)) && (in_array('flat', $methods)) ) {
-
- if($_SESSION['ship'][$products[$i]['id']] == 0) {
- $remiseMainsPropres .= 'checked="checked"';
- $colissimo .= '';
- } else {
- $remiseMainsPropres .= '';
- $colissimo .= 'checked="checked"';
- }
-
- echo '<input type="radio" name="ship['.$products[$i]['id'].']" onclick="this.form.submit()" value="0" '.$remiseMainsPropres.' /> Remise en main propre<br />';
- echo '<input type="radio" name="ship['.$products[$i]['id'].']" onclick="this.form.submit()" value="'.$shippingCost.'" '.$colissimo.' /> Colissimo ('.$shippingCost.')';
- // si remise en main propre seulement
- } elseif( (in_array('spu', $methods)) && (!in_array('flat', $methods)) ) {
-
- echo '<input type="radio" name="ship['.$products[$i]['id'].']" value="0" checked="checked" /> Remise en main propre<br />';
- //echo '<input type="radio" value="0" disabled="disabled" /> Colissimo (N/A)';
- // si colissimo seulement
- } elseif( (!in_array('spu', $methods)) && (in_array('flat', $methods)) ) {
- //echo '<input type="radio" value="0" disabled="disabled" /> Remise en main propre (N/A)<br />';
- echo '<input type="radio" name="ship['.$products[$i]['id'].']" value="'.$shippingCost.'" checked="checked" /> Colissimo ('.$shippingCost.')';
-
- } else {
-
- echo '<input type="radio" name="ship['.$products[$i]['id'].']" onclick="this.form.submit()" value="0" '.$remiseMainsPropres.' /> Remise en main propre';
- echo '<input type="radio" name="ship['.$products[$i]['id'].']" onclick="this.form.submit()" value="'.$shippingCost.'" '.$colissimo.' /> Colissimo ('.$shippingCost.')';
- }
- echo '</td>';
- echo '<td class="main" align="center">' . $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']), $products[$i]['quantity']) . '</td>';
- echo '<td align="center"><a href="' . tep_href_link(FILENAME_SHOPPING_CART, 'products_id=' . $products[$i]['id'] . '&action=remove_product') . '"><img src="images/trash.png" border="0" alt="Supprimer cet article"></a></td>';
- echo '</tr>';
- }
- echo '</table>';
- ?>
- </table>
- <p class="headingCart" align="right"><strong><?php echo SUB_TITLE_SUB_TOTAL; ?> <?php echo $currencies->format($cart->show_total()); ?></strong><br />
- <?php
- echo 'Frais d\'expedition : ';
- if(isset($_SESSION['ship']))
- $val = array_sum(array_values($_SESSION['ship']));
- else
- $val = 0;
- echo sprintf("%.2f",$val). ' €<br />';
- echo 'Total TTC : ' . $currencies->format($cart->show_total() + $val);
- ?>
|
Merci par avance ! Message édité par pipo83 le 07-10-2011 à 22:30:46
|