Re: Google Checkout module for Zen Cart (beta)
Quote:
Originally Posted by
Woodymon
In Modules > Payment > Google Checkout, I see listed under "Default Values for Real Time Shipping Rates" the following two items:
Per Item International
Per Item National
But I do not seen any controls to set the defaults for these two basic shipping options
So question again: Can I not use my one manual shipping method and must I use a third party shipping provider with Google Checkout?
If third party is required, why? If not, is there any straight forward process to make Google Checkout support very basic Zen Cart shipping operation?
Woody
Woody,
Do 'Per Item International' and 'Per Item National' exist in your shipping modules?
The shipping methods listed in the includes/modules/payment/googlecheckout.php file refer to shipping methods you have defined in your Admin>Modules>Shipping configuration.
As far as the default values, I have only had to set them for third-party (USPS, UPS, Fed-Ex, etc.) domestic shipping method (Priority Mail only, in my case). Flat-rate, table, etc, and international of any kind, does not seem to need default values. I think it's only needed where rates are looked up at the 'third=party' sites.
Third-party is definitely not required for GCO.
Re: Google Checkout module for Zen Cart (beta)
I was not able to figure out how to apply the "zone-based per item" shipping policy using the table rates shipping module. I spent hours in attempting to do so without success. Then Kim nicely clued me as to a streamlined shipping configuration for Zen Cart which I have been utilizing for awhile now with PayPal, etc. (ZC 1.23-1.37)
For reference, the "National and International Per Item Shipping" shipping mod available in the download area replicates the exact same shipping configuration steps I've employed. See here: http://www.zen-cart.com/index.php?ma...roducts_id=334
My two normally used shipping modules listed under "Modules > Shipping" are:
* Per Item International "iteminternational" (customer sees this as "USPS Airmail")
* Per Item National "itemnational" (customer sees this as "USPS Media Mail")
USA and subzones are only supported by "itemnational" module.
All other countries and zones are only supported by "iteminternational" module
In essence these two modules are simple hybrids of the per-item module, one supporting USA/sub-zones, the other supporting all other countries/zones. (zone-item basis, not based on weight).
With this method we can generate an EXACT shipping cost right in the shop and tell the customers in plain language, before they even add items to their shopping cart, what the basic shipping costs will be. This really helps limit the wonder about ship costs and reduces the time required to submit and process an order (easy on the customer and easy on the admin).
The reason to have two separate modules is to apply different "per-item shipping" and "per-order handling" charge, depending on if in national or international zone.
National Policy: $5 for single item and $3 each add'l item
thus: Shipping Cost 3.00 & Handling Fee 2.00
International: $10 for single item and $4 each add'l item
thus Shipping Cost 4.00 & Handling Fee 6.00
Of course we can do this as all the books we ship are very close to the same weight. Except for printed docs which we don't apply shipping or handling charge and instead apply "ALWAYS FREE SHIPPING" and integrate the shipping into the product cost for these items. (but that may have to change with stamps going up...again). And of course we don't apply a shipping charge to downloads (Side-note: Linda clued me into the point that downloads don't need to be marked "ALWAYS FREE SHIPPING", they are already defined that way internally).
I digress...How to make this ship policy work with Google Checkout, that is my present journey. (I thought getting Google Checkout to work on this shop would be much much easier when I initiated this journey).
Hopefully this info will help Ropu and other Google Checkout developers understand the dire need for more robust and transparent support for basic Zen Cart shipping module configuration.
It is possible that Ropu's "Shipping Method Generator" tool was intended for my situation. But I just don't understand how to apply it. See http://demo.globant.com/~brovagnati/..._generator.php
Woody
Re: Google Checkout module for Zen Cart (beta)
Woody, I turned on split page login on our site temporarily, please check it out and tell me if it's behaving the way you want it to or not with regards to googlecheckout.
Re: Google Checkout module for Zen Cart (beta)
This is my tpl_shopping_cart_default.php. Please not that the placement of paypal express button is personal preference. I am going to be changing this button location when we start to display shipping estimate in the shopping cart instead of using estimate button.
PHP Code:
<?php
/**
* Page Template
*
* Loaded automatically by index.php?main_page=shopping_cart.<br />
* Displays shopping-cart contents
*
* @package templateSystem
* @copyright Copyright 2003-2006 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: tpl_shopping_cart_default.php 5414 2006-12-27 07:51:03Z drbyte $
*/
?>
<div class="centerColumn" id="shoppingCartDefault">
<?php
if ($flagHasCartContents) {
?>
<?php
if ($_SESSION['cart']->count_contents() > 0) {
?>
<div class="forward"><?php echo TEXT_VISITORS_CART; ?></div>
<?php
}
?>
<h1 id="cartDefaultHeading"><?php echo HEADING_TITLE; ?></h1>
<?php if ($messageStack->size('shopping_cart') > 0) echo $messageStack->output('shopping_cart'); ?>
<?php echo zen_draw_form('cart_quantity', zen_href_link(FILENAME_SHOPPING_CART, 'action=update_product')); ?>
<div id="cartInstructionsDisplay" class="content"><?php echo TEXT_INFORMATION; ?></div>
<?php if (!empty($totalsDisplay)) { ?>
<div class="cartTotalsDisplay important"><?php echo $totalsDisplay; ?></div>
<br class="clearBoth" />
<?php } ?>
<?php if ($flagAnyOutOfStock) { ?>
<?php if (STOCK_ALLOW_CHECKOUT == 'true') { ?>
<div class="messageStackError"><?php echo OUT_OF_STOCK_CAN_CHECKOUT; ?></div>
<?php } else { ?>
<div class="messageStackError"><?php echo OUT_OF_STOCK_CANT_CHECKOUT; ?></div>
<?php } //endif STOCK_ALLOW_CHECKOUT ?>
<?php } //endif flagAnyOutOfStock ?>
<table border="0" width="100%" cellspacing="0" cellpadding="0" id="cartContentsDisplay">
<tr class="tableHeading">
<th scope="col" id="scQuantityHeading"><?php echo TABLE_HEADING_QUANTITY; ?></th>
<th scope="col" id="scUpdateQuantity"> </th>
<th scope="col" id="scProductsHeading"><?php echo TABLE_HEADING_PRODUCTS; ?></th>
<th scope="col" id="scUnitHeading"><?php echo TABLE_HEADING_PRICE; ?></th>
<th scope="col" id="scTotalHeading"><?php echo TABLE_HEADING_TOTAL; ?></th>
<th scope="col" id="scRemoveHeading"> </th>
</tr>
<!-- Loop through all products /-->
<?php
foreach ($productArray as $product) {
?>
<tr class="<?php echo $product['rowClass']; ?>">
<td class="cartQuantity">
<?php
if ($product['flagShowFixedQuantity']) {
echo $product['showFixedQuantityAmount'] . '<br /><span class="alert bold">' . $product['flagStockCheck'] . '</span><br /><br />' . $product['showMinUnits'];
} else {
echo $product['quantityField'] . '<br /><span class="alert bold">' . $product['flagStockCheck'] . '</span><br /><br />' . $product['showMinUnits'];
}
?>
</td>
<td class="cartQuantityUpdate">
<?php
if ($product['buttonUpdate'] == '') {
echo '' ;
} else {
echo $product['buttonUpdate'];
}
?>
</td>
<td class="cartProductDisplay">
<a href="<?php echo $product['linkProductsName']; ?>"><div id="cartImage" class="back"><?php echo $product['productsImage']; ?></div><div id="cartProdTitle"><?php echo $product['productsName'] . '<span class="alert bold">' . $product['flagStockCheck'] . '</span>'; ?></div></a>
<br class="clearBoth" />
<?php
echo $product['attributeHiddenField'];
if (isset($product['attributes']) && is_array($product['attributes'])) {
echo '<div class="cartAttribsList">';
echo '<ul>';
reset($product['attributes']);
foreach ($product['attributes'] as $option => $value) {
?>
<li><?php echo $value['products_options_name'] . TEXT_OPTION_DIVIDER . nl2br($value['products_options_values_name']); ?></li>
<?php
}
echo '</ul>';
echo '</div>';
}
?>
</td>
<td class="cartUnitDisplay"><?php echo $product['productsPriceEach']; ?></td>
<td class="cartTotalDisplay"><?php echo $product['productsPrice']; ?></td>
<td class="cartRemoveItemDisplay">
<?php
if ($product['buttonDelete']) {
?>
<a href="<?php echo zen_href_link(FILENAME_SHOPPING_CART, 'action=remove_product&product_id=' . $product['id']); ?>"><?php echo zen_image($template->get_template_dir(ICON_IMAGE_TRASH, DIR_WS_TEMPLATE, $current_page_base,'images/icons'). '/' . ICON_IMAGE_TRASH, ICON_TRASH_ALT); ?></a>
<?php
}
if ($product['checkBoxDelete'] ) {
echo zen_draw_checkbox_field('cart_delete[]', $product['id']);
}
?>
</td>
</tr>
<?php
} // end foreach ($productArray as $product)
?>
<!-- Finished loop through all products /-->
</table>
<div id="cartSubTotal"><?php echo SUB_TITLE_SUB_TOTAL; ?> <?php echo $cartShowTotal; ?></div>
<br class="clearBoth" />
<!--bof shopping cart buttons-->
<div class="buttonRow forward"><?php echo '<a href="' . zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '">' . zen_image_button(BUTTON_IMAGE_CHECKOUT, BUTTON_CHECKOUT_ALT) . '</a>'; ?></div>
<div class="buttonRow back"><?php echo zen_back_link() . zen_image_button(BUTTON_IMAGE_CONTINUE_SHOPPING, BUTTON_CONTINUE_SHOPPING_ALT) . '</a>'; ?></div>
<?php
// show update cart button
if (SHOW_SHOPPING_CART_UPDATE == 2 or SHOW_SHOPPING_CART_UPDATE == 3) {
?>
<div class="buttonRow back"><?php echo zen_image_submit(ICON_IMAGE_UPDATE, ICON_UPDATE_ALT); ?></div>
<?php
} else { // don't show update button below cart
?>
<?php
} // show checkout button
?>
<!--eof shopping cart buttons-->
</form>
<br class="clearBoth" />
<?php include(DIR_WS_MODULES . 'show_google_components.php'); ?>
<?php
switch (true) {
case (SHOW_SHIPPING_ESTIMATOR_BUTTON == '1'):
?>
<div class="buttonRow back"><?php echo '<a href="javascript:popupWindow(\'' . zen_href_link(FILENAME_POPUP_SHIPPING_ESTIMATOR) . '\')">' .
zen_image_button(BUTTON_IMAGE_SHIPPING_ESTIMATOR, BUTTON_SHIPPING_ESTIMATOR_ALT) . '</a>'; ?></div>
<?php
break;
case (SHOW_SHIPPING_ESTIMATOR_BUTTON == '2'):
/**
* load the shipping estimator code if needed
*/
?>
<?php require(DIR_WS_MODULES . zen_get_module_directory('shipping_estimator.php')); ?>
<?php
break;
}
?>
<?php
} else {
?>
<h2 id="cartEmptyText"><?php echo TEXT_CART_EMPTY; ?></h2>
<?php
$show_display_shopping_cart_empty = $db->Execute(SQL_SHOW_SHOPPING_CART_EMPTY);
while (!$show_display_shopping_cart_empty->EOF) {
?>
<?php
if ($show_display_shopping_cart_empty->fields['configuration_key'] == 'SHOW_SHOPPING_CART_EMPTY_FEATURED_PRODUCTS') { ?>
<?php
/**
* display the Featured Products Center Box
*/
?>
<?php require($template->get_template_dir('tpl_modules_featured_products.php',DIR_WS_TEMPLATE, $current_page_base,'templates'). '/tpl_modules_featured_products.php'); ?>
<?php } ?>
<?php
if ($show_display_shopping_cart_empty->fields['configuration_key'] == 'SHOW_SHOPPING_CART_EMPTY_SPECIALS_PRODUCTS') { ?>
<?php
/**
* display the Special Products Center Box
*/
?>
<?php require($template->get_template_dir('tpl_modules_specials_default.php',DIR_WS_TEMPLATE, $current_page_base,'templates'). '/tpl_modules_specials_default.php'); ?>
<?php } ?>
<?php
if ($show_display_shopping_cart_empty->fields['configuration_key'] == 'SHOW_SHOPPING_CART_EMPTY_NEW_PRODUCTS') { ?>
<?php
/**
* display the New Products Center Box
*/
?>
<?php require($template->get_template_dir('tpl_modules_whats_new.php',DIR_WS_TEMPLATE, $current_page_base,'templates'). '/tpl_modules_whats_new.php'); ?>
<?php } ?>
<?php
if ($show_display_shopping_cart_empty->fields['configuration_key'] == 'SHOW_SHOPPING_CART_EMPTY_UPCOMING') {
include(DIR_WS_MODULES . zen_get_module_directory(FILENAME_UPCOMING_PRODUCTS));
}
?>
<?php
$show_display_shopping_cart_empty->MoveNext();
} // !EOF
?>
<?php
}
?>
<!-- ** BEGIN PAYPAL EXPRESS CHECKOUT ** -->
<?php // only display EC option if cart contents >0 and value >0
if (defined('MODULE_PAYMENT_PAYPALWPP_STATUS') && MODULE_PAYMENT_PAYPALWPP_STATUS == 'True' && $_SESSION['cart']->count_contents() > 0 && $_SESSION['cart']->total > 0) {
include(DIR_FS_CATALOG . DIR_WS_MODULES . 'payment/paypal/tpl_ec_button.php');
}
?>
<!-- ** END PAYPAL EXPRESS CHECKOUT ** -->
</div>
Re: Google Checkout module for Zen Cart (beta)
Quote:
Originally Posted by
Woodymon
For reference, the "National and International Per Item Shipping" shipping mod available in the download area replicates the exact same shipping configuration steps I've employed. See here:
http://www.zen-cart.com/index.php?ma...roducts_id=334
My two normally used shipping modules listed under "Modules > Shipping" are:
* Per Item International "iteminternational" (customer sees this as "USPS Airmail")
* Per Item National "itemnational" (customer sees this as "USPS Media Mail")
I digress...How to make this ship policy work with Google Checkout, that is my present journey. (I thought getting Google Checkout to work on this shop would be much much easier when I initiated this journey).
Hopefully this info will help Ropu and other Google Checkout developers understand the dire need for more robust and transparent support for basic Zen Cart shipping module configuration.
It is possible that Ropu's "Shipping Method Generator" tool was intended for my situation. But I just don't understand how to apply it. See
http://demo.globant.com/~brovagnati/..._generator.php
Woody
I would hazard a guess that you can use something like:
PHP Code:
'itemnational' => array(
'domestic_types' =>
array( 'itemnational' => 'Per Item National'
),
'international_types' =>
array(
),
),
and
PHP Code:
'iteminternational' => array(
'domestic_types' =>
array(
),
'international_types' =>
array( 'iteminternational' => 'Per Item International'
),
),
Then for your GCO display you could add:
PHP Code:
'itemnational' => 'Media Mail',
'iteminternational' => 'Air Mail',
to the
PHP Code:
$this->mc_shipping_methods_names = array(
Re: Google Checkout module for Zen Cart (beta)
Quote:
Originally Posted by
BlessIsaacola
Woody, I turned on split page login on our site temporarily, please check it out and tell me if it's behaving the way you want it to or not with regards to googlecheckout.
Yes yours is working good. Could you be kind enough to post (and maybe shop cart template file too)... purdy please ;-)
And excellent looking shop you have.
Woody
Re: Google Checkout module for Zen Cart (beta)
Quote:
Originally Posted by
BlessIsaacola
Woody, I turned on split page login on our site temporarily, please check it out and tell me if it's behaving the way you want it to or not with regards to googlecheckout.
When testing this, please keep in mind that when you're on the split login page what you see depends on whether you have an item in shopping cart with dollar value or not. Add a free item to shopping cart versus an item that have dollar value also affects the type of login page that is displayed.
Currently, googlecheckout does not display the button on the login page if there is no dollar value in the shopping cart when split login page is enabled (even if a free item that requires shipping is added). If split login page is not enabled, then googlecheckout button is displayed but greyed out.
Re: Google Checkout module for Zen Cart (beta)
Wow! Great support! Thanks Issac and Chain_man!
Woody
Re: Google Checkout module for Zen Cart (beta)
Quote:
Originally Posted by
Woodymon
Yes yours is working good. Could you be kind enough to post (and maybe shop cart template file too)... purdy please ;-)
And excellent looking shop you have.
Woody
I posted my shopping cart template a few posts above. Please keep in mind that the template I posted above is the one online right now. I actually I have three different versions. One that places PayPal button before googlecheckout button, one that places paypal button after the shipping estimator button and one that places paypal button after googlecheckout but before shipping estimator button which for when we are displaying the shipping estimates directly in the shopping cart.
Re: Google Checkout module for Zen Cart (beta)
Quote:
Originally Posted by
Woodymon
Wow! Great support! Thanks Issac and Chain_man!
Woody
Just a little payback...