plugin : Individual Product Shipping Prices

Messagepar cymbeline » Mar 05 Juin 2007, 20:35

Voilà, j'ai adapté ce module pour oscss et désolé pour le wiki mais je bug dessus alors je mets tout ici.

Cette contribution permet de fixer entre autre des frais de port individuel pour chaque produit :)

La contribution est issue de : http://www.oscommerce.com/community/contributions,1333/

j'ai pris la version "Home Country bug fix DE timidphper EN DATE DU 13 Feb 2007"

Mis à part le fichier : Individual_Product_Shipping_v4.3.htm du ZIP que je vous invite à lire en cas de problème et aussi pour comprendre les codes pays, toutes les modifs sont présentes ci-dessous, j'ai aussi traduit le module.

En cas de souci, n'hésitez pas à poster.


I° - le fichier sql.txt (a créer, il n'est pas dans le zip) et attention aux prefixes des tables

Code: Tout sélectionner
DROP TABLE IF EXISTS `remplacer_par_votre prefixe _products_shipping`;
CREATE TABLE `remplacer_par_votre prefixe _products_shipping` (
`products_id` int(11) NOT NULL default '0',
`products_ship_methods_id` int(11) default NULL,
`products_ship_zip` varchar(32) default NULL,
`products_ship_price` varchar(10) default NULL,
`products_ship_price_two` varchar(10) default NULL
) TYPE=MyISAM;


INSERT INTO remplacer_par_votre prefixe _configuration VALUES ('', 'Individual-Shipping : Code pays de la boutique', 'INDIVIDUAL_SHIP_HOME_COUNTRY', '74', 'ID du pays de la boutique (les autres pays auront des frais de port supplementaires)', 7, NULL, '0000-00-00 00:00:00', '0000-00-00 00:00:00', NULL, NULL);
INSERT INTO remplacer_par_votre prefixe _configuration VALUES ('', 'Individual-Shipping : frais de port additionnel pour les autres pays', 'INDIVIDUAL_SHIP_INCREASE', '1', 'Les frais de port additionnels seront multiplies par cet indice . par exemple: si le prix d envoi de votre produit est de 50 euros et cet indice de 3, a l exterieur de votre pays ils paieront 150 euros, et si cet indice est de 2, ils paieront 100 euros.', 7, NULL, '0000-00-00 00:00:00', '0000-00-00 00:00:00', NULL, NULL);

Je met la suite dans un autre post
cymbeline
Membre très actif
 
Messages: 265
Inscription: Mer 06 Sep 2006, 20:01
Localisation: Nevers

Messagepar cymbeline » Mar 05 Juin 2007, 20:52

II° - Le fichier : catalogcheckout_shipping

trouver :

Code: Tout sélectionner
   tep_session_unregister('shipping');
          } else {
            if ( (isset($quote[0]['methods'][0]['title'])) && (isset($quote[0]['methods'][0]['cost'])) ) {
              $shipping = array('id' => $shipping,
                                'title' => (($free_shipping == true) ?  $quote[0]['methods'][0]['title'] : $quote[0]['module'] . ' (' . $quote[0]['methods'][0]['title'] . ')'),
                                'cost' => $quote[0]['methods'][0]['cost']);

et remplacer par :

Code: Tout sélectionner
            tep_session_unregister('shipping');
          } else {
            if ( (isset($quote[0]['methods'][0]['title'])) && (isset($quote[0]['methods'][0]['cost'])) ) {
              $shipping = array('id' => $shipping,
                                'title' => (($free_shipping == true) ?  $quote[0]['methods'][0]['title'] : $quote[0]['module'] . ' (' . $quote[0]['methods'][0]['title'] . ')'),
               
                // start indvship
                                //'cost' => $quote[0]['methods'][0]['cost']);
                                'cost' => $quote[0]['methods'][0]['cost'],
                                'invcost' => $shipping_modules->get_shiptotal());
                                // end indvship

III° - Le fichier : catalogadmincategories.php

trouver (Ligne 493) :
Code: Tout sélectionner
osCSS_Cache::clear('categoriesBox');
        osCSS_Cache::clear('category_tree');
        osCSS_Cache::clear('also_purchased');

ajouter juste après :

Code: Tout sélectionner
 // start indvship
          $sql_shipping_array = array('products_ship_zip' => tep_db_prepare_input($_POST['products_ship_zip']),
'products_ship_methods_id' => tep_db_prepare_input($_POST['products_ship_methods_id']),
'products_ship_price' => round(tep_db_prepare_input($_POST['products_ship_price']),4),
'products_ship_price_two' => round(tep_db_prepare_input($_POST['products_ship_price_two']),4));
          $sql_shipping_id_array = array('products_id' => (int)$products_id);
          $products_ship_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_SHIPPING . " WHERE products_id = " . (int)$products_id);
          if(tep_db_num_rows($products_ship_query) >0) {
            if (($_POST['products_ship_zip'] == '')&&($_POST['products_ship_methods_id'] == '')&&($_POST['products_ship_price'] == '')&&($_POST['products_ship_price_two'] == '')){
              tep_db_query("DELETE FROM " . TABLE_PRODUCTS_SHIPPING . " where products_id = '" . (int)$products_id . "'");
            } else {
              tep_db_perform(TABLE_PRODUCTS_SHIPPING, $sql_shipping_array, 'update', "products_id = '" . (int)$products_id . "'");
            }
          } else {
            if (($_POST['products_ship_zip'] != '')||($_POST['products_ship_methods_id'] != '')||($_POST['products_ship_price'] != '')||($_POST['products_ship_price_two'] != '')){
              $sql_ship_array = array_merge($sql_shipping_array, $sql_shipping_id_array);
              tep_db_perform(TABLE_PRODUCTS_SHIPPING, $sql_ship_array, 'insert');
            }
          }
          // end indvship

          if (USE_CACHE == 'true') {
            tep_reset_cache_block('categories');
            tep_reset_cache_block('also_purchased');
          }

trouver (ligne 549) :

Code: Tout sélectionner
         $description_query = tep_db_query("select language_id, products_name,products_seo_url,products_description, products_head_title_tag, products_head_desc_tag, products_head_keywords_tag, products_url from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$products_id . "'");
            while ($description = tep_db_fetch_array($description_query)) {
              tep_db_query("insert into " . TABLE_PRODUCTS_DESCRIPTION . " (products_id, language_id, products_name,products_seo_url, products_description, products_head_title_tag, products_head_desc_tag, products_head_keywords_tag, products_url, products_viewed) values ('" . (int)$dup_products_id . "', '" . (int)$description['language_id'] . "', '" . tep_db_input($description['products_name']) . "', '" . tep_db_input($description['products_description']) . "', '" . tep_db_input($description['products_head_title_tag']) . "', '" . tep_db_input($description['products_head_desc_tag']) . "', '" . tep_db_input($description['products_head_keywords_tag']) . "', '" . tep_db_input($description['products_url']) . "', '0')");
            }

ajouter juste après :

Code: Tout sélectionner
// start indvship
            $shipping_query = tep_db_query("select products_ship_methods_id, products_ship_zip from " . TABLE_PRODUCTS_SHIPPING . " where products_id = '" . (int)$products_id . "'");
            while ($shipping = tep_db_fetch_array($shipping_query)) {
              tep_db_query("insert into " . TABLE_PRODUCTS_SHIPPING . " (products_id, products_ship_methods_id, products_ship_zip) values ('" . (int)$dup_products_id . "', '" . tep_db_input($shipping['products_ship_methods_id']) . "', '" . tep_db_input($shipping['products_ship_zip']) . "')");
            }
      // end indvship

trouver :

Code: Tout sélectionner
    $pInfo = new objectInfo($parameters);

    if (isset ($HTTP_GET_VARS['pID']) && (!$HTTP_POST_VARS) ) {

ajouter juste après :

Code: Tout sélectionner
 // start indvship
      $products_shipping_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_SHIPPING . " WHERE products_id=" . (int)$_GET['pID']);
      while ($products_shipping = tep_db_fetch_array($products_shipping_query)) {
        $products_ship_zip = $products_shipping['products_ship_zip'];
        $products_ship_methods_id = $products_shipping['products_ship_methods_id'];
        $products_ship_price = $products_shipping['products_ship_price'];
        $products_ship_price_two = $products_shipping['products_ship_price_two'];
      }
      $shipping=array('products_ship_methods_id' => $products_ship_methods_id,
      'products_ship_zip' => $products_ship_zip,
      'products_ship_price' => $products_ship_price,
      'products_ship_price_two' => $products_ship_price_two);
      $pInfo->objectInfo($shipping);
      // end indvship

trouver :

Code: Tout sélectionner
<?php
    for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
?>
          <tr>
            <td class="main"><?php if ($i == 0) echo TEXT_PRODUCTS_NAME; ?></td>
            <td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . '&nbsp;' . tep_draw_input_field('products_name[' . $languages[$i]['id'] . ']', (isset($products_name[$languages[$i]['id']]) ? stripslashes($products_name[$languages[$i]['id']]) : tep_get_products_name($pInfo->products_id, $languages[$i]['id']))); ?></td>
          </tr>
<?php
    }
?>
          <tr>
            <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
          </tr>

ajouter juste après :

Code: Tout sélectionner
<?php // start indvship ?> <!-- Zipcode -->
          <tr bgcolor="#ebebff">
            <td class="main"><?php echo TEXT_PRODUCTS_ZIPCODE; ?></td>
            <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . '&nbsp;' . tep_draw_input_field('products_ship_zip', $pInfo->products_ship_zip); if(tep_not_null($pInfo->products_ship_zip)) echo 'notnull'; else echo 'null'; ?></td>
          </tr> <!-- end Zipcode --> <!-- Indvship -->
          <tr bgcolor="#ebebff">
            <td class="main"><?php echo TEXT_INDIV_SHIPPING_PRICE; ?></td>
            <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . '&nbsp;' . tep_draw_input_field('products_ship_price', $pInfo->products_ship_price); if(tep_not_null($pInfo->products_ship_price)) echo 'notnull'; else echo 'null'; ?></td>
          </tr>
          <tr bgcolor="#ebebff">
            <td class="main"><?php echo TEXT_EACH_ADDITIONAL_PRICE; ?></td>
            <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . '&nbsp;' . tep_draw_input_field('products_ship_price_two', $pInfo->products_ship_price_two); if(tep_not_null($pInfo->products_ship_price_two)) echo 'notnull'; else echo 'null'; ?></td>
          </tr> <!-- end Indvship -->
          <tr>
            <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
          </tr>
<?php // end indvship ?>

trouver :

Code: Tout sélectionner
<?php
  } elseif ($action == 'new_product_preview') {
    if (tep_not_null($HTTP_POST_VARS)) {
      $pInfo = new objectInfo($HTTP_POST_VARS);
      $products_name = $HTTP_POST_VARS['products_name'];
      $products_description = $HTTP_POST_VARS['products_description'];
      $products_head_title_tag = $HTTP_POST_VARS['products_head_title_tag'];
      $products_head_desc_tag = $HTTP_POST_VARS['products_head_desc_tag'];
      $products_head_keywords_tag = $HTTP_POST_VARS['products_head_keywords_tag'];
      $products_url = $HTTP_POST_VARS['products_url'];
    } else {

      $product = tep_db_fetch_array($product_query);

      $pInfo = new objectInfo($product);
      $products_image_name = $pInfo->products_image;

ajouter juste après mais avant la parenthèse } :

Code: Tout sélectionner
    // start indvship
      $products_shipping_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_SHIPPING . " WHERE products_id=" . (int)$_GET['pID']);
      while ($products_shipping = tep_db_fetch_array($products_shipping_query)) {
        $products_ship_methods_id = $products_shipping['products_ship_methods_id'];
        $products_ship_zip = $products_shipping['products_ship_zip'];
        $products_ship_price = $products_shipping['products_ship_price'];
        $products_ship_price_two = $products_shipping['products_ship_price_two'];
      }
      $shipping=array('products_ship_methods_id' => $products_ship_methods_id,
      'products_ship_zip' => $products_ship_zip,
      'products_ship_price' => $products_ship_price,
      'products_ship_price_two' => $products_ship_price_two);
      $pInfo->objectInfo($shipping);
      // end indvship

--------------------------------------------------------------------------------------------------------

III° - Dans le fichier: catalogadminincludeslanguagesfrenchcategories.php

ajouter à la fin (avant la } ) :

Code: Tout sélectionner
//indiv ship
define('TEXT_PRODUCTS_ZIPCODE', 'Code pays du produit:');
define('TEXT_INDIV_SHIPPING_PRICE', 'Prix d'envoi individuel:');
define('TEXT_EACH_ADDITIONAL_PRICE', 'Prix additionnel (pour chaque envoi du m&ecirc;me produit):');
//end of indiv ship

---------------------------------------------------------------------------------------------------------

IV° - Dans le fichier : catalogadminincludesdatabase_tables.php

ajouter juste avant la fin :

Code: Tout sélectionner
  // start indvship
  define('TABLE_PRODUCTS_SHIPPING', DB_TABLE_PREFIX . 'products_shipping');
  // end indvship
cymbeline
Membre très actif
 
Messages: 265
Inscription: Mer 06 Sep 2006, 20:01
Localisation: Nevers

Messagepar cymbeline » Mar 05 Juin 2007, 22:07

V° - Dans le fichier : catalogincludescontentproduct_info.php

trouver :

Code: Tout sélectionner
<div id="productDescription">
      <?php echo stripslashes(str_replace($badguy,$goodguy,$product_info['products_description'])); ?>
    </div>

    <?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_PRODUCT_INFO, tep_get_all_get_params(array('action')) . 'action=add_product')); ?>

ajouter à la suite :

Code: Tout sélectionner
<?php
// start indvship
    $extra_shipping_query = tep_db_query("select products_ship_price, products_ship_price_two from " . TABLE_PRODUCTS_SHIPPING . " where products_id = '" . (int)$products_id . "'");
    if (tep_db_num_rows($extra_shipping_query)) {
      $extra_shipping = tep_db_fetch_array($extra_shipping_query);
      if($extra_shipping['products_ship_price'] == '0.00'){
        echo '<i>(transport gratuit pour ce produit)</i>';
      } else {
        echo '<i>(Frais de port suppl&eacute;mentaire de &euro;' . $extra_shipping['products_ship_price'];
        if (($extra_shipping['products_ship_price_two']) > 0) {
          echo ' Pour le premier produit, et de &euro;' . $extra_shipping['products_ship_price_two'] . ' pour tout produit ajouté + co&ucirc;t de transport r&eacute;gulier.)</i>';
        } else {
          echo ' + co&ucirc;t de transport r&eacute;gulier.)</i>';
        }
      }
 }
    // end indvship
?>

VI° - fichier : catalogincludesclassesorder.php

dans :

Code: Tout sélectionner
   function cart() {

remplacer :

Code: Tout sélectionner
      global $customer_id, $sendto, $billto, $cart, $languages_id, $currency, $currencies, $shipping, $payment;

par

Code: Tout sélectionner
  // start indvship
      //global $customer_id, $sendto, $billto, $cart, $languages_id, $currency, $currencies, $shipping, $payment;
    global $customer_id, $sendto, $billto, $cart, $languages_id, $currency, $currencies, $shipping, $payment, $shipping_modules;
      // end indvship

à la suite de :

Code: Tout sélectionner
     $tax_address_query = tep_db_query("select ab.entry_country_id, ab.entry_zone_id from " . TABLE_ADDRESS_BOOK . " ab left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id) where ab.customers_id = '" . (int)$customer_id . "' and ab.address_book_id = '" . (int)($this->content_type == 'virtual' ? $billto : $sendto) . "'");
      $tax_address = tep_db_fetch_array($tax_address_query);

ajouter :

Code: Tout sélectionner
//start indvship
      if($shipping['id']==indvship_indvship){
        $shipping_cost = $shipping['cost'];
        $shipping_title = $shipping['title'];
      } else {
        $shipping_cost = $shipping['cost'] + $shipping['invcost'];
        if ($shipping['invcost'] > 0) {
          $shipping_title = $shipping['title']. ' Plus Flat Rate Shipping';
        } else {
          $shipping_title = $shipping['title'];
        }
      }
      // end indvship

trouver :

Code: Tout sélectionner
         'shipping_method' => $shipping['title'],
                          'shipping_cost' => $shipping['cost'],

remplacer par :

Code: Tout sélectionner
  // start indvship
                          //'shipping_method' => $shipping['title'],
                          //'shipping_cost' => $shipping['cost'],
                          'shipping_method' => $shipping_title,
                          'shipping_cost' => $shipping_cost,
  //end indvship

----------------------------------------------

VII ) - dans le fichier : catalogincludesclassesshipping.php

dans :

Code: Tout sélectionner
 function shipping($module = '')

remplacer :

Code: Tout sélectionner
      global $language, $PHP_SELF;

par :

Code: Tout sélectionner
   // start indvship
      // global $language, $PHP_SELF;
    global $language, $PHP_SELF, $cart;
   $products = $cart->get_products();// BOF: indvship prices
   $shiptotal = $this->get_shiptotal();
    $indvcount = $this->get_indvcount();// EOF: indvship prices
   // end indvship

trouver :

Code: Tout sélectionner
    if (defined('MODULE_SHIPPING_INSTALLED') && tep_not_null(MODULE_SHIPPING_INSTALLED)) {
        $this->modules = explode(';', MODULE_SHIPPING_INSTALLED);

        $include_modules = array();

        if ( (tep_not_null($module)) && (in_array(substr($module['id'], 0, strpos($module['id'], '_')) . '.' . substr($PHP_SELF, (strrpos($PHP_SELF, '.')+1)), $this->modules)) ) {
          $include_modules[] = array('class' => substr($module['id'], 0, strpos($module['id'], '_')), 'file' => substr($module['id'], 0, strpos($module['id'], '_')) . '.' . substr($PHP_SELF, (strrpos($PHP_SELF, '.')+1)));
        } else {
          reset($this->modules);
          while (list(, $value) = each($this->modules)) {
            $class = substr($value, 0, strrpos($value, '.'));
            $include_modules[] = array('class' => $class, 'file' => $value);
          }
        }

remplacer par:

Code: Tout sélectionner
     if (defined('MODULE_SHIPPING_INSTALLED') && tep_not_null(MODULE_SHIPPING_INSTALLED)) {
        $this->modules = explode(';', MODULE_SHIPPING_INSTALLED);

        $include_modules = array();

        if ( (tep_not_null($module)) && (in_array(substr($module['id'], 0, strpos($module['id'], '_')) . '.' . substr($PHP_SELF, (strrpos($PHP_SELF, '.')+1)), $this->modules)) ) {
          $include_modules[] = array('class' => substr($module['id'], 0, strpos($module['id'], '_')), 'file' => substr($module['id'], 0, strpos($module['id'], '_')) . '.' . substr($PHP_SELF, (strrpos($PHP_SELF, '.')+1)));
        } else {
          reset($this->modules);
     
    // start indvship
          //while (list(, $value) = each($this->modules)) {
          //  $class = substr($value, 0, strrpos($value, '.'));
          //  $include_modules[] = array('class' => $class, 'file' => $value);
          //}
        //}
     if($indvcount==sizeof($products)){
      if ((tep_get_configuration_key_value('MODULE_SHIPPING_INDVSHIP_STATUS')) && ((tep_not_null($shiptotal)) || $shiptotal == 0)) {
        $include_modules[] = array('class'=> 'indvship', 'file' => 'indvship.php');
     }
     } else {
       if(sizeof($products)>$indvcount){
       while (list(, $value) = each($this->modules)) {
         $class = substr($value, 0, strrpos($value, '.'));
         if (($class !='freeshipper') && ($class != 'indvship')) { // comment to show all ship options
         //if ($class !='freeshipper') { // uncomment to show all ship options
           $include_modules[] = array('class' => $class, 'file' => $value);
          }
       }
     }
     }
   }
   // end indvship

dans :

Code: Tout sélectionner
    function quote($method = '', $module = '') {

trouver :

Code: Tout sélectionner
  return $quotes_array;
    }

et ajouter :

Code: Tout sélectionner
//start indvship
  function get_shiptotal() {
    global $cart, $order;
   $this->shiptotal = '';
    $products = $cart->get_products();
    for ($i=0, $n=sizeof($products); $i<$n; $i++) {
     if (tep_not_null($products[$i]['products_ship_price'])) {
       $products_ship_price = $products[$i]['products_ship_price'];
        $products_ship_price_two = $products[$i]['products_ship_price_two'];
        $products_ship_zip = $products[$i]['products_ship_zip'];
        $qty = $products[$i]['quantity'];
       if(tep_not_null($products_ship_price) ||tep_not_null($products_ship_price_two)){
          $this->shiptotal += ($products_ship_price);
         if ($qty > 1) {
           if (tep_not_null($products_ship_price_two)) {
             $this->shiptotal += ($products_ship_price_two * ($qty-1));
            } else {
              $this->shiptotal += ($products_ship_price * ($qty-1));
            }
         }/////////////NOT HERE <<------------
       }
     }
   }// CHECK TO SEE IF SHIPPING TO HOME COUNTRY, IF NOT INCREASE SHIPPING COSTS BY AMOUNT SET IN ADMIN/////////////move back here <<------------
   if (($order->delivery['country']['id']) != INDIVIDUAL_SHIP_HOME_COUNTRY) {
      if(INDIVIDUAL_SHIP_INCREASE > '0' || $this->shiptotal > '0') {
        $this->shiptotal *= INDIVIDUAL_SHIP_INCREASE;
     } else {
      $this->shiptotal += INDIVIDUAL_SHIP_INCREASE *  $this->get_indvcount();
     }
     return $this->shiptotal;
    // not sure why this is needed, but it now works correctly for home country - by Ed
   } else {
       $this->shiptotal *= 1;
      return $this->shiptotal;
   }
 }

 function get_indvcount() {
    global $cart;
   $this->indvcount = '';
    $products = $cart->get_products();
    for ($i=0, $n=sizeof($products); $i<$n; $i++) {
     if (tep_not_null($products[$i]['products_ship_price'])) {
       $products_ship_price = $products[$i]['products_ship_price'];//}
       $products_ship_price_two = $products[$i]['products_ship_price_two'];
        if(is_numeric($products_ship_price)){
         $this->indvcount += '1';
        }
     }
   }
   return $this->indvcount;
  }

 // end indvship

-----------------------------------------------------

VIII° - dans catalogincludesclassesshopping_cart.php

trouver :

Code: Tout sélectionner
 class shoppingCart {
    var $contents, $total, $weight, $cartID, $content_type;

ajouter à la suite :

Code: Tout sélectionner
  // start indvship
    var $shiptotal;
    // end indvship

trouver :
Code: Tout sélectionner
function reset($reset_database = false) {
      global $customer_id;

      $this->contents = array();
      $this->total = 0;
      $this->weight = 0;

ajouter à la suite :

Code: Tout sélectionner
// start indvship
   $this->shiptotal = '';
    // end indvship

trouver :

Code: Tout sélectionner
   function get_products() {
      global $languages_id;

      if (!is_array($this->contents)) return false;

      $products_array = array();
      reset($this->contents);
      while (list($products_id, ) = each($this->contents)) {
        $products_query = tep_db_query("select p.products_id, pd.products_name, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_tax_class_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$products_id . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
        if ($products = tep_db_fetch_array($products_query)) {
          $prid = $products['products_id'];
          $products_price = $products['products_price'];

          $specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'");
          if (tep_db_num_rows($specials_query)) {
            $specials = tep_db_fetch_array($specials_query);
            $products_price = $specials['specials_new_products_price'];
          }

ajouter à la suite :

Code: Tout sélectionner
  // start indvship
     $products_shipping_query = tep_db_query("select products_ship_price, products_ship_price_two, products_ship_zip, products_ship_methods_id from " . TABLE_PRODUCTS_SHIPPING . " where products_id = '" . $products['products_id'] . "'");
      $products_shipping = tep_db_fetch_array($products_shipping_query);
      // end indvship

trouver :

Code: Tout sélectionner
$products_array[] = array('id' => $products_id,
                                    'name' => $products['products_name'],
                                    'model' => $products['products_model'],
                                    'image' => $products['products_image'],
                                    'price' => $products_price,
                                    'quantity' => $this->contents[$products_id]['qty'],
                                    'weight' => $products['products_weight'],
                                    'final_price' => ($products_price + $this->attributes_price($products_id)),
                                    'tax_class_id' => $products['products_tax_class_id'],

ajouter à la suite :

Code: Tout sélectionner
 // start indvship
 'products_ship_price' => $products_shipping['products_ship_price'],
 'products_ship_price_two' => $products_shipping['products_ship_price_two'],
 'products_ship_zip' => $products_shipping['products_ship_zip'],
 // end  indvship

trouver :

Code: Tout sélectionner
function get_content_type() {

ajouter à la suite :

Code: Tout sélectionner
  // start indvship
   global $shipping_modules;
    // end indvship
cymbeline
Membre très actif
 
Messages: 265
Inscription: Mer 06 Sep 2006, 20:01
Localisation: Nevers

Messagepar cymbeline » Mar 05 Juin 2007, 22:15

IX° - Créer le fichier catalogincludeslanguagesenglishmodulesshipping indvship.php

mettez ceci dedans :

Code: Tout sélectionner
<?php
/*
  $Id: indvship.php,v 1.0 2003/07/07 00:00:01 dgw_ Exp $
  by Farrukh

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2002 osCommerce

  Released under the GNU General Public License
*/

define('MODULE_SHIPPING_INDVSHIP_TEXT_TITLE', 'Individual Shipping - Zone 1');
define('MODULE_SHIPPING_INDVSHIP_TEXT_DESCRIPTION', 'Shipping and Handling');
define('MODULE_SHIPPING_INDVSHIP_TEXT_WAY', 'Shipping Rate');
?>

X° - Créer le fichier catalogincludeslanguagesfrenchmodulesshipping indvship.php

mettez ceci dedans :

Code: Tout sélectionner
<?php
/*
  $Id: indvship.php,v 1.0 2003/07/07 00:00:01 dgw_ Exp $
  by Farrukh

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2002 osCommerce

  Released under the GNU General Public License
*/

define('MODULE_SHIPPING_INDVSHIP_TEXT_TITLE', 'Transport individuel - Zone 1');
define('MODULE_SHIPPING_INDVSHIP_TEXT_DESCRIPTION', 'Transport et manutention');
define('MODULE_SHIPPING_INDVSHIP_TEXT_WAY', 'Taux de transport');
?>

XI° - Créer le fichier catalogincludesmodulesshipping indvship.php

mettez ceci dedans :

Code: Tout sélectionner
<?php
/*
  $Id: indvship.php,v 1.0 2003/07/07 00:00:01 hpdl Exp $
  by D. M. Gremlin

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/

  class indvship {
    var $code, $title, $description, $icon, $enabled, $shiptotal;

// class constructor
    function indvship() {
      global $order;
      $this->code = 'indvship';
      $this->title = MODULE_SHIPPING_INDVSHIP_TEXT_TITLE;
      $this->description = MODULE_SHIPPING_INDVSHIP_TEXT_DESCRIPTION;
      $this->sort_order = MODULE_SHIPPING_INDVSHIP_SORT_ORDER;
      $this->icon = '';
      $this->tax_class = MODULE_SHIPPING_INDVSHIP_TAX_CLASS;
      $this->enabled = ((MODULE_SHIPPING_INDVSHIP_STATUS == 'True') ? true : false);

// Enable Individual Shipping Module
//      $this->enabled = MODULE_SHIPPING_INDVSHIP_STATUS;
      if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_INDVSHIP_ZONE > 0) ) {
        $check_flag = false;
        $check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_INDVSHIP_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
        while ($check = tep_db_fetch_array($check_query)) {
          if ($check['zone_id'] < 1) {
            $check_flag = true;
            break;
          } elseif ($check['zone_id'] == $order->delivery['zone_id']) {
            $check_flag = true;
            break;
          }
        }

        if ($check_flag == false) {
          $this->enabled = false;
        }
      }
    }

// class methods

   function quote($method = '') {
      global $order, $cart, $shipping_modules;
   $shiptotal = $shipping_modules->get_shiptotal();
   $indvcount = $shipping_modules->get_indvcount();
 if (tep_not_null($shiptotal) || tep_not_null($indvcount) || $shiptotal == '0'){
      $this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_INDVSHIP_TEXT_TITLE,
                            'methods' => array(array('id' => $this->code,
                                                     'title' => MODULE_SHIPPING_INDVSHIP_TEXT_WAY,
                                                     'cost' => $shiptotal)));

      if ($this->tax_class > 0) {
        $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
      }

      if (tep_not_null($this->icon)) $this->quotes['icon'] = tep_image($this->icon, $this->title);
}
      return $this->quotes;
    }
   


    function check() {
      if (!isset($this->_check)) {
        $check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_INDVSHIP_STATUS'");
        $this->_check = tep_db_num_rows($check_query);
      }
      return $this->_check;
    }

    function install() {
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable Individual Shipping Prices', 'MODULE_SHIPPING_INDVSHIP_STATUS', 'True', 'Do you want to offer individual shipping prices?', '6', '0', 'tep_cfg_select_option(array('True', 'False'), ', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Tax Class', 'MODULE_SHIPPING_INDVSHIP_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_INDVSHIP_ZONE', '0', 'If a zone is selected, only enable this shipping method for that zone.', '6', '0', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_INDVSHIP_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
    }

    function remove() {
     
      tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
    }

    function keys() {
      return array('MODULE_SHIPPING_INDVSHIP_STATUS', 'MODULE_SHIPPING_INDVSHIP_TAX_CLASS', 'MODULE_SHIPPING_INDVSHIP_ZONE', 'MODULE_SHIPPING_INDVSHIP_SORT_ORDER');
    }
  }
?>
cymbeline
Membre très actif
 
Messages: 265
Inscription: Mer 06 Sep 2006, 20:01
Localisation: Nevers

Messagepar cymbeline » Mar 05 Juin 2007, 22:27

XII° - Dans le fichier catalogincludesapplication_top.php

trouver :

Code: Tout sélectionner
// include the database functions
  require(DIR_WS_FUNCTIONS . 'database.php');

ajouter à la suite :

Code: Tout sélectionner
// start indvship
  function tep_get_configuration_key_value($lookup) {
 $configuration_query_raw= tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key='" . $lookup . "'");
  $configuration_query= tep_db_fetch_array($configuration_query_raw);
 $lookup_value= $configuration_query['configuration_value'];
 return $lookup_value;
  }
// end indvship

XIII° - Dans le fichier catalogincludesdatabas_table.php

trouver :

Code: Tout sélectionner
  define('TABLE_PRODUCTS_NOTIFICATIONS', 'products_notifications');

ajouter à la suitre :

Code: Tout sélectionner
   // start indvship
  define('TABLE_PRODUCTS_SHIPPING', DB_TABLE_PREFIX . 'products_shipping');
  // end indvship

======================================================

XIV° - Le fichier CSS à mettre ou bon vous semble

Code: Tout sélectionner
/* +--------------------------------------------------------------------------------------------------------+
// | Gestion du module individual shipping :: frais d'envoi individuel
// +------------------------------------------------------------------------------------------------------+*/
/*------ conteneur----------*/
#productShip{
 margin: 0;
  padding: 0;
 width: 560px;
}
/*------ gestion du texte ----------*/

#productShip p{
 margin: 0;
  padding: 0;
 color: red;
 font-weight: bold;
  font-size: 1em;
 border: 1px solid red;

}

Voilà il ne vous reste plus qu'a activer le module dans l'admin.

De renseigner vos paramètres dans l'admin : configuration(expedition/emballage)

De renseigner vos paramètres pour vos produits dans l'admincatalog(catalog/produit)votre_produit


END :P

++
cymbeline
Membre très actif
 
Messages: 265
Inscription: Mer 06 Sep 2006, 20:01
Localisation: Nevers

Messagepar Mali » Mer 06 Juin 2007, 09:27

beau boulot... merci.

Aurais tu un exemple de site qui utilise cette contrib ? car je ne sais pas si cela peut répondre à un de mes besoins... merci

mali
Mali
Membre très actif
 
Messages: 234
Inscription: Mer 29 Mar 2006, 20:39

Messagepar j4k » Mer 06 Juin 2007, 11:12

joli travail :)
à déplacer dans wiki : http://wiki.oscss.org/doku.php?id=osc:p ... ing_prices
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar cymbeline » Mer 06 Juin 2007, 12:08

Malheureusement, mon site tourne en local pour le moment, donc je n'ai pas d'exemple.

Mali : quel est ton besoin ? je peux toujours te renseigner.

Ce qui est interressant c'est le fait de pouvoir pour un produit avec une forte marge brute, offrir les frais de port, je l'utiliserais surtout dans ce but, cela devient un argument commercial sympa.
cymbeline
Membre très actif
 
Messages: 265
Inscription: Mer 06 Sep 2006, 20:01
Localisation: Nevers

Messagepar oscim » Mer 16 Jan 2008, 13:08

j4k a écrit:joli travail :)
à déplacer dans wiki : http://wiki.oscss.org/doku.php?id=osc:p ... ing_prices

L'ensemble de ce post à étét mise en forme dans le wiki
http://wiki.oscss.org/doku.php?id=osc:plugin:individual_product_shipping_prices
Dernière édition par oscim le Ven 25 Jan 2008, 01:14, édité 1 fois.
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Messagepar j4k » Mer 16 Jan 2008, 14:05

super ! merci :)
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar oscim » Mer 16 Jan 2008, 15:40

j4k a écrit:super ! merci :)

Pas de quoi, c'est l'open source !

Il faut laisser le temps a chacun de trouver les moyen de contribuer !
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33


Retourner vers Plugin

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron