Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Estimated Shipping Costs


Recommended Posts

  • Replies 388
  • Created
  • Last Reply

Top Posters In This Topic

Yes, that's what I meant.

 

akosh,

 

I did a quick test to have the cart total with the estimated shipping costs and although by itself not a problem I am bit wondering what output you have in mind ?

Looking at my own shipping options they can be up to three or four and then the question arises for which one to add the cart total and if that might be useful. Or if you would put a grand total with every shipping option the output wouldn't be very readable anymore.

Maybe you have only one shipping option and it would make more sense ?!

Link to comment
Share on other sites

akosh,

 

I did a quick test to have the cart total with the estimated shipping costs and although by itself not a problem I am bit wondering what output you have in mind ?

Looking at my own shipping options they can be up to three or four and then the question arises for which one to add the cart total and if that might be useful. Or if you would put a grand total with every shipping option the output wouldn't be very readable anymore.

Maybe you have only one shipping option and it would make more sense ?!

 

I was thinking fo something like this:

 

http://www2.mio-tech.be/shop/product_info....products_id=150

 

(add it to the cart)

Link to comment
Share on other sites

I was thinking fo something like this:

 

http://www2.mio-tech.be/shop/product_info....products_id=150

 

(add it to the cart)

 

I see what you mean and it looks good but would mean a whole different approach. It is not something I have planned as I am happy with it as it is now but as with all contributions you can shape it to your needs.

Link to comment
Share on other sites

Do you know where I could place </form> to get the shipping estimator to work?

 

<?php
/*
 $Id: shopping_cart.php,v 1.73 2003/06/09 23:03:56 hpdl Exp $

 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/

 require("includes/application_top.php");

 require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_SHOPPING_CART);

 $breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_SHOPPING_CART));
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="0" cellpadding="5">
 <tr>
   <td class="line" width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
   </table></td>
<!-- body_text //-->
   <td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_SHOPPING_CART, 'action=update_product')); ?> 
     <table width="100%" border="0" cellspacing="0" cellpadding="0">
       <tr>
         <td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
       </tr>
       <tr>
         <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
       </tr>
     </table> 
     <table width="100%" border="0" cellspacing="0" cellpadding="0">
       <tr>
         <td><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<tr>
  <td><?php include(DIR_WS_MODULES . FILENAME_ESTIMATED_SHIPPING); ?></td>
</tr>
   </table></td>
         <td><table width="100%" border="0" cellspacing="0" cellpadding="0">
             <tr>
               <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
     <tr>
       
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
  
<?php
 if ($cart->count_contents() > 0) {
?>
     <tr>
       <td>
<?php
   $info_box_contents = array();
   $info_box_contents[0][] = array('align' => 'center',
                                   'params' => 'class="productListing-heading"',
                                   'text' => TABLE_HEADING_REMOVE);

   $info_box_contents[0][] = array('params' => 'class="productListing-heading"',
                                   'text' => TABLE_HEADING_PRODUCTS);

   $info_box_contents[0][] = array('align' => 'center',
                                   'params' => 'class="productListing-heading"',
                                   'text' => TABLE_HEADING_QUANTITY);

   $info_box_contents[0][] = array('align' => 'right',
                                   'params' => 'class="productListing-heading"',
                                   'text' => TABLE_HEADING_TOTAL);

   $any_out_of_stock = 0;
   $products = $cart->get_products();
   for ($i=0, $n=sizeof($products); $i<$n; $i++) {
// Push all attributes information in an array
     if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
       while (list($option, $value) = each($products[$i]['attributes'])) {
         echo tep_draw_hidden_field('id[' . $products[$i]['id'] . '][' . $option . ']', $value);
         $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix
                                     from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
                                     where pa.products_id = '" . $products[$i]['id'] . "'
                                      and pa.options_id = '" . $option . "'
                                      and pa.options_id = popt.products_options_id
                                      and pa.options_values_id = '" . $value . "'
                                      and pa.options_values_id = poval.products_options_values_id
                                      and popt.language_id = '" . $languages_id . "'
                                      and poval.language_id = '" . $languages_id . "'");
         $attributes_values = tep_db_fetch_array($attributes);

         $products[$i][$option]['products_options_name'] = $attributes_values['products_options_name'];
         $products[$i][$option]['options_values_id'] = $value;
         $products[$i][$option]['products_options_values_name'] = $attributes_values['products_options_values_name'];
         $products[$i][$option]['options_values_price'] = $attributes_values['options_values_price'];
         $products[$i][$option]['price_prefix'] = $attributes_values['price_prefix'];
       }
     }
   }

   for ($i=0, $n=sizeof($products); $i<$n; $i++) {
     if (($i/2) == floor($i/2)) {
       $info_box_contents[] = array('params' => 'class="productListing-even"');
     } else {
       $info_box_contents[] = array('params' => 'class="productListing-odd"');
     }

     $cur_row = sizeof($info_box_contents) - 1;

     $info_box_contents[$cur_row][] = array('align' => 'center',
                                            'params' => 'class="productListing-data" valign="top"',
                                            'text' => tep_draw_checkbox_field('cart_delete[]', $products[$i]['id']));

     $products_name = '<table border="0" cellspacing="2" cellpadding="2">' .
                      '  <tr>' .
                      //'    <td class="productListing-data" align="center"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '">' . tep_image(DIR_WS_IMAGES . $products[$i]['image'], $products[$i]['name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a></td>' .
                      '    <td class="productListing-data" valign="top"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '"><b>' . $products[$i]['name'] . '</b></a>';

     if (STOCK_CHECK == 'true') {
       $stock_check = tep_check_stock($products[$i]['id'], $products[$i]['quantity']);
       if (tep_not_null($stock_check)) {
         $any_out_of_stock = 1;

         $products_name .= $stock_check;
       }
     }

     if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
       reset($products[$i]['attributes']);
       while (list($option, $value) = each($products[$i]['attributes'])) {
         $products_name .= '<br><small><i> - ' . $products[$i][$option]['products_options_name'] . ': ' . $products[$i][$option]['products_options_values_name'] . '</i></small>';
       }
     }

     $products_name .= '    </td>' .
                       '  </tr>' .
                       '</table>';

     $info_box_contents[$cur_row][] = array('params' => 'class="productListing-data"',
                                            'text' => $products_name);

     $info_box_contents[$cur_row][] = array('align' => 'center',
                                            'params' => 'class="productListing-data" valign="top"',
                                            'text' => tep_draw_input_field('cart_quantity[]', $products[$i]['quantity'], 'size="4"') . tep_draw_hidden_field('products_id[]', $products[$i]['id']));

     $info_box_contents[$cur_row][] = array('align' => 'right',
                                            'params' => 'class="productListing-data" valign="top"',
                                            'text' => '<b>' . $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']), $products[$i]['quantity']) . '</b>');
   }

   new productListingBox($info_box_contents);
?>
       </td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td align="right" class="main"><b><?php echo SUB_TITLE_SUB_TOTAL; ?> <?php echo $currencies->format($cart->show_total()); ?></b></td>
     </tr>
<?php
   if ($any_out_of_stock == 1) {
     if (STOCK_ALLOW_CHECKOUT == 'true') {
?>
     <tr>
       <td class="stockWarning" align="center"><br><?php echo OUT_OF_STOCK_CAN_CHECKOUT; ?></td>
     </tr>
<?php
     } else {
?>
     <tr>
       <td class="stockWarning" align="center"><br><?php echo OUT_OF_STOCK_CANT_CHECKOUT; ?></td>
     </tr>
<?php
     }
   }
?>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
             <tr>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
               <td class="main"><?php echo tep_image_submit('button_update_cart.gif', IMAGE_BUTTON_UPDATE_CART); ?></td>
<?php
   $back = sizeof($navigation->path)-2;
   if (isset($navigation->path[$back])) {
?>
               <td class="main"><?php echo '<a href="' . tep_href_link($navigation->path[$back]['page'], tep_array_to_string($navigation->path[$back]['get'], array('action')), $navigation->path[$back]['mode']) . '">' . tep_image_button('button_continue_shopping.gif', IMAGE_BUTTON_CONTINUE_SHOPPING) . '</a>'; ?></td>
<?php
   }
?>
               <td align="right" class="main"><?php echo '<a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '">' . tep_image_button('button_checkout.gif', IMAGE_BUTTON_CHECKOUT) . '</a>'; ?></td>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
<?php
 } else {
?>
     <tr>
       <td align="center" class="main"><?php new infoBox(array(array('text' => TEXT_CART_EMPTY))); ?></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
             <tr>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
               <td align="right" class="main"><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
             </tr>
    
           </table></td>
         </tr>
       </table></td>
 
     </tr>
<?php
 }
?>
  
</table></td>
             </tr>
           </table></td>
       </tr>
     </table>
     
   </td>




<!-- body_text_eof //-->
   </tr>

</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

Link to comment
Share on other sites

akosh,

 

yes, read post #20 on page 1 of this thread where rezdwan gives a working solution for use on the shopping cart page.

 

Yes I know, I have read that, but I'm trying to to place the shipping estimator box beside the shopping cart.

 

<td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_SHOPPING_CART, 'action=update_product')); ?>

<table width="100%" border="0" cellspacing="0" cellpadding="0">

<tr>

<td class="pageHeading"><?php echo HEADING_TITLE; ?></td>

</tr>

<tr>

<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>

</tr>

</table>

<table width="100%" border="0" cellspacing="0" cellpadding="0">

<tr>

<td><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">

<tr>

<td><?php include(DIR_WS_MODULES . FILENAME_ESTIMATED_SHIPPING); ?></td>

</tr>

</table></td>

<td><table width="100%" border="0" cellspacing="0" cellpadding="0">

<tr>

<td><table border="0" width="100%" cellspacing="0" cellpadding="0">

<tr>

 

</tr>

<tr>

<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>

</tr>

.....

Link to comment
Share on other sites

Yes I know, I have read that, but I'm trying to to place the shipping estimator box beside the shopping cart.

 

<td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_SHOPPING_CART, 'action=update_product')); ?>

    <table width="100%" border="0" cellspacing="0" cellpadding="0">

      <tr>

        <td class="pageHeading"><?php echo HEADING_TITLE; ?></td>

      </tr>

      <tr>

        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>

      </tr>

    </table>

    <table width="100%" border="0" cellspacing="0" cellpadding="0">

      <tr>

        <td><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">

<tr>

  <td><?php include(DIR_WS_MODULES . FILENAME_ESTIMATED_SHIPPING); ?></td>

</tr>

  </table></td>

        <td><table width="100%" border="0" cellspacing="0" cellpadding="0">

            <tr>

              <td><table border="0" width="100%" cellspacing="0" cellpadding="0">

    <tr>

     

    </tr>

    <tr>

      <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>

    </tr>

.....

 

I think that will be a tough place but it might work as long as you keep in mind that the estimated shipping box MUST be called upon AFTER the closing </form> tag otherwise the ES box will not work !

Link to comment
Share on other sites

I think that will be a tough place but it might work as long as you keep in mind that the estimated shipping box MUST be called upon AFTER the closing </form> tag otherwise the ES box will not work !

 

Actually, I don't think it can be done, at least I can't do it. I can put it on the right side, but not the left. The shipping estimator will always be above the shopping cart if you want it on the left side. Do you have any ideas?

Link to comment
Share on other sites

Actually, I don't think it can be done, at least I can't do it. I can put it on the right side, but not the left. The shipping estimator will always be above the shopping cart if you want it on the left side.? Do you have any ideas?

 

Well, I guess it would mean a total reconstructuring of the shopping cart page as with the columns as there are default now a shipping calculator on the left or right won't fit and/or look nice. Something like the example you gave would be a nice solution but not something quickly done. I will have a second look at it though but can't promise I will come up with something similar as I have little to no time to spend on programming right now and near future.

Edited by wheeloftime
Link to comment
Share on other sites

Is there a current contribution that displays shipping fees in the shopping cart when a person enters a postal code? If not, I may want to start building one. I have noticed this in a few shopping systems out there.

 

I thought there is one which is country and state based which you can show in the shopping cart but one based on postal code I don't believe there already is.

Link to comment
Share on other sites

wheeloftime

 

Well, I better start working. I will ask a couple of the admins where the estimated (or exact) shipping data is coming from and what carriers are used. If it comes directly from the carrier, the shopping cart might have to be SSL'd. If it is querying a table that was previously downloaded from the carrier, then not.

· willross

··········

Link to comment
Share on other sites

wheeloftime

 

Well, I better start working. I will ask a couple of the admins where the estimated (or exact) shipping data is coming from and what carriers are used. If it comes directly from the carrier, the shopping cart might have to be SSL'd. If it is querying a table that was previously downloaded from the carrier, then not.

 

Will,

 

Some will use a realtime system provided by their postal system, many will use zone, table or whatever more shipping modules there are available. My estimated shipping cost module mimics the first checkout page without needing any SSL as there is no checkout or any other vulnerable data involved. If you study the checkout_shipping page you will find an interaction between availabe shipping modules and the order class and from there you will have to find a way to collect the correct data based upon the information you have from your customer.

Good luck and I am curious which direction you will go !

 

grtz,

Howard

Link to comment
Share on other sites

wheeloftime

 

Thanks. I will try building based on what shipping method or module is chosen for the store or product(s) in the cart. Then provide a <input> or <select> or combination of both that corresponds with the required info (zip code, country, etc.).

 

It might not be too bad if I pull code from the checkout_shipping page. That could help with compatibility (free shipping, zone based rates, etc.).

· willross

··········

Link to comment
Share on other sites

  • 3 weeks later...

I'd like to thank wheeloftime for the great contribution, and all the help he's been giving to everyone in this thread. I just tried installing this contribution (adding it to the index from step 6B) and I keep getting this error:

 

Fatal error: Cannot instantiate non-existent class: httpclient in /home/elaine/domains/creativeworks4u.com/public_html/shop/includes/modules/shipping/ups.php on line 247

 

Has anyone seen this problem before?

Link to comment
Share on other sites

I'd like to thank wheeloftime for the great contribution, and all the help he's been giving to everyone in this thread.  I just tried installing this contribution (adding it to the index from step 6B) and I keep getting this error:

 

Fatal error: Cannot instantiate non-existent class: httpclient in /home/elaine/domains/creativeworks4u.com/public_html/shop/includes/modules/shipping/ups.php on line 247

 

Has anyone seen this problem before?

 

Joe,

 

It's a strange error for this but as I haven't tested it with the ups module it could be some incompatability between that and est. shipping.

Remember not to install the est. shipping as an infobox plus within the index page. Both together will give problems so it's either one or the other method !

Link to comment
Share on other sites

It looks like the default country is set to be the same one that is defined in the store configuration? How do you change this?

 

Look in (catalog)/includes/modules/estimated_shipping.php for

  if ((tep_session_is_registered('customer_id')) && (!tep_not_null($country))) {
	 $country = $customer_country_id;
 } else {
	 if (!tep_not_null($country)) {
   $country = STORE_COUNTRY;
	 }
 }

Replace STORE_COUNTRY with something else.

 

Howard

Link to comment
Share on other sites

  • 2 weeks later...
Joe,

 

It's a strange error for this but as I haven't tested it with the ups module it could be some incompatability between that and est. shipping.

Remember not to install the est. shipping as an infobox plus within the index page. Both together will give problems so it's either one or the other method !

 

 

I am getting the exact same error. Does anyone have any fix for this? were going to be using other shippers as well, can I expect this error with them as well?

 

almost to good to be true

Link to comment
Share on other sites

The weirdest thing is happening when I use this contrib. (on top of not working with ANY UPS or USPS shipping module)

 

I am using STS and it's working quite well so far. When I installed this contrib and tested it with a flat rate shipping method (which seems to be the only way to make it work), it showed the box just fine. However, It is removing my footer text (not the included footer.php stuff from osCommerce. Since I'm using STS I have my own footer text at the bottom of the page) and placeing it within the shipping estimator window. It's kind of funny, I have no idea how this is happening.

 

I suggest in your documentation you state that this does not work with any other module except flat rate shipping, etc.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...