Jump to content
Sign in to follow this  
tc0nn

$0 cost shipping not selected by default

Recommended Posts

Don't know if this has been discussed or fixed, but I had items over $40 ship free, but when the shipping methods appeared, the first non-$0 method would be selected by default. to fix:

 

Line 100 in catalog/includes/shipping.php...

if (isset($quotes['methods'][$i]['cost']) && tep_not_null($quotes['methods'][$i]['cost'])) {

 

simply change to:

if (isset($quotes['methods'][$i]['cost'])){

Share this post


Link to post
Share on other sites

Many thanks for this quick fix - it had been a little above my PHP abilities to track this down.

 

The correct location for the file to change is: catalog/includes/classes/shipping.php

 

 

For other users trying to find this fix, some keywords:

 

Cheapest function problem issue fix

oscommerce lowest price first

free shipping postage

shipping.php

ship in cart

Share this post


Link to post
Share on other sites

Hi,

I use an older version of oscommerce and am also trying to get it so that the "Pickup $0" option is not the default shipping method.

I have copied below my shipping.php file. Any help would be hugely appreciated.

Cheers.

 

<?php

 

class shipping {

var $modules;

 

// class constructor

function shipping() {

global $shipping_count, $language;

 

$shipping_count = 0;

if (MODULE_SHIPPING_INSTALLED) {

$this->modules = explode(';', MODULE_SHIPPING_INSTALLED); // get array of accepted modules

reset($this->modules);

while (list(, $value) = each($this->modules)) {

include(DIR_WS_LANGUAGES . $language . '/modules/shipping/' . $value);

include(DIR_WS_SHIPPING_MODULES . $value);

 

$class = substr($value, 0, strrpos($value, '.'));

$GLOBALS[$class] = new $class;

}

}

}

 

// class methods

function selection() {

$selection_string = '';

if (MODULE_SHIPPING_INSTALLED) {

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$selection_string .= $GLOBALS[$class]->selection();

}

}

$selection_string .= tep_draw_hidden_field('shipping_quote_all', '0');

}

 

return $selection_string;

}

 

function quote() {

global $total_weight, $shipping_weight, $shipping_quoted, $shipping_num_boxes;

 

if (MODULE_SHIPPING_INSTALLED) {

$shipping_quoted = '';

$shipping_num_boxes = 1;

$shipping_weight = $total_weight;

 

if ($total_weight > SHIPPING_MAX_WEIGHT) { // Split into many boxes

$shipping_num_boxes = ceil($total_weight/SHIPPING_MAX_WEIGHT);

$shipping_weight = $total_weight/$shipping_num_boxes;

}

 

if ($shipping_weight < SHIPPING_BOX_WEIGHT*SHIPPING_BOX_PADDING) {

$shipping_weight = $shipping_weight+SHIPPING_BOX_WEIGHT;

} else {

$shipping_weight = $shipping_weight + ($shipping_weight*SHIPPING_BOX_PADDING/100);

}

 

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$GLOBALS[$class]->quote();

}

}

}

}

 

function cheapest() {

if (MODULE_SHIPPING_INSTALLED) {

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$GLOBALS[$class]->cheapest();

}

}

}

}

 

function display() {

$display_string = '';

if (MODULE_SHIPPING_INSTALLED) {

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$display_string .= $GLOBALS[$class]->display();

}

}

}

 

return $display_string;

}

 

function confirm() {

global $shipping_cost, $shipping_method;

 

if (MODULE_SHIPPING_INSTALLED) {

$confirm_string .= '<input type="hidden" name="shipping_cost" value="' . $shipping_cost . '">' .

'<input type="hidden" name="shipping_method" value="' . $shipping_method . '">';

 

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$confirm_string .= $GLOBALS[$class]->confirm();

}

}

 

return $confirm_string;

}

}

}

?>

Share this post


Link to post
Share on other sites

$GLOBALS[$class]->cheapest();

 

This is responsible.

 

Satish


Ask/Skype for Free osCommerce value addon/SEO suggestion tips for your site.

 

Check My About US For who am I and what My company does.

Share this post


Link to post
Share on other sites
Hi,

I use an older version of oscommerce and am also trying to get it so that the "Pickup $0" option is not the default shipping method.

I have copied below my shipping.php file. Any help would be hugely appreciated.

Cheers.

 

<?php

 

class shipping {

var $modules;

 

// class constructor

function shipping() {

global $shipping_count, $language;

 

$shipping_count = 0;

if (MODULE_SHIPPING_INSTALLED) {

$this->modules = explode(';', MODULE_SHIPPING_INSTALLED); // get array of accepted modules

reset($this->modules);

while (list(, $value) = each($this->modules)) {

include(DIR_WS_LANGUAGES . $language . '/modules/shipping/' . $value);

include(DIR_WS_SHIPPING_MODULES . $value);

 

$class = substr($value, 0, strrpos($value, '.'));

$GLOBALS[$class] = new $class;

}

}

}

 

// class methods

function selection() {

$selection_string = '';

if (MODULE_SHIPPING_INSTALLED) {

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$selection_string .= $GLOBALS[$class]->selection();

}

}

$selection_string .= tep_draw_hidden_field('shipping_quote_all', '0');

}

 

return $selection_string;

}

 

function quote() {

global $total_weight, $shipping_weight, $shipping_quoted, $shipping_num_boxes;

 

if (MODULE_SHIPPING_INSTALLED) {

$shipping_quoted = '';

$shipping_num_boxes = 1;

$shipping_weight = $total_weight;

 

if ($total_weight > SHIPPING_MAX_WEIGHT) { // Split into many boxes

$shipping_num_boxes = ceil($total_weight/SHIPPING_MAX_WEIGHT);

$shipping_weight = $total_weight/$shipping_num_boxes;

}

 

if ($shipping_weight < SHIPPING_BOX_WEIGHT*SHIPPING_BOX_PADDING) {

$shipping_weight = $shipping_weight+SHIPPING_BOX_WEIGHT;

} else {

$shipping_weight = $shipping_weight + ($shipping_weight*SHIPPING_BOX_PADDING/100);

}

 

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$GLOBALS[$class]->quote();

}

}

}

}

 

function cheapest() {

if (MODULE_SHIPPING_INSTALLED) {

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$GLOBALS[$class]->cheapest();

}

}

}

}

 

function display() {

$display_string = '';

if (MODULE_SHIPPING_INSTALLED) {

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$display_string .= $GLOBALS[$class]->display();

}

}

}

 

return $display_string;

}

 

function confirm() {

global $shipping_cost, $shipping_method;

 

if (MODULE_SHIPPING_INSTALLED) {

$confirm_string .= '<input type="hidden" name="shipping_cost" value="' . $shipping_cost . '">' .

'<input type="hidden" name="shipping_method" value="' . $shipping_method . '">';

 

reset($this->modules);

while (list(, $value) = each($this->modules)) {

$class = substr($value, 0, strrpos($value, '.'));

if ($GLOBALS[$class]->enabled) {

$confirm_string .= $GLOBALS[$class]->confirm();

}

}

 

return $confirm_string;

}

}

}

?>

 

Hi-

Oops, you are using quite old version of Oscommerce.

In newer version you would edit the shipping.php class file, but the version you are using. You would edit the modules/shipping/item.php.

Just make the cheapest() return $shipping_cheapest = 'item';

That shall work for any shipping methods that you want to make default selected.

Go to the corresponding module file and modify the cheapest().

_

Thanks

kashif

Share this post


Link to post
Share on other sites

10 years after this original thread, I made the code change recommended in the top post by tc0nn, and it worked! 

 

My situation - my site is set up to default to the cheapest of two shipping methods, Priority Mail and Express Mail.  Today, I decided to offer free Priority Mail shipping, but in making it free, the site now defaulted to Express Mail (certainly not the cheapest).  After reading many, many threads on this topic, I stumbled upon this one, and my problem was solved!

 

Thank you!!

Edited by krdito

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
Sign in to follow this  

×