Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

3x zones Table Rate shipping Module


Alan Culpitt

Recommended Posts

Hello

 

My client wants me to set up their store with three different tables of shipping fees based around the total value

 

UK

Up to £5.00 - £1.95

£5.01 to £15.00 - £2.95

£15.01 to £25.00 - £3.95

£25.01 and above - Free of Charge

 

 

EUROPE

 

Up to £15.00 - £5.50

£15.01 to £25.00 - £6.50

£25.01 and above - £7.50

 

REST OF WORLD

Up to £15.00 - £7.50

£15.01 to £25.00 - £8.50

£25.01 and above - £9.50

 

Using the table rate shipping module I can set up 1 of these but not all three? Using the zones module I can set up three, but this is weight based not value based?

 

Any help gratefully received.

Link to comment
Share on other sites

Duplicate the table.php file 2 more times. Change the name so you know which is which and then set up your shipping rates. Be sure to also create your zones and assign each table to that zone only.

 

 

 

Chris

Link to comment
Share on other sites

Duplicate the table.php file 2 more times. Change the name so you know which is which and then set up your shipping rates. Be sure to also create your zones and assign each table to that zone only.

 

 

 

Chris

Thanks for the pointer on this. I know php but I'm not an oscommerce expert so you will have to bear with me here a bit.

 

I've created three new files, tableUK.php tableEur.php and tableRest.php as copies of table.php in catalogue/modules/shipping & catalog/includes/languages/engllish/modules/shipping. I'm now getting an error message

 

Fatal error: Cannot redeclare class table in /home/sites/lakelandchildrensbooks.co.uk/public_html/includes/modules/shipping/tableEur.php on line 13

 

can you explain a bit more?

 

thanks

Link to comment
Share on other sites

  • 2 weeks later...

Thanks for the pointer on this. I know php but I'm not an oscommerce expert so you will have to bear with me here a bit.

 

I've created three new files, tableUK.php tableEur.php and tableRest.php as copies of table.php in catalogue/modules/shipping & catalog/includes/languages/engllish/modules/shipping. I'm now getting an error message

 

Fatal error: Cannot redeclare class table in /home/sites/lakelandchildrensbooks.co.uk/public_html/includes/modules/shipping/tableEur.php on line 13

 

can you explain a bit more?

 

thanks

 

You have to rename table through the whole file to the new name. Here is an example of a file called table2.php

<?php
/*
 $Id: table.php 1739 2007-12-20 00:52:16Z hpdl $

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

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/

 class table2 {
   var $code, $title, $description, $icon, $enabled;

// class constructor
   function table2() {
     global $order;

     $this->code = 'table2';
     $this->title = MODULE_SHIPPING_TABLE2_TEXT_TITLE;
     $this->description = MODULE_SHIPPING_TABLE2_TEXT_DESCRIPTION;
     $this->sort_order = MODULE_SHIPPING_TABLE2_SORT_ORDER;
     $this->icon = '';
     $this->tax_class = MODULE_SHIPPING_TABLE2_TAX_CLASS;
     $this->enabled = ((MODULE_SHIPPING_TABLE2_STATUS == 'True') ? true : false);

     if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_TABLE2_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_TABLE2_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_weight, $shipping_num_boxes;

     if (MODULE_SHIPPING_TABLE2_MODE == 'price') {
       $order_total = $cart->show_total();
     } else {
       $order_total = $shipping_weight;
     }

     $table_cost = split("[:,]" , MODULE_SHIPPING_TABLE2_COST);
     $size = sizeof($table_cost);
     for ($i=0, $n=$size; $i<$n; $i+=2) {
       if ($order_total <= $table_cost[$i]) {
         $pos = strpos($table_cost[$i+1], '%');
	if ($pos === false) {
		$shipping = $table_cost[$i+1];
	}
	else {
		$shipping_cost_temp = split("%", $table_cost[$i+1]);
		$shipping = $order_total * $shipping_cost_temp[0] / 100;
	}
	break;
       }
     }

     if (MODULE_SHIPPING_TABLE2_MODE == 'weight') {
       $shipping = $shipping * $shipping_num_boxes;
     }

     $this->quotes = array('id' => $this->code,
                           'module' => MODULE_SHIPPING_TABLE2_TEXT_TITLE,
                           'methods' => array(array('id' => $this->code,
                                                    'title' => MODULE_SHIPPING_TABLE2_TEXT_WAY,
                                                    'cost' => $shipping + MODULE_SHIPPING_TABLE2_HANDLING)));

     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_TABLE2_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 Table Method', 'MODULE_SHIPPING_TABLE2_STATUS', 'True', 'Do you want to offer table rate shipping?', '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, date_added) values ('Shipping Table', 'MODULE_SHIPPING_TABLE2_COST', '25:8.50,50:5.50,10000:0.00', 'The shipping cost is based on the total cost or weight of items. Example: 25:8.50,50:5.50,etc.. Up to 25 charge 8.50, from there to 50 charge 5.50, etc', '6', '0', now())");
     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 ('Table Method', 'MODULE_SHIPPING_TABLE2_MODE', 'weight', 'The shipping cost is based on the order total or the total weight of the items ordered.', '6', '0', 'tep_cfg_select_option(array(\'weight\', \'price\'), ', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Handling Fee', 'MODULE_SHIPPING_TABLE2_HANDLING', '0', 'Handling fee for this shipping method.', '6', '0', 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_TABLE2_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_TABLE2_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_TABLE2_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_TABLE2_STATUS', 'MODULE_SHIPPING_TABLE2_COST', 'MODULE_SHIPPING_TABLE2_MODE', 'MODULE_SHIPPING_TABLE2_HANDLING', 'MODULE_SHIPPING_TABLE2_TAX_CLASS', 'MODULE_SHIPPING_TABLE2_ZONE', 'MODULE_SHIPPING_TABLE2_SORT_ORDER');
   }
 }
?>

 

An example of the file table2.php in catalog/includes/languages/yourlanguage/modules/shipping/

<?php
/*
 $Id: table.php 1739 2007-12-20 00:52:16Z hpdl $

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

 Copyright (c) 2002 osCommerce

 Released under the GNU General Public License
*/

define('MODULE_SHIPPING_TABLE2_TEXT_TITLE', 'Table Rate 2');
define('MODULE_SHIPPING_TABLE2_TEXT_DESCRIPTION', 'Table Rate 2');
define('MODULE_SHIPPING_TABLE2_TEXT_WAY', 'Best Way');
define('MODULE_SHIPPING_TABLE2_TEXT_WEIGHT', 'Weight');
define('MODULE_SHIPPING_TABLE2_TEXT_AMOUNT', 'Amount');
?>

Link to comment
Share on other sites

  • 1 year later...

Rich,

 

It is a pretty basic add on that has been previously installed on countless websites in the past. The only issue that I can think of is the lack of direction when it comes to setting up the shipping zones. Each new zone name must begin with shp. so the zone name appears as shp.yourzone. Other than that, there are no known issues.

 

 

 

Chris

Link to comment
Share on other sites

You have to rename table through the whole file to the new name. Here is an example of a file called table2.php

<?php
/*
 $Id: table.php 1739 2007-12-20 00:52:16Z hpdl $

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

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/

 class table2 {
var $code, $title, $description, $icon, $enabled;

// class constructor
function table2() {
  global $order;

  $this->code = 'table2';
  $this->title = MODULE_SHIPPING_TABLE2_TEXT_TITLE;
  $this->description = MODULE_SHIPPING_TABLE2_TEXT_DESCRIPTION;
  $this->sort_order = MODULE_SHIPPING_TABLE2_SORT_ORDER;
  $this->icon = '';
  $this->tax_class = MODULE_SHIPPING_TABLE2_TAX_CLASS;
  $this->enabled = ((MODULE_SHIPPING_TABLE2_STATUS == 'True') ? true : false);

  if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_TABLE2_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_TABLE2_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_weight, $shipping_num_boxes;

  if (MODULE_SHIPPING_TABLE2_MODE == 'price') {
	$order_total = $cart->show_total();
  } else {
	$order_total = $shipping_weight;
  }

  $table_cost = split("[:,]" , MODULE_SHIPPING_TABLE2_COST);
  $size = sizeof($table_cost);
  for ($i=0, $n=$size; $i<$n; $i+=2) {
	if ($order_total <= $table_cost[$i]) {
	  $pos = strpos($table_cost[$i+1], '%');
	if ($pos === false) {
		$shipping = $table_cost[$i+1];
	}
	else {
		$shipping_cost_temp = split("%", $table_cost[$i+1]);
		$shipping = $order_total * $shipping_cost_temp[0] / 100;
	}
	break;
	}
  }

  if (MODULE_SHIPPING_TABLE2_MODE == 'weight') {
	$shipping = $shipping * $shipping_num_boxes;
  }

  $this->quotes = array('id' => $this->code,
						'module' => MODULE_SHIPPING_TABLE2_TEXT_TITLE,
						'methods' => array(array('id' => $this->code,
												 'title' => MODULE_SHIPPING_TABLE2_TEXT_WAY,
												 'cost' => $shipping + MODULE_SHIPPING_TABLE2_HANDLING)));

  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_TABLE2_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 Table Method', 'MODULE_SHIPPING_TABLE2_STATUS', 'True', 'Do you want to offer table rate shipping?', '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, date_added) values ('Shipping Table', 'MODULE_SHIPPING_TABLE2_COST', '25:8.50,50:5.50,10000:0.00', 'The shipping cost is based on the total cost or weight of items. Example: 25:8.50,50:5.50,etc.. Up to 25 charge 8.50, from there to 50 charge 5.50, etc', '6', '0', now())");
  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 ('Table Method', 'MODULE_SHIPPING_TABLE2_MODE', 'weight', 'The shipping cost is based on the order total or the total weight of the items ordered.', '6', '0', 'tep_cfg_select_option(array(\'weight\', \'price\'), ', now())");
  tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Handling Fee', 'MODULE_SHIPPING_TABLE2_HANDLING', '0', 'Handling fee for this shipping method.', '6', '0', 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_TABLE2_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_TABLE2_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_TABLE2_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_TABLE2_STATUS', 'MODULE_SHIPPING_TABLE2_COST', 'MODULE_SHIPPING_TABLE2_MODE', 'MODULE_SHIPPING_TABLE2_HANDLING', 'MODULE_SHIPPING_TABLE2_TAX_CLASS', 'MODULE_SHIPPING_TABLE2_ZONE', 'MODULE_SHIPPING_TABLE2_SORT_ORDER');
}
 }
?>

 

An example of the file table2.php in catalog/includes/languages/yourlanguage/modules/shipping/

<?php
/*
 $Id: table.php 1739 2007-12-20 00:52:16Z hpdl $

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

 Copyright (c) 2002 osCommerce

 Released under the GNU General Public License
*/

define('MODULE_SHIPPING_TABLE2_TEXT_TITLE', 'Table Rate 2');
define('MODULE_SHIPPING_TABLE2_TEXT_DESCRIPTION', 'Table Rate 2');
define('MODULE_SHIPPING_TABLE2_TEXT_WAY', 'Best Way');
define('MODULE_SHIPPING_TABLE2_TEXT_WEIGHT', 'Weight');
define('MODULE_SHIPPING_TABLE2_TEXT_AMOUNT', 'Amount');
?>

 

Just look up the thread a bit and follow the instruction.

 

Cheers

 

G

Need help installing add ons/contributions, cleaning a hacked site or a bespoke development, check my profile

 

Virus Threat Scanner

My Contributions

Basic install answers.

Click here for Contributions / Add Ons.

UK your site.

Site Move.

Basic design info.

 

For links mentioned in old answers that are no longer here follow this link Useful Threads.

 

If this post was useful, click the Like This button over there ======>>>>>.

Link to comment
Share on other sites

  • 2 years later...

I need to set up my shipping in almost exactly the same way as the OP

 

Would changing the shipping weights in the catalogue to a figure equal to the price work just the same?

 

For example. OP wanted the following for the UK

Up to £5.00 - £1.95
£5.01 to £15.00 - £2.95
£15.01 to £25.00 - £3.95
£25.01 and above - Free of Charge

 

Zonal shipping only gives us weight based shipping variables

 

So, by making product weight equal to price we have a price based shipping variable
Up to 5lb - £1.95
5.01lb to 15lb - £2.95
15.01lb to £25lb - £3.95
25.01lb and above - Free of Charge
 

Would this work? Is product weight visible to the customer?

 

Julian

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...