Hi Martin,
I hope you or perhaps another user can help me.
I need to add a second zone but I am stumped with how to change the config files as you suggested. I too have made the change to the zone.php file but the 2nd zone has no content and as you said, I cannot save anything (the boxes are there but no text).
So I tried to follow what you had said, but I think I am looking in the wrong places. Can you give me a bit more detail about how to:
a) Find the right .php file to add the 3 lines that you suggested

more detail on exactly how to add the lines to allow the "text" to show up.
I'm a bit new at this so please be gentle with me!
The actual code in my zone.php file looks like this (it does not go as high as line 262 so that is why I think I'm looking in the wrong place...)
*/
class zones {
var $code, $title, $description, $enabled, $num_zones;
// class constructor
function zones() {
$this->code = 'zones';
$this->title = MODULE_SHIPPING_ZONES_TEXT_TITLE;
$this->description = MODULE_SHIPPING_ZONES_TEXT_DESCRIPTION;
$this->sort_order = MODULE_SHIPPING_ZONES_SORT_ORDER;
$this->icon = '';
$this->tax_class = MODULE_SHIPPING_ZONES_TAX_CLASS;
$this->enabled = ((MODULE_SHIPPING_ZONES_STATUS == 'True') ? true : false);
// CUSTOMIZE THIS SETTING FOR THE NUMBER OF ZONES NEEDED
$this->num_zones = 2;
}
// class methods
function quote($method = '') {
global $order, $shipping_weight, $shipping_num_boxes;
$dest_country = $order->delivery['country']['iso_code_2'];
$dest_zone = 0;
$error = false;
for ($i=1; $i<=$this->num_zones; $i++) {
$countries_table = constant('MODULE_SHIPPING_ZONES_COUNTRIES_' . $i);
$country_zones = preg_split("/[,]/", $countries_table);
if (in_array($dest_country, $country_zones)) {
$dest_zone = $i;
break;
}
}
if ($dest_zone == 0) {
$error = true;
} else {
$shipping = -1;
$zones_cost = constant('MODULE_SHIPPING_ZONES_COST_' . $dest_zone);
$zones_table = preg_split("/[:,]/" , $zones_cost);
$size = sizeof($zones_table);
for ($i=0; $i<$size; $i+=2) {
if ($shipping_weight <= $zones_table[$i]) {
$shipping = $zones_table[$i+1];
$shipping_method = MODULE_SHIPPING_ZONES_TEXT_WAY . ' ' . $dest_country . ' : ' . $shipping_weight . ' ' . MODULE_SHIPPING_ZONES_TEXT_UNITS;
break;
}
}
if ($shipping == -1) {
$shipping_cost = 0;
$shipping_method = MODULE_SHIPPING_ZONES_UNDEFINED_RATE;
} else {
$shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_ZONES_HANDLING_' . $dest_zone);
}
}
$this->quotes = array('id' => $this->code,
'module' => MODULE_SHIPPING_ZONES_TEXT_TITLE,
'methods' => array(array('id' => $this->code,
'title' => $shipping_method,
'cost' => $shipping_cost)));
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);
if ($error == true) $this->quotes['error'] = MODULE_SHIPPING_ZONES_INVALID_ZONE;
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_ZONES_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 Zones Method', 'MODULE_SHIPPING_ZONES_STATUS', 'True', 'Do you want to offer zone 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, use_function, set_function, date_added) values ('Tax Class', 'MODULE_SHIPPING_ZONES_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, date_added) values ('Sort Order', 'MODULE_SHIPPING_ZONES_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
for ($i = 1; $i <= $this->num_zones; $i++) {
$default_countries = '';
if ($i == 1) {
$default_countries = 'US,CA';
}
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $i ." Countries', 'MODULE_SHIPPING_ZONES_COUNTRIES_" . $i ."', '" . $default_countries . "', 'Comma separated list of two character ISO country codes that are part of Zone " . $i . ".', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $i ." Shipping Table', 'MODULE_SHIPPING_ZONES_COST_" . $i ."', '3:8.50,7:10.50,99:20.00', 'Shipping rates to Zone " . $i . " destinations based on a group of maximum order weights. Example: 3:8.50,7:10.50,... Weights less than or equal to 3 would cost 8.50 for Zone " . $i . " destinations.', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Zone " . $i ." Handling Fee', 'MODULE_SHIPPING_ZONES_HANDLING_" . $i."', '0', 'Handling Fee for this shipping zone', '6', '0', now())");
}
}
function remove() {
tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
}
function keys() {
$keys = array('MODULE_SHIPPING_ZONES_STATUS', 'MODULE_SHIPPING_ZONES_TAX_CLASS', 'MODULE_SHIPPING_ZONES_SORT_ORDER');
for ($i=1; $i<=$this->num_zones; $i++) {
$keys[] = 'MODULE_SHIPPING_ZONES_COUNTRIES_' . $i;
$keys[] = 'MODULE_SHIPPING_ZONES_COST_' . $i;
$keys[] = 'MODULE_SHIPPING_ZONES_HANDLING_' . $i;
}
return $keys;
}
}
?>
Cheers,
Simon
MartinLass, on 12 June 2011, 00:44, said:
Okay... here's what I did to correct this zone shipping glitch. I went into the database and inserted three new rows/entries in the configuration section.
The existing/default Zone 1 rows in the configuration section of the database are "Zone 1 Countries", "Zone 1 Shipping Table", and "Zone 1 Handling Fee". (Lines 262, 263, and 264 in my database, but may be different in yours?)
By selecting each of these in turn and clicking "edit," I could view each entry at a glance. I copied down all the relevant parameters for each. (I did NOT edit and save these, though... it was just for viewing and copying.)
Then I inserted three new rows that were identical to the existing three rows EXCEPT:
--I used new ids: 265, 266, and 267 respectively... may be different for you, but I suspect that these ids must follow sequentially from the existing/default three Zone 1 rows. Be careful not to try to create rows with ids identical to existing ones!
--I changed each instance in the text parameters of "Zone 1" to "Zone 2". BE CAREFUL WITH THE configuration_key PARAMETER. ONLY EDIT THE NUMBER AT THE END. Zones.php needs this to be correct!
--I changed the country parameter (Shipping Countries row) to suit, the zones I wanted for Zone 2 (Shipping Table row), and the handling fee for Zone 2 (Handling Fee row).
NOTE: For those who are not MySQL savvy, you MUST enter the Date Added and Date Modified fields, and the Date Modified field MUST be later than the Date Added field.
I then updated zones.php to include 2 zones (see the instructions in the actual zone.php file).
When I then went to the Admin Panel and went to Module/Shipping and clicked on Zone Rates, the new Zone 2 rates were there! I could now edit these settings from here. And it worked in practice when placing orders for each of these zones!
Enjoy!
--Martin