annprather Posted February 28, 2007 Posted February 28, 2007 My store calculates shipping by adding a $2 shipping charge per item in the cart. We are starting to sell sewing classes so need to make sure that shipping is not charged on classes. In the catalog, I have set the classes to 0 weight. If the customer orders sewing classes only (and no products) I have it set to not add shipping. My problem is that I don't know how to edit \includes\modules\shipping\item.php so that $total_count will increment if the weight of the item is 0 -- thereby calculating shipping correctly for a cart with a mix of classes and products. Thanks, Ann P.
Guest Posted March 1, 2007 Posted March 1, 2007 use the order class in your shipping module and query the products[$i]['weight'] If its 0 you skip the counter. If you have mixed content actually the code should display the shipping page with the shipping modules.
annprather Posted March 18, 2007 Author Posted March 18, 2007 Thank you for your reply. Unfortunately, my php knowledge is very limited so your reply is not detailed enough for me. Ack!!! I want the shipping module to display when the cart includes patterns and classes. But I cannot get the counter to skip incrementing when the item weight is zero. I have tried creating a new variable "$total_items" to use in place of $total_count in the following statement: 'cost' => (MODULE_SHIPPING_ITEM_COST * $total_items) + MODULE_SHIPPING_ITEM_HANDLING). Here is what I have tried. Am I at all close? thank you in advance for any help you may be able to provide. $total_items = 0; if (is_array($this->contents)) { reset($this->contents); while (list($products_id, ) = each($this->contents)) { $item_weight = $this->get_weight($products_id); if ($item_weight > 0) { $total_items += $this->get_quantity($products_id); } } }
Guest Posted March 18, 2007 Posted March 18, 2007 where is the code for the shipping module. Can you post it?
annprather Posted March 19, 2007 Author Posted March 19, 2007 <?php /* $Id: item.php,v 1.39 2003/02/05 22:41:52 hpdl Exp $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright © 2003 osCommerce Released under the GNU General Public License */ class item { var $code, $title, $description, $icon, $enabled; // class constructor function item() { global $order; $this->code = 'item'; $this->title = MODULE_SHIPPING_ITEM_TEXT_TITLE; $this->description = MODULE_SHIPPING_ITEM_TEXT_DESCRIPTION; $this->sort_order = MODULE_SHIPPING_ITEM_SORT_ORDER; $this->icon = ''; $this->tax_class = MODULE_SHIPPING_ITEM_TAX_CLASS; $this->enabled = ((MODULE_SHIPPING_ITEM_STATUS == 'True') ? true : false); if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_ITEM_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_ITEM_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, $total_count; $this->quotes = array('id' => $this->code, 'module' => MODULE_SHIPPING_ITEM_TEXT_TITLE, 'methods' => array(array('id' => $this->code, 'title' => MODULE_SHIPPING_ITEM_TEXT_WAY, 'cost' => (MODULE_SHIPPING_ITEM_COST * $total_count) + MODULE_SHIPPING_ITEM_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_ITEM_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 Item Shipping', 'MODULE_SHIPPING_ITEM_STATUS', 'True', 'Do you want to offer per item 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 Cost', 'MODULE_SHIPPING_ITEM_COST', '2.50', 'The shipping cost will be multiplied by the number of items in an order that uses 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, date_added) values ('Handling Fee', 'MODULE_SHIPPING_ITEM_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_ITEM_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_ITEM_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_ITEM_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_ITEM_STATUS', 'MODULE_SHIPPING_ITEM_COST', 'MODULE_SHIPPING_ITEM_HANDLING', 'MODULE_SHIPPING_ITEM_TAX_CLASS', 'MODULE_SHIPPING_ITEM_ZONE', 'MODULE_SHIPPING_ITEM_SORT_ORDER'); } } ?>
Guest Posted March 19, 2007 Posted March 19, 2007 so you havent done anything yet you change the quote method. Something like // class methods function quote($method = '') { global $order, $cart; $products = $cart->get_products(); $count = 0; for($i=0, $j=count($products); $i<$j; $i++) { if($products[$i]]['weight']) $count++; } $this->quotes = array('id' => $this->code, 'module' => MODULE_SHIPPING_ITEM_TEXT_TITLE, 'methods' => array(array('id' => $this->code, 'title' => MODULE_SHIPPING_ITEM_TEXT_WAY, 'cost' => (MODULE_SHIPPING_ITEM_COST * $count) + MODULE_SHIPPING_ITEM_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; } so it calculates only the products that have weight
annprather Posted March 20, 2007 Author Posted March 20, 2007 Thanks. the following worked. // class methods function quote($method = '') { global $order, $cart; $products = $cart->get_products(); $count = 0; for($i=0, $j=count($products); $i<$j; $i++) { if($products[$i]['weight'] > 0) $count++; } $this->quotes = array('id' => $this->code, 'module' => MODULE_SHIPPING_ITEM_TEXT_TITLE, 'methods' => array(array('id' => $this->code, 'title' => MODULE_SHIPPING_ITEM_TEXT_WAY, 'cost' => (MODULE_SHIPPING_ITEM_COST * $count) + MODULE_SHIPPING_ITEM_HANDLING)));
Recommended Posts
Archived
This topic is now archived and is closed to further replies.