Jump to content
Alan Culpitt

3x zones Table Rate shipping Module

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.

Share this post


Link to post
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


:|: Was this post helpful ? Click the LIKE THIS button :|:

 

See my Profile to learn more about add ons, templates, support plans and custom coding (click here)

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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');
?>

Share this post


Link to post
Share on other sites

hiya

 

I'm a php virgin and probably always will be, could some kind soul

show me how to apply these tables ?

 

I dont get how to set up the table file in shipping module ?

and how to get OSC to use these tables ?

 

Rich

Share this post


Link to post
Share on other sites

Rich,

 

 

Use the Multigeozone Multitable contribution,full instructions are included.

 

 

 

Chris


:|: Was this post helpful ? Click the LIKE THIS button :|:

 

See my Profile to learn more about add ons, templates, support plans and custom coding (click here)

Share this post


Link to post
Share on other sites

hiya

 

thanks Chris

 

I have a problem using add ins, I can never get them to work or they just screw up my shop

thats why i've been trying to do it this way.

Share this post


Link to post
Share on other sites

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


:|: Was this post helpful ? Click the LIKE THIS button :|:

 

See my Profile to learn more about add ons, templates, support plans and custom coding (click here)

Share this post


Link to post
Share on other sites

thanks for taking the time to reply Chris.

 

Maybe i'll give it a go..

 

I'm not after much, just a 3 zone posting system.

Share this post


Link to post
Share on other sites

Cannot redeclare class flat in /home/hotspo11/public_html/hotspotsexshop.net/catalog/includes/languages/english/modules/shipping/flat1.php on line 13

 

This is the error I am receiving can anyone help?

Share this post


Link to post
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 ======>>>>>.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×