Alan Culpitt Posted February 16, 2010 Share Posted February 16, 2010 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. Quote Link to comment Share on other sites More sharing options...
Guest Posted February 16, 2010 Share Posted February 16, 2010 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 Quote Link to comment Share on other sites More sharing options...
Alan Culpitt Posted February 16, 2010 Author Share Posted February 16, 2010 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 Quote Link to comment Share on other sites More sharing options...
renate2 Posted February 27, 2010 Share Posted February 27, 2010 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'); ?> Quote Link to comment Share on other sites More sharing options...
snuggtopz Posted December 27, 2011 Share Posted December 27, 2011 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 Quote Link to comment Share on other sites More sharing options...
Guest Posted December 27, 2011 Share Posted December 27, 2011 Rich, Use the Multigeozone Multitable contribution,full instructions are included. Chris Quote Link to comment Share on other sites More sharing options...
snuggtopz Posted December 27, 2011 Share Posted December 27, 2011 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. Quote Link to comment Share on other sites More sharing options...
Guest Posted December 27, 2011 Share Posted December 27, 2011 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 Quote Link to comment Share on other sites More sharing options...
snuggtopz Posted December 28, 2011 Share Posted December 28, 2011 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. Quote Link to comment Share on other sites More sharing options...
BrandonFancote Posted December 31, 2011 Share Posted December 31, 2011 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? Quote Link to comment Share on other sites More sharing options...
♥geoffreywalton Posted December 31, 2011 Share Posted December 31, 2011 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 Quote 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 More sharing options...
F58 Posted June 15, 2014 Share Posted June 15, 2014 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 variableUp to 5lb - £1.955.01lb to 15lb - £2.9515.01lb to £25lb - £3.9525.01lb and above - Free of Charge Would this work? Is product weight visible to the customer? Julian Quote Link to comment Share on other sites More sharing options...
♥kymation Posted June 15, 2014 Share Posted June 15, 2014 Both the Table Rate and the Multigeozone Multitable module have an option to be based on price rather than weight. Regards Jim Quote See my profile for a list of my addons and ways to get support. Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.