Jump to content


Corporate Sponsors


Latest News: (loading..)

- - - - -

Checkout Proceedure


139 replies to this topic

#61 westkoast

  • Community Member
  • 251 posts
  • Real Name:Habitual Line Stepper

Posted 23 February 2005, 23:06

Wow, glad I found this post. I was about to post a new topic up.

This echo's a few other posts, but here is my idea:

On shopping cart page we have two boxes at bottom
1. New customer checkout
2. Standard login box

New customer checkout
1. Has billing address fields
2. Has check box to automatically fill out shipping address, or put in other address for shipping
3. Has *optional* filed for password if user wishes to create account (they can leave blank) OR just not have password fields at all, and send them a generated password like Burt said.

Shipping / Billing
1. Has shipping module for customer to choose shipping
2. Has payment modules to choose payment

Confirmation page
1. Click OK!

Sucess page, but no "continue button" just a message that they are done.

Thats it. IMO this would work perfecty for customers I have done OSC sites for in the past. If the customer does not enter a password at the end delete all the customer details and keep the order details, OR send them a generated password with a polilte message that if they want to order again they can use the password sent.

The only thing holding me back from coding this up is the next release of OSC. does anyone have any idea when the next MS is due? I'd hate to spend a week of time to make something that will be out of date soon.
I need to read the rules more often...

#62 peterg

  • Community Member
  • 49 posts
  • Real Name:Peter

Posted 24 February 2005, 01:16

all this sounds great and just what osC needs.

I think it may also be useful for admin to be able to 'turn-off' the use of a seperate shipping address. i know of quite a few merchants who only like to ship to the cardholders address for security purposes and that seems impossible to do under the current checkout. - i dont think this can even be modded at present!!

#63 westkoast

  • Community Member
  • 251 posts
  • Real Name:Habitual Line Stepper

Posted 24 February 2005, 01:19

peterg, on Feb 23 2005, 09:16 PM, said:

all this sounds great and just what osC needs.

I think it may also be useful for admin to be able to 'turn-off' the use of a seperate shipping address. i know of quite a few merchants who only like to ship to the cardholders address for security purposes and that seems impossible to do under the current checkout. - i dont think this can even be modded at present!!

<{POST_SNAPBACK}>


I this is actually already possible. Just change MAX address book entires to 1. This will allow people to have only 1 address.
I need to read the rules more often...

#64 peterg

  • Community Member
  • 49 posts
  • Real Name:Peter

Posted 24 February 2005, 13:39

westkoast, on Feb 24 2005, 01:19 AM, said:

I this is actually already possible. Just change MAX address book entires to 1. This will allow people to have only 1 address.

<{POST_SNAPBACK}>

:huh: :blush:

ill get my coat.

#65 Altair

  • Community Member
  • 3 posts
  • Real Name:Jason

Posted 24 February 2005, 22:52

burt, on Jan 4 2005, 12:22 PM, said:

My solution is as follows:

Product in Cart.  Clicks checkout (1st click), this leads to create_account/payment page where the buyer input Customer Details on the standard create_account form [this form also has a checkbox to indicate whether or not this is the shipping address as well as "choose payment method"], click continue (2nd click) which leads to checkout confirmation [exactly as the page is now].  Click continue (3rd click), order is written to database and person is transferred to the "home page", but the home page also has a message "thank you for purchasing at XYZ Store, your order will ship in X days"...

This makes sense for my needs.  It might not make sense for every store.

<{POST_SNAPBACK}>



I agree with this. This checkout procedure would be the perfect fit for my sites. I am trying to develop one myself. I need to start over and rewrite the checkout process I think, but I am close.

If anyone has done this, PLEASE send your modifications my way.

#66 DriWashSolutions

  • Community Member
  • 207 posts
  • Real Name:John Skurka
  • Location:Ithaca, NY

Posted 26 February 2005, 17:11

I would like to suggest that the payment page be revamped as well. So many of my customers do not see (or click) the radio button to the right of the payment option. The just enter their CC information, and continue on. When they come to the confirmation page, they are sent back to the payment page without any explanation.

So, a revamped payment page is high on my list. Has anyone done this already?
John Skurka

#67 TomCavendish

  • Community Member
  • 134 posts
  • Real Name:Tom

Posted 28 February 2005, 15:57

To reduce the need for one of the clicks for new customers (which is most people) i would like to see this on the log-in page:

http://www.chantcd.com/index.php?page=chec...submit=Checkout

To replace:

http://www.oscommerce.com/osCommerce22ms2/login.php

and

http://www.oscommerce.com/osCommerce22ms2/create_account.php

Should be very easy for some of you with more skills than me.

Edited by TomCavendish, 28 February 2005, 15:59.


#68 jenso

  • Community Member
  • 149 posts
  • Real Name:Rich Mehnert
  • Location:Sapporo, Japan

Posted 08 March 2005, 00:54

Hello

Great suggestments all over the place and here is what I wish to see:

FIRST:

I like to be able to set the countries I except for my store in terms of shipping and billing address (both individual) in the admin section.

With this done, the customer will never be able to sign up or choose a country I do not want to except (Billing address Afganistan, eg....).

SECOND:

When it comes to virtual products (Downloads, vouchers) the system would not check the shipping country, but still the billing country.

On the LogIn page I like to be able to input the code for the voucher or coupon (when I offer such service).

The customer easer logIn, create an account or purchaise without creating an account.

The shipping and payment page is on one page.
When you offer more than one shipping and payment methode, like us, it would be nice to show under each shipping methode the coresponding payment methodes. In my case it would be something like this:

Shipping
Japan Postal Service
(Ground) Prefered time for delivery (Morning)
Payment
Japan Postal Account
COD (cost 250Yen)

Shipping
UPS Japan
(Ground) Prefered time for delivery (8am - 12am)
Payment
Bank Account
COD (cost 350Yen)
ATM

This way the customer can choose the shipping (the shipping cost are displayed)
and under the shipping he will find the payment options and has to make a choice with a radio button.

When he confirm this page a java script check has to be done and if everything is fine he will see the checkout summery page.

What do you think?

Rich

:lol:

#69 AJRYAN

  • Community Member
  • 188 posts
  • Real Name:AJ

Posted 08 March 2005, 06:54

DriWashSolutions, on Feb 26 2005, 01:11 PM, said:

I would like to suggest that the payment page be revamped as well.  So many of my customers do not see (or click) the radio button to the right of the payment option.  The just enter their CC information, and continue on.  When they come to the confirmation page, they are sent back to the payment page without any explanation.

So, a revamped payment page is high on my list.  Has anyone done this already?

<{POST_SNAPBACK}>


I agree.. Many of my customers I think get very frustrated on this. What is the point of having a radio box when a simple if statement can easily detect the customers payment preference by their credit card number entry? It makes no sense.

My suggestions:

Make account creation seamless, send password after info is entered during the checkout process..
Keep billing and shipping information on same page.. Keep everything above the fold if possible.
Card expiration date fields should default to end of current month, or no entry at all with error checking. - the latter would probably be best.

#70 aozlanski

  • Community Member
  • 30 posts
  • Real Name:andrew

Posted 09 March 2005, 04:16

Hi everyone

I'm also looking for simpler way of checkout. I came across this contribution, and it looks very promising and what we looking for.

Contribution:
http://www.oscommerce.com/community/contributions,2197

support forum:
http://forums.oscommerce.com/index.php?act=ST&f=20&t=98630

I tried installing it yesterday but it doesn't work 100% correctly, im not sure if it is a bug, or I did something wrong during install. I will try reinstalling again tonight.

I think this is a good start, and maybe with a little tweaking we can make it work correctly.

Please post your comments.

Andrew

#71 oldworldcharms

  • Community Member
  • 356 posts
  • Real Name:Elizabeth

Posted 22 March 2005, 14:04

I have searched but found no answer. has anyone been able to combine the checkout_shipping.php and the checkout_payment.php pages yet?

Thanks

#72 WebPixie

  • Community Member
  • 138 posts
  • Real Name:Andrea

Posted 26 March 2005, 05:48

oldworldcharms, on Mar 22 2005, 10:04 AM, said:

I have searched but found no answer. has anyone been able to combine the checkout_shipping.php and the checkout_payment.php pages yet?

Thanks

<{POST_SNAPBACK}>



I get more folks checking out that choke on the shipping/billing address then anything else. Their credit cards don't go through because they are shipping to a different address then the billing address and they don't change it, or get confused.

Personally I think a lot of headaches would be fixed if there was a page that had the user fill in "Shipping Address" and "Billing Address" (with a check box if it was the same) when they first created an account. Would clear up alot of confusion, at least with my customers. The first person who creates the "1 page shipping/billing address" form will probably be one damn popular guy :P

#73 Dez

  • Community Member
  • 38 posts
  • Real Name:Dez

Posted 12 April 2005, 09:25

I've been able to combine checkout_shipping.php and checkout_payment.php onto one page. I'm going to clean up and comment the code tomorrow and post it here.

#74 oldworldcharms

  • Community Member
  • 356 posts
  • Real Name:Elizabeth

Posted 12 April 2005, 16:13

Thanks. This has been long awaited.

#75 Dez

  • Community Member
  • 38 posts
  • Real Name:Dez

Posted 12 April 2005, 19:45

This code is ALPHA

USE THIS CODE FOR TESTING PURPOSES ONLY

Known bugs: Only works with one payment module activated. If more than one module is activated, the radio buttons do not carry a "checked" value when the form is submitted, which causes redirection back to checkout_payment.php.

Possible bugs: For some reason my UPS module isn't catching the country the first time around loading checkout_shipping.php.

Tested with:

- PWA - Purchase Without Account
- Regular account
- All default shipping modules (multiple activated at once) except USPS
- Paypal IPN and check/money order

Notes:

- I haven't tested this with a virtual product yet.
- All javascript has been removed for now.
- Combining these two pages causes checkout_shipping.php to equal 30k in size.
- The checkout progress bar at the bottom has not been altered yet.

checkout_shipping.php code:

<?php

  require('includes/application_top.php');
  require('includes/classes/http_client.php');

// if the customer is not logged on, redirect them to the login page
  if (!tep_session_is_registered('customer_id')) {
    $navigation->set_snapshot();
    tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
  }

// if there is nothing in the customers cart, redirect them to the shopping cart page
  if ($cart->count_contents() < 1) {
    tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
  }
  
// register a random ID in the session to check throughout the checkout procedure
// against alterations in the shopping cart contents
  if (!tep_session_is_registered('cartID')) tep_session_register('cartID');
  $cartID = $cart->cartID;
    
  require(DIR_WS_CLASSES . 'order.php');
  $order = new order;
// load all enabled payment modules
  require(DIR_WS_CLASSES . 'payment.php');
  $payment_modules = new payment;
// load all enabled shipping modules
  require(DIR_WS_CLASSES . 'shipping.php');
  $shipping_modules = new shipping;
  
// Stock Check
  if ( (STOCK_CHECK == 'true') && (STOCK_ALLOW_CHECKOUT != 'true') ) {
    $products = $cart->get_products();
    for ($i=0, $n=sizeof($products); $i<$n; $i++) {
      if (tep_check_stock($products[$i]['id'], $products[$i]['quantity'])) {
        tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
        break;
      }
    }
  }
  
// if no shipping destination address was selected, use the customers own address as default
  if (!tep_session_is_registered('sendto')) {
    tep_session_register('sendto');
    $sendto = $customer_default_address_id;
  } else {
// verify the selected shipping address
    $check_address_query = tep_db_query("select count(*) as total from " . TABLE_ADDRESS_BOOK . " where customers_id = '" . (int)$customer_id . "' and address_book_id = '" . (int)$sendto . "'");
    $check_address = tep_db_fetch_array($check_address_query);

    if ($check_address['total'] != '1') {
      $sendto = $customer_default_address_id;
      if (tep_session_is_registered('shipping')) tep_session_unregister('shipping');
    }
  }

// if no billing destination address was selected, use the customers own address as default
  if (!tep_session_is_registered('billto')) {
    tep_session_register('billto');
    $billto = $customer_default_address_id;
  } else {
// verify the selected billing address
    $check_address_query = tep_db_query("select count(*) as total from " . TABLE_ADDRESS_BOOK . " where customers_id = '" . (int)$customer_id . "' and address_book_id = '" . (int)$billto . "'");
    $check_address = tep_db_fetch_array($check_address_query);

    if ($check_address['total'] != '1') {
      $billto = $customer_default_address_id;
      if (tep_session_is_registered('payment')) tep_session_unregister('payment');
    }
  }

  if (!tep_session_is_registered('comments')) tep_session_register('comments');

// if the order contains only virtual products, forward the customer to the billing page as
// a shipping address is not needed
  if ($order->content_type == 'virtual') {
    if (!tep_session_is_registered('shipping')) tep_session_register('shipping');
    $shipping = false;
    $sendto = false;
    tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
  }
  
  $total_weight = $cart->show_weight();
  $total_count = $cart->count_contents();

  if ( defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING') && (MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true') ) {
    $pass = false;

    switch (MODULE_ORDER_TOTAL_SHIPPING_DESTINATION) {
      case 'national':
        if ($order->delivery['country_id'] == STORE_COUNTRY) {
          $pass = true;
        }
        break;
      case 'international':
        if ($order->delivery['country_id'] != STORE_COUNTRY) {
          $pass = true;
        }
        break;
      case 'both':
        $pass = true;
        break;
    }

    $free_shipping = false;
    if ( ($pass == true) && ($order->info['total'] >= MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) ) {
      $free_shipping = true;

      include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
    }
  } else {
    $free_shipping = false;
  }
  
// process the selected shipping method
  if ( isset($HTTP_POST_VARS['action']) && ($HTTP_POST_VARS['action'] == 'process') ) {
    if (!tep_session_is_registered('comments')) tep_session_register('comments');
    if (tep_not_null($HTTP_POST_VARS['comments'])) {
      $comments = tep_db_prepare_input($HTTP_POST_VARS['comments']);
    }

    if (!tep_session_is_registered('shipping')) tep_session_register('shipping');

    if ( (tep_count_shipping_modules() > 0) || ($free_shipping == true) ) {
      if ( (isset($HTTP_POST_VARS['shipping'])) && (strpos($HTTP_POST_VARS['shipping'], '_')) ) {
        $shipping = $HTTP_POST_VARS['shipping'];

        list($module, $method) = explode('_', $shipping);
        if ( is_object($$module) || ($shipping == 'free_free') ) {
          if ($shipping == 'free_free') {
            $quote[0]['methods'][0]['title'] = FREE_SHIPPING_TITLE;
            $quote[0]['methods'][0]['cost'] = '0';
          } else {
            $quote = $shipping_modules->quote($method, $module);
          }
          if (isset($quote['error'])) {
            tep_session_unregister('shipping');
          } else {
            if ( (isset($quote[0]['methods'][0]['title'])) && (isset($quote[0]['methods'][0]['cost'])) ) {
              $shipping = array('id' => $shipping,
                                'title' => (($free_shipping == true) ?  $quote[0]['methods'][0]['title'] : $quote[0]['module'] . ' (' . $quote[0]['methods'][0]['title'] . ')'),
                                'cost' => $quote[0]['methods'][0]['cost']);

              tep_redirect(tep_href_link(FILENAME_CHECKOUT_CONFIRMATION, '', 'SSL'));
            }
          }
        } else {
          tep_session_unregister('shipping');
        }
      }
    } else {
      $shipping = false;
                
      tep_redirect(tep_href_link(FILENAME_CHECKOUT_CONFIRMATION, '', 'SSL'));
    }    
  }

// get all available shipping quotes
  $quotes = $shipping_modules->quote();

// if no shipping method has been selected, automatically select the cheapest method.
// if the modules status was changed when none were available, to save on implementing
// a javascript force-selection method, also automatically select the cheapest shipping
// method if more than one module is now enabled
  if ( !tep_session_is_registered('shipping') || ( tep_session_is_registered('shipping') && ($shipping == false) && (tep_count_shipping_modules() > 1) ) ) $shipping = $shipping_modules->cheapest();

  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_SHIPPING);
  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PAYMENT);
  
  $breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
  $breadcrumb->add(NAVBAR_TITLE_2, tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
?>
<!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 //-->
<?php echo tep_draw_form('checkout_address', tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL')) . tep_draw_hidden_field('action', 'process'); ?>
<table border="0" width="100%" cellspacing="3" cellpadding="3">
  <tr>
    <td width="<?php echo BOX_WIDTH; ?>" rowspan="2" 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 //-->
<!-- begin shipping //-->
    <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td>
  <table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
            <td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES . 'table_background_delivery.gif', HEADING_TITLE, HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
          <tr>
            <td class="main"><b><?php echo TABLE_HEADING_SHIPPING_ADDRESS; ?></b></td>
          </tr>
        </table></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><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> 
                <td class="main" width="50%" valign="top"><?php echo TEXT_CHOOSE_SHIPPING_DESTINATION . '<br><br><a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING_ADDRESS, '', 'SSL') . '">' . tep_image_button('button_change_address.gif', IMAGE_BUTTON_CHANGE_ADDRESS) . '</a>'; ?></td>
                <td align="right" width="50%" valign="top"><table border="0" cellspacing="0" cellpadding="2">
                  <tr>
                    <td class="main" align="center" valign="top"><?php echo '<b>' . TITLE_SHIPPING_ADDRESS . '</b><br>' . tep_image(DIR_WS_IMAGES . 'arrow_south_east.gif'); ?></td>
                    <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> 
                    <td class="main" valign="top"><?php echo tep_address_label($customer_id, $sendto, true, ' ', '<br>'); ?></td>
                    <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> 
                  </tr>
                </table></td>
              </tr>
            </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
<?php
  if (tep_count_shipping_modules() > 0) {
?>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
          <tr>
            <td class="main"><b><?php echo TABLE_HEADING_SHIPPING_METHOD; ?></b></td>
          </tr>
        </table></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">
<?php
    if (sizeof($quotes) > 1 && sizeof($quotes[0]) > 1) {
?>
              <tr>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td class="main" width="50%" valign="top"><?php echo TEXT_CHOOSE_SHIPPING_METHOD; ?></td>
                <td class="main" width="50%" valign="top" align="right"><?php echo '<b>' . TITLE_PLEASE_SELECT . '</b><br>' . tep_image(DIR_WS_IMAGES . 'arrow_east_south.gif'); ?></td>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
<?php
    } elseif ($free_shipping == false) {
?>
              <tr>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td class="main" width="100%" colspan="2"><?php echo TEXT_ENTER_SHIPPING_INFORMATION; ?></td>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
<?php
    }

    if ($free_shipping == true) {
?>
              <tr>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td colspan="2" width="100%"><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" colspan="3"><b><?php echo FREE_SHIPPING_TITLE; ?></b>&nbsp;<?php echo $quotes[$i]['icon']; ?></td>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                  </tr>
                  <tr>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                    <td class="main" width="100%"><?php echo sprintf(FREE_SHIPPING_DESCRIPTION, $currencies->format(MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER)) . tep_draw_hidden_field('shipping', 'free_free'); ?></td>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                  </tr>
                </table></td>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> 
              </tr>
<?php
    } else {
      $radio_buttons = 0;
      for ($i=0, $n=sizeof($quotes); $i<$n; $i++) {
?>
              <tr>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td colspan="2"><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" colspan="3"><b><?php echo $quotes[$i]['module']; ?></b>&nbsp;<?php if (isset($quotes[$i]['icon']) && tep_not_null($quotes[$i]['icon'])) { echo $quotes[$i]['icon']; } ?></td>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                  </tr>
<?php
        if (isset($quotes[$i]['error'])) {
?>
                  <tr>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                    <td class="main" colspan="3"><?php echo $quotes[$i]['error']; ?></td>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                  </tr>
<?php
        } else {
          for ($j=0, $n2=sizeof($quotes[$i]['methods']); $j<$n2; $j++) {
// set the radio button to be checked if it is the method chosen
            $checked = (($quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id'] == $shipping['id']) ? true : false);

            if ( ($checked == true) || ($n == 1 && $n2 == 1) ) {
              echo '                  <tr>' . "\n";
            } else {
              echo '                  <tr>' . "\n";
            }
?>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                    <td class="main" width="75%"><?php echo $quotes[$i]['methods'][$j]['title']; ?></td>
<?php
            if ( ($n > 1) || ($n2 > 1) ) {
?>
                    <td class="main"><?php echo $currencies->format(tep_add_tax($quotes[$i]['methods'][$j]['cost'], (isset($quotes[$i]['tax']) ? $quotes[$i]['tax'] : 0))); ?></td>
                    <td class="main" align="right"><?php echo tep_draw_radio_field('shipping', $quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id'], $checked); ?></td>
<?php
            } else {
?>
                    <td class="main" align="right" colspan="2"><?php echo $currencies->format(tep_add_tax($quotes[$i]['methods'][$j]['cost'], $quotes[$i]['tax'])) . tep_draw_hidden_field('shipping', $quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id']); ?></td>
<?php
            }
?>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                  </tr>
<?php
            $radio_buttons++;
          }
        }
?>
                </table></td>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> 
              </tr>
<?php
      }
    }
?>
            </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
<?php
  }
?>
    </table></td>
<!-- body_text_eof //-->
    <td width="<?php echo BOX_WIDTH; ?>" rowspan="2" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- right_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>
<!-- right_navigation_eof //-->
    </table></td>
  </tr>
  <tr>
    <td valign="top">
<!-- begin payment //-->
	<table border="0" width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
            <td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES . 'table_background_payment.gif', HEADING_TITLE, HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
<?php
  if (isset($HTTP_GET_VARS['payment_error']) && is_object(${$HTTP_GET_VARS['payment_error']}) && ($error = ${$HTTP_GET_VARS['payment_error']}->get_error())) {
?>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
          <tr>
            <td class="main"><b><?php echo tep_output_string_protected($error['title']); ?></b></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBoxNotice">
          <tr class="infoBoxNoticeContents">
            <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
              <tr>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td class="main" width="100%" valign="top"><?php echo tep_output_string_protected($error['error']); ?></td>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
            </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
<?php
  }
?>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
          <tr>
            <td class="main"><b><?php echo TABLE_HEADING_BILLING_ADDRESS; ?></b></td>
          </tr>
        </table></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><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> 
                <td class="main" width="50%" valign="top"><?php echo TEXT_SELECTED_BILLING_DESTINATION; ?><br><br><?php echo '<a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT_ADDRESS, '', 'SSL') . '">' . tep_image_button('button_change_address.gif', IMAGE_BUTTON_CHANGE_ADDRESS) . '</a>'; ?></td>
                <td align="right" width="50%" valign="top"><table border="0" cellspacing="0" cellpadding="2">
                  <tr>
                    <td class="main" align="center" valign="top"><b><?php echo TITLE_BILLING_ADDRESS; ?></b><br><?php echo tep_image(DIR_WS_IMAGES . 'arrow_south_east.gif'); ?></td>
                    <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> 
                    <td class="main" valign="top"><?php echo tep_address_label($customer_id, $billto, true, ' ', '<br>'); ?></td>
                    <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td> 
                  </tr>
                </table></td>
              </tr>
            </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
          <tr>
            <td class="main"><b><?php echo TABLE_HEADING_PAYMENT_METHOD; ?></b></td>
          </tr>
        </table></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">
<?php
  $selection = $payment_modules->selection();

  if (sizeof($selection) > 1) {
?>
              <tr>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td class="main" width="50%" valign="top"><?php echo TEXT_SELECT_PAYMENT_METHOD; ?></td>
                <td class="main" width="50%" valign="top" align="right"><b><?php echo TITLE_PLEASE_SELECT; ?></b><br><?php echo tep_image(DIR_WS_IMAGES . 'arrow_east_south.gif'); ?></td>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
<?php
  } else {
?>
              <tr>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td class="main" width="100%" colspan="2"><?php echo TEXT_ENTER_PAYMENT_INFORMATION; ?></td>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
<?php
  }

  $radio_buttons = 0;
  for ($i=0, $n=sizeof($selection); $i<$n; $i++) {
?>
              <tr>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td colspan="2"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<?php
    if ( ($selection[$i]['id'] == $payment) || ($n == 1) ) {
      echo '                  <tr>' . "\n";
    } else {
      echo '                  <tr>' . "\n";
    }
?>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                    <td class="main" colspan="3"><b><?php echo $selection[$i]['module']; ?></b></td>
                    <td class="main" align="right">
<?php
    if (sizeof($selection) > 1) {
      echo tep_draw_radio_field('payment', $selection[$i]['id']);
    } else {
      echo tep_draw_hidden_field('payment', $selection[$i]['id']);
    }
?>
                    </td>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                  </tr>
<?php
    if (isset($selection[$i]['error'])) {
?>
                  <tr>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                    <td class="main" colspan="4"><?php echo $selection[$i]['error']; ?></td>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                  </tr>
<?php
    } elseif (isset($selection[$i]['fields']) && is_array($selection[$i]['fields'])) {
?>
                  <tr>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                    <td colspan="4"><table border="0" cellspacing="0" cellpadding="2">
<?php
      for ($j=0, $n2=sizeof($selection[$i]['fields']); $j<$n2; $j++) {
?>
                      <tr>
                        <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                        <td class="main"><?php echo $selection[$i]['fields'][$j]['title']; ?></td>
                        <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                        <td class="main"><?php echo $selection[$i]['fields'][$j]['field']; ?></td>
                        <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                      </tr>
<?php
      }
?>
                    </table></td>
                    <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                  </tr>
<?php
    }
?>
                </table></td>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
<?php
    $radio_buttons++;
  }
?>
            </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
          <tr>
            <td class="main"><b><?php echo TABLE_HEADING_COMMENTS; ?></b></td>
          </tr>
        </table></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><?php echo tep_draw_textarea_field('comments', 'soft', '60', '5'); ?></td>
              </tr>
            </table></td>
          </tr>
        </table></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 class="main"><b><?php echo TITLE_CONTINUE_CHECKOUT_PROCEDURE . '</b><br>' . TEXT_CONTINUE_CHECKOUT_PROCEDURE; ?></td>
                <td class="main" align="right"><?php echo tep_image_submit('button_continue.gif', IMAGE_BUTTON_CONTINUE); ?></td>
                <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
            </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td width="25%"><table border="0" width="100%" cellspacing="0" cellpadding="0">
              <tr>
                <td width="50%" align="right"><?php echo tep_draw_separator('pixel_silver.gif', '1', '5'); ?></td>
                <td width="50%"><?php echo tep_draw_separator('pixel_silver.gif', '100%', '1'); ?></td>
              </tr>
            </table></td>
            <td width="25%"><table border="0" width="100%" cellspacing="0" cellpadding="0">
              <tr>
                <td width="50%"><?php echo tep_draw_separator('pixel_silver.gif', '100%', '1'); ?></td>
                <td><?php echo tep_image(DIR_WS_IMAGES . 'checkout_bullet.gif'); ?></td>
                <td width="50%"><?php echo tep_draw_separator('pixel_silver.gif', '100%', '1'); ?></td>
              </tr>
            </table></td>
            <td width="25%"><?php echo tep_draw_separator('pixel_silver.gif', '100%', '1'); ?></td>
            <td width="25%"><table border="0" width="100%" cellspacing="0" cellpadding="0">
              <tr>
                <td width="50%"><?php echo tep_draw_separator('pixel_silver.gif', '100%', '1'); ?></td>
                <td width="50%"><?php echo tep_draw_separator('pixel_silver.gif', '1', '5'); ?></td>
              </tr>
            </table></td>
          </tr>
          <tr>
            <td align="center" width="25%" class="checkoutBarFrom"><?php echo '<a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '" class="checkoutBarFrom">' . CHECKOUT_BAR_DELIVERY . '</a>'; ?></td>
            <td align="center" width="25%" class="checkoutBarCurrent"><?php echo CHECKOUT_BAR_PAYMENT; ?></td>
            <td align="center" width="25%" class="checkoutBarTo"><?php echo CHECKOUT_BAR_CONFIRMATION; ?></td>
            <td align="center" width="25%" class="checkoutBarTo"><?php echo CHECKOUT_BAR_FINISHED; ?></td>
          </tr>
        </table></td>
      </tr>
    </table>
<!-- body_text_eof //-->
	</td>
  </tr>
</table>
<!-- body_eof //-->
</form>
<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>


#76 Dez

  • Community Member
  • 38 posts
  • Real Name:Dez

Posted 12 April 2005, 22:15

I've also combined the create_account.php and login pages and right now I'm cleaning up the code on those.

#77 carrerarod

  • Community Member
  • 731 posts
  • Real Name:Rodney

Posted 13 April 2005, 00:55

Dez, on Apr 12 2005, 03:45 PM, said:

This code is ALPHA

USE THIS CODE FOR TESTING PURPOSES ONLY

Known bugs: Only works with one payment module activated. If more than one module is activated, the radio buttons do not carry a "checked" value when the form is submitted, which causes redirection back to checkout_payment.php.

Possible bugs: For some reason my UPS module isn't catching the country the first time around loading checkout_shipping.php.

Tested with:

- PWA - Purchase Without Account
- Regular account
- All default shipping modules (multiple activated at once) except USPS
- Paypal IPN and check/money order

Notes:

- I haven't tested this with a virtual product yet.
- All javascript has been removed for now.
- Combining these two pages causes checkout_shipping.php to equal 30k in size.
- The checkout progress bar at the bottom has not been altered yet.

checkout_shipping.php code:

<{POST_SNAPBACK}>


nice work.... seems to work pretty well.... the continue button on the bottom actually tries to go to checkout_payment instead of checkout_confirmation....I will play with it a little more to see why...sure its a minor thing....but looks like all the parameters are getting passed along correclty.....

:thumbsup:

#78 Dez

  • Community Member
  • 38 posts
  • Real Name:Dez

Posted 13 April 2005, 01:39

carrerarod, on Apr 12 2005, 05:55 PM, said:

nice work.... seems to work pretty well.... the continue button on the bottom actually tries to go to checkout_payment instead of checkout_confirmation....I will play with it a little more to see why...sure its a minor thing....but looks like all the parameters are getting passed along correclty.....

:thumbsup:

Do you have more than one payment module activated? You'll have that problem if you do. See "Known Bugs"...I'm working on this tonight. Cross your fingers!

#79 carrerarod

  • Community Member
  • 731 posts
  • Real Name:Rodney

Posted 13 April 2005, 01:45

Dez, on Apr 12 2005, 09:39 PM, said:

Do you have more than one payment module activated? You'll have that problem if you do. See "Known Bugs"...I'm working on this tonight. Cross your fingers!

<{POST_SNAPBACK}>


no i don't... I use one ship module (individual ship) and only one payment module (authorize.net)...so nice and clean...

what version did you build this on?

I might also attempt to port over the code for credit class & gift voucher once this stabilizes.....

When you test this new code, does the name field in the payment box get pre-populated? Mine does not. This is usually an indication something needs a little tweaking....but I must say you are close....

#80 Dez

  • Community Member
  • 38 posts
  • Real Name:Dez

Posted 13 April 2005, 01:50

MS2.2 - sorry that I forgot to include that in my original post. What version are you using?