Bryce F Posted August 11, 2009 Posted August 11, 2009 (edited) Hi there. I'm working on a website for a retail store. I currently have a flat-rate shipping cost enabled, which is fine. I'd also like to have an option where the customer can pick up the item directly from the store (and forgo the shipping charge). I figured I'd approach this by creating another shipping module that allowed me to set a pick-up price (0). I cloned the flat-rate module and changed the appropriate variable and function names both in the cloned main flat.php file (includes/modules/shipping/pickup.php) and the cloned language flat.php file (includes/languages/english/modules/shipping/pickup.php). Oddly, when I try to install/uninstall the module, or use the module when checking out my cart, I get the following errors: Warning: Cannot modify header information - headers already sent by (output started at /home/watermel/public_html/osc/includes/modules/shipping/pickup.php:55) in /home/watermel/public_html/osc/admin/includes/functions/general.php on line 22 I also get the same error (minus the "admin/" part of the path) when I access this module from the cart checkout. If interested, here is my main pickup.php file, based on the flat.php: <?php class pickup { var $code, $title, $description, $icon, $enabled; // class constructor function pickup() { global $order; $this->code = 'pickup'; $this->title = MODULE_SHIPPING_PICKUP_TEXT_TITLE; $this->description = MODULE_SHIPPING_PICKUP_TEXT_DESCRIPTION; $this->sort_order = MODULE_SHIPPING_PICKUP_SORT_ORDER; $this->icon = ''; $this->enabled = ((MODULE_SHIPPING_PICKUP_STATUS == 'True') ? true : false); } // class methods function quote($method = '') { global $order; $this->quotes = array('id' => $this->code, 'module' => MODULE_SHIPPING_PICKUP_TEXT_TITLE, 'methods' => array(array('id' => $this->code, 'title' => MODULE_SHIPPING_PICKUP_TEXT_WAY, 'cost' => MODULE_SHIPPING_PICKUP_COST))); 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_PICKUP_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 In-store Pickups', 'MODULE_SHIPPING_PICKUP_STATUS', 'True', 'Do you want to offer in-store pickups?', '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_PICKUP_COST', '0.00', 'The shipping cost for all orders using 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_PICKUP_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_PICKUP_SORT_ORDER', '6', '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_PICKUP_STATUS', 'MODULE_SHIPPING_PICKUP_COST', 'MODULE_SHIPPING_PICKUP_TAX_CLASS', 'MODULE_SHIPPING_PICKUP_SORT_ORDER'); } } ?> Am I going about this the wrong way? Is there an easier way? Thank you for your time. Edited August 11, 2009 by Bryce F Quote
multimixer Posted August 11, 2009 Posted August 11, 2009 There is a store pick up module in the contributions. Basically it's a clone of flat rate, so the way you go, but after it exist, why to reinvent it? I have it set up just for zones that customers can really reach, then combined with "cash on pickup" payment way (appearing only if somebody choose the spu shipping way and now I'm trying to make it to work together with a storelocator, where customers can choose in what store they want to pick up Quote My community profile | Template system for osCommerce - New: Responsive | Feedback channel
Bryce F Posted August 11, 2009 Author Posted August 11, 2009 Thanks for the link. I used it to make a slight modification to my own pickup module, and it worked fine. (Reinventing the wheel only took about 10 minutes anyhow...) Another question: Is there a clean way to have the default shipping method be flat rate (rather than cheapest)? I was considering modifying the includes/classes/shipping.php->cheapest() function to choose the correct method, but I figure there has to be a better way... Thanks! Quote
multimixer Posted August 11, 2009 Posted August 11, 2009 I would go directly to catalog/checkout_shipping.php and do something with this line if ( !tep_session_is_registered('shipping') || ( tep_session_is_registered('shipping') && ($shipping == false) && (tep_count_shipping_modules() > 1) ) ) $shipping = $shipping_modules->cheapest(); What if you change the cheapest to flat? Quote My community profile | Template system for osCommerce - New: Responsive | Feedback channel
Bryce F Posted August 11, 2009 Author Posted August 11, 2009 I would go directly to catalog/checkout_shipping.php and do something with this line if ( !tep_session_is_registered('shipping') || ( tep_session_is_registered('shipping') && ($shipping == false) && (tep_count_shipping_modules() > 1) ) ) $shipping = $shipping_modules->cheapest(); What if you change the cheapest to flat? Well, cheapest() seems to be returning an array, and I'm not sure exactly what I should replace it with in order to choose flat... Quote
Bryce F Posted August 11, 2009 Author Posted August 11, 2009 Got it... this worked: $array_flat = array('id' => 'flat_flat'); Quote
multimixer Posted August 11, 2009 Posted August 11, 2009 Got it... this worked: $array_flat = array('id' => 'flat_flat'); Great. I was also just looking how to make my brainfart here to work :) Quote My community profile | Template system for osCommerce - New: Responsive | Feedback channel
Octane Posted January 6, 2010 Posted January 6, 2010 I am also using the spu.php (Store Pick Up Contribution). I was wondering if it is possible to modify it so that in checkout_shipping.php it only shows the title: Collect your order R0.00 o But in checkout_confirmation.php it will add an address etc. Shipping Method (Edit) Collect your order My Shop Street My Shop Suburb My Shop Postcode Is this possible? Quote
recsx Posted October 28, 2011 Posted October 28, 2011 I would go directly to catalog/checkout_shipping.php and do something with this line if ( !tep_session_is_registered('shipping') || ( tep_session_is_registered('shipping') && ($shipping == false) && (tep_count_shipping_modules() > 1) ) ) $shipping = $shipping_modules->cheapest(); What if you change the cheapest to flat? Multimixer was right about investigation this function. I was having issues with the way that the check_out was handling the cheapest value default selected. I implemented a Pickup At the Store option for those who are close to the store and can pick up their order, but OSC would always select the cheapest by default and some if not all but many users are so lame that they don't even take the time to overlook their shipping options and simply click continue and don;t even know that they selected the Pick Up option, only after they get the confirmation of their order they realise what they did. So long story short; catalog/includes/classes/shipping.php At the bottom look for function cheapest() edit the line: //if ($rates[$i]['cost'] < $cheapest['cost']) Rem it out and replace with this one: if ($rates[$i]['cost'] < $cheapest['cost'] && $rates[$i]['cost'] > 0) This is basic php coding 101, select the cheapest but not ZERO! This is pretty much the fist time I've ever contributed to a forum in my life, so be nice. Quote
outdoorgeek Posted July 18, 2013 Posted July 18, 2013 Hi, I'd like to change my store times as the ones shown in this module is incorrect. Not being an expert could you please tell me the file location and name that I need to edit. Thank you Quote
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.
Note: Your post will require moderator approval before it will be visible.