Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
lat9
Frank, the checkout_process functionality is untouched by the One-Page Checkout's processing. There might be, however, some changes that your application introduced into the checkout_payment/confirmation processing that are not getting picked up.
Are there any observer-class (i.e. /includes/classes/observers) modules that "help" with the operation? Or any additional header_php_xxxx.php files present in the /includes/modules/pages/checkout_payment or /includes/modules/pages/checkout_confirmation folders?
There aren't any additional header.php files or observers that I am aware of or can find but the vendor application does modify the checkout payment, process, shipping and confirmation pages. That should explain why the vendor application works with standard checkout process and not the one page checkout. I will try to merge these changes with the one page checkout files. I will let you know I make out.
Frank
Thanks for jogging my memory
Re: One-Page Checkout [Support Thread]
Darn it, another bug, this one occurs if the customer's applied a discount coupon to their order and then updated their shipping-method.
When that happens, a debug log similar to:
Code:
Call to a member function bindVars() on null in /dir_fs_catalog/classes/ajax/zcAjaxOnePageCheckout.php on line 34
gets generated.
The correction's simple: edit /includes/classes/ajax/zcAjaxOnePageCheckout.php (line 20), adding the $db to the list of globally-referenced variables:
Code:
// -----
// Since we're running as a function, need to declare the objects we're instantiating here, for use by the various classes
// involved in creating the order's total-block.
//
global $db, $order, $currencies, $checkout_one, $total_weight, $total_count, $discount_coupon;
global $shipping_weight, $uninsurable_value, $shipping_quoted, $shipping_num_boxes, $current_page_base, $current_page, $template;
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
lat9
Darn it, another bug, this one occurs if the customer's applied a discount coupon to their order and then updated their shipping-method.
When that happens, a debug log similar to:
Code:
Call to a member function bindVars() on null in /dir_fs_catalog/classes/ajax/zcAjaxOnePageCheckout.php on line 34
gets generated.
The correction's simple: edit /includes/classes/ajax/zcAjaxOnePageCheckout.php (line 20), adding the $db to the list of globally-referenced variables:
Code:
// -----
// Since we're running as a function, need to declare the objects we're instantiating here, for use by the various classes
// involved in creating the order's total-block.
//
global $db, $order, $currencies, $checkout_one, $total_weight, $total_count, $discount_coupon;
global $shipping_weight, $uninsurable_value, $shipping_quoted, $shipping_num_boxes, $current_page_base, $current_page, $template;
Thank you Cindy, all noted and implemented :smile:
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
fjbern1943
There aren't any additional header.php files or observers that I am aware of or can find but the vendor application does modify the checkout payment, process, shipping and confirmation pages. That should explain why the vendor application works with standard checkout process and not the one page checkout. I will try to merge these changes with the one page checkout files. I will let you know I make out.
Frank
Thanks for jogging my memory
As far as I can see there is no file correlation between my vendor application and one-page checkout.
The below code is from my existing checkout_confirmation.php page. Please note the two instances of MVS Start and End code. I think that this is the code I need to add to the one-page checkout plugin.
Code:
<?php
/*
$Id$
$Loc: /catalog/ $
$Mod: MVS V1.3 Kymation $
osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com
Copyright (c) 2014 osCommerce
Released under the GNU General Public License
*/
require('includes/application_top.php');
// MVS start
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PAYMENT);
// If a shipping method has not been selected for all vendors, redirect the customer to the shipping method selection page
if (SELECT_VENDOR_SHIPPING == 'true') { // This test only works under MVS
if (!is_array ($shipping['vendor']) || count ($shipping['vendor']) != count ($cart->vendor_shipping)) { // No shipping selected or not all selected
tep_redirect (tep_href_link (FILENAME_CHECKOUT_SHIPPING, 'error_message=' . ERROR_NO_SHIPPING_SELECTED, 'SSL'));
}
}
// MVS end
// if the customer is not logged on, redirect them to the login page
if (!tep_session_is_registered('customer_id')) {
$navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));
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));
}
// avoid hack attempts during the checkout procedure by checking the internal cartID
if (isset($cart->cartID) && tep_session_is_registered('cartID')) {
if ($cart->cartID != $cartID) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
}
}
// if no shipping method has been selected, redirect the customer to the shipping method selection page
if (!tep_session_is_registered('shipping')) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
}
if (!tep_session_is_registered('payment')) tep_session_register('payment');
if (isset($_POST['payment'])) $payment = $_POST['payment'];
if (!tep_session_is_registered('comments')) tep_session_register('comments');
if (isset($_POST['comments']) && tep_not_null($_POST['comments'])) {
$comments = tep_db_prepare_input($_POST['comments']);
}
// load the selected payment module
require(DIR_WS_CLASSES . 'payment.php');
$payment_modules = new payment($payment);
require(DIR_WS_CLASSES . 'order.php');
$order = new order;
$payment_modules->update_status();
if ( ($payment_modules->selected_module != $payment) || ( is_array($payment_modules->modules) && (sizeof($payment_modules->modules) > 1) && !is_object($$payment) ) || (is_object($$payment) && ($$payment->enabled == false)) ) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
}
if (is_array($payment_modules->modules)) {
$payment_modules->pre_confirmation_check();
}
// load the selected shipping module
//MVS start
if (SELECT_VENDOR_SHIPPING == 'true') {
include_once (DIR_WS_CLASSES . 'vendor_shipping.php');
} else{
include_once (DIR_WS_CLASSES . 'shipping.php');
}
//MVS End
$shipping_modules = new shipping($shipping);
require(DIR_WS_CLASSES . 'order_total.php');
$order_total_modules = new order_total;
$order_total_modules->process();
// Stock Check
$any_out_of_stock = false;
if (STOCK_CHECK == 'true') {
for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
if (tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty'])) {
$any_out_of_stock = true;
}
}
// Out of Stock
if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($any_out_of_stock == true) ) {
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
}
}
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_CONFIRMATION);
$breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
$breadcrumb->add(NAVBAR_TITLE_2);
require(DIR_WS_INCLUDES . 'template_top.php');
?>
<h1><?php echo HEADING_TITLE; ?></h1>
<?php
if ($messageStack->size('checkout_confirmation') > 0) {
echo $messageStack->output('checkout_confirmation');
}
if (isset($$payment->form_action_url)) {
$form_action_url = $$payment->form_action_url;
} else {
$form_action_url = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
}
echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');
?>
<div class="contentContainer">
<h2><?php echo HEADING_SHIPPING_INFORMATION; ?></h2>
<div class="contentText">
<table border="0" width="100%" cellspacing="1" cellpadding="2">
<tr>
<?php
if ($sendto != false) {
?>
<td width="30%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td><?php echo '<strong>' . HEADING_DELIVERY_ADDRESS . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING_ADDRESS, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<tr>
<td><?php echo tep_address_format($order->delivery['format_id'], $order->delivery, 1, ' ', '<br />'); ?></td>
</tr>
<?php
if ($order->info['shipping_method']) {
?>
<tr>
<td><?php echo '<strong>' . HEADING_SHIPPING_METHOD . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<tr>
<td><?php echo $order->info['shipping_method']; ?></td>
</tr>
<?php
}
?>
</table></td>
<?php
}
?>
<td width="<?php echo (($sendto != false) ? '70%' : '100%'); ?>" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<?php
if (sizeof($order->info['tax_groups']) > 1) {
?>
<tr>
<td colspan="2"><?php echo '<strong>' . HEADING_PRODUCTS . '</strong> <a href="' . tep_href_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
<td align="right"><strong><?php echo HEADING_TAX; ?></strong></td>
<td align="right"><strong><?php echo HEADING_TOTAL; ?></strong></td>
</tr>
<?php
} else {
?>
<tr>
<td colspan="3"><?php echo '<strong>' . HEADING_PRODUCTS . '</strong> <a href="' . tep_href_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<?php
}
for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
echo ' <tr>' . "\n" .
' <td align="right" valign="top" width="30">' . $order->products[$i]['qty'] . ' x</td>' . "\n" .
' <td valign="top">' . $order->products[$i]['name'];
if (STOCK_CHECK == 'true') {
echo tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty']);
}
if ( (isset($order->products[$i]['attributes'])) && (sizeof($order->products[$i]['attributes']) > 0) ) {
for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
echo '<br /><nobr><small> <i> - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value'] . '</i></small></nobr>';
}
}
echo '</td>' . "\n";
if (sizeof($order->info['tax_groups']) > 1) echo ' <td valign="top" align="right">' . tep_display_tax_value($order->products[$i]['tax']) . '%</td>' . "\n";
echo ' <td align="right" valign="top">' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . '</td>' . "\n" .
' </tr>' . "\n";
}
?>
</table></td>
</tr>
</table>
</div>
<h2><?php echo HEADING_BILLING_INFORMATION; ?></h2>
<div class="contentText">
<table border="0" width="100%" cellspacing="1" cellpadding="2">
<tr>
<td width="30%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td><?php echo '<strong>' . HEADING_BILLING_ADDRESS . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT_ADDRESS, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<tr>
<td><?php echo tep_address_format($order->billing['format_id'], $order->billing, 1, ' ', '<br />'); ?></td>
</tr>
<tr>
<td><?php echo '<strong>' . HEADING_PAYMENT_METHOD . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<tr>
<td><?php echo $order->info['payment_method']; ?></td>
</tr>
</table></td>
<td width="70%" valign="top" align="right"><table border="0" cellspacing="0" cellpadding="2">
<?php
if (MODULE_ORDER_TOTAL_INSTALLED) {
echo $order_total_modules->output();
}
?>
</table></td>
</tr>
</table>
</div>
<?php
if (is_array($payment_modules->modules)) {
if ($confirmation = $payment_modules->confirmation()) {
?>
<h2><?php echo HEADING_PAYMENT_INFORMATION; ?></h2>
<div class="contentText">
<table border="0" cellspacing="0" cellpadding="2">
<tr>
<td colspan="4"><?php echo $confirmation['title']; ?></td>
</tr>
<?php
if (isset($confirmation['fields'])) {
for ($i=0, $n=sizeof($confirmation['fields']); $i<$n; $i++) {
?>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main"><?php echo $confirmation['fields'][$i]['title']; ?></td>
<td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main"><?php echo $confirmation['fields'][$i]['field']; ?></td>
</tr>
<?php
}
}
?>
</table>
</div>
<?php
}
}
if (tep_not_null($order->info['comments'])) {
?>
<h2><?php echo '<strong>' . HEADING_ORDER_COMMENTS . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></h2>
<div class="contentText">
<?php echo nl2br(tep_output_string_protected($order->info['comments'])) . tep_draw_hidden_field('comments', $order->info['comments']); ?>
</div>
<?php
}
?>
<div class="contentText">
<div style="float: left; width: 60%; padding-top: 5px; padding-left: 15%;">
<div id="coProgressBar" style="height: 5px;"></div>
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td align="center" width="33%" class="checkoutBarFrom"><?php echo '<a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '" class="checkoutBarFrom">' . CHECKOUT_BAR_DELIVERY . '</a>'; ?></td>
<td align="center" width="33%" class="checkoutBarFrom"><?php echo '<a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '" class="checkoutBarFrom">' . CHECKOUT_BAR_PAYMENT . '</a>'; ?></td>
<td align="center" width="33%" class="checkoutBarCurrent"><?php echo CHECKOUT_BAR_CONFIRMATION; ?></td>
</tr>
</table>
</div>
<div style="float: right;">
<?php
if (is_array($payment_modules->modules)) {
echo $payment_modules->process_button();
}
echo tep_draw_button(IMAGE_BUTTON_CONFIRM_ORDER, 'check', null, 'primary');
?>
</div>
</div>
</div>
<script type="text/javascript">
$('#coProgressBar').progressbar({
value: 100
});
</script>
</form>
<?php
require(DIR_WS_INCLUDES . 'template_bottom.php');
require(DIR_WS_INCLUDES . 'application_bottom.php');
?>
It looks like the I need to modify the modules/pages/checkout_confirmation/header_php.php file to incorporate these changes.
Am I on the right track? Can you help me in making these changes?
Thanks,
Frank
Re: One-Page Checkout [Support Thread]
Frank, just so I understand ... you've got an application that runs separately from the "normal" storefront, i.e. you access that application as https://www.example.com/application_name.php (where the application_name.php file is in the root directory of your store)?
Re: One-Page Checkout [Support Thread]
Hello Again, Thanks for the response.
The answer to your question is NO. In addition to the core files for this application there are also over writes of some of the store standard files.
The way this works is after the order is confirmed the order information is stored in the database in the normal manner but also stored as an order associated with a particular vendor.
Then the admin can access the order and the associated vendor order and is shown as an order associated with a particular vendor. At that point you can elect to have the vendor order sent automatically or manually to the vendor via email with a copy of the packing slip.
The only part of the application, that I can tell, that is not being passed by one-page checkout is the MVS stuff (Vendor Shipping) in the file above.
So I think that if there is no vendor shipping associated with the order then the application does not recognize it as vendor order. Just a presumption on my part since I did not write the application, done by third party, which I believe was a modification and ##############ization of the old zencart plugin, MVS with PDF.
I hope that explains things a little. If you need any additional information, please let me know.
Frank
Re: One-Page Checkout [Support Thread]
@fjbern1943, I'm still not getting it. Is this "application" something that gets invoked by your Zen Cart's admin-console after the customer has placed the order?
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
lat9
@fjbern1943, I'm still not getting it. Is this "application" something that gets invoked by your Zen Cart's admin-console after the customer has placed the order?
Hello,
Every product is associated with a particular vendor. When a customer orders a product the information is not only registered in the database as an order in the regular way but is also associated with that particular vendor. After the order and vendor information is written to the database in the backend the order with packing slip is sent to the vendor again either automatically or by sending it manually in the admin by pushing a button.. This can be set in the vendor setup. Everything is drop shipped by the vendor, I do not normally carry any inventory.
This allows me to automate the ordering process with my vendors. Otherwise, I would have to send them an order by email manually. This was setup with the expectation that there would be a lot of orders to enter daily. I hope this helps to clarify what the application does and how it is used.
Frank
Re: One-Page Checkout [Support Thread]
Frank, since the code you posted in post#55 starts by loading application_top.php and ends by loading application_bottom.php, I've got to assume that the script either runs under the admin or is stand-alone running from the root of your store-front.
The only thing that I can think of that might work is for that script to have its own auto-load "prefix" so that the one-page checkout doesn't interfere with that after-order script.
First, copy the file /includes/auto_loaders/config.core.php to a file named mvs.core.php in the same folder. Next, modify that script you posted, adding the following statement just prior to the require for the application_top.php script:
Code:
$loaderPrefix = 'mvs';
That will result in that script processing like the one-page checkout wasn't in the picture since its observer won't be loaded due to the change in that loader-prefix value.
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
lat9
Frank, since the code you posted in post#55 starts by loading application_top.php and ends by loading application_bottom.php, I've got to assume that the script either runs under the admin or is stand-alone running from the root of your store-front.
The only thing that I can think of that might work is for that script to have its own auto-load "prefix" so that the one-page checkout doesn't interfere with that after-order script.
First, copy the file /includes/auto_loaders/config.core.php to a file named mvs.core.php in the same folder. Next, modify that script you posted, adding the following statement just prior to the require for the application_top.php script:
Code:
$loaderPrefix = 'mvs';
That will result in that script processing like the one-page checkout wasn't in the picture since its observer won't be loaded due to the change in that loader-prefix value.
Hello,
First let me thank you very much, especially since this is away off topic for this thread.
I will give this a try and see how I make out. Seems like a very reasonable approach.
Frank