Re: One-Page Checkout [Support Thread]
I need to get the gender of the guest account. I checked the source code and found that I can get the user's birthday address like
PHP Code:
$dob_value = $_SESSION['opc']->getGuestDateOfBirth();
, but for the gender of the guest, I don't get it.
I can't use this in another php file
PHP Code:
$gender = $this->guestCustomerInfo['gender'];
To get effective help, can anyone provide some tips?
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
ikirin
I need to get the gender of the guest account. I checked the source code and found that I can get the user's birthday address like
PHP Code:
$dob_value = $_SESSION['opc']->getGuestDateOfBirth();
, but for the gender of the guest, I don't get it.
I can't use this in another php file
PHP Code:
$gender = $this->guestCustomerInfo['gender'];
To get effective help, can anyone provide some tips?
Depending on which of the billing/shipping addresses' gender you are "looking for", you can use the following interfaces:
PHP Code:
$billing_address = $_SESSION['opc']->getAddressValues('bill');
$billing_gender = $billing_address['gender'];
$shipping_address = $_SESSION['opc']->getAddressValues('ship');
$shipping_gender = $shipping_address['gender'];
Re: One-Page Checkout [Support Thread]
Thank you bro, this parameter works:smile:
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
ikirin
Thank you bro, this parameter works:smile:
Thanks for the follow-up ... and it's sis!
Re: One-Page Checkout [Support Thread]
I had some time to look at this timeout I get once in awhile.. I think it's a server side issue, but here is a copy of the error from the log.
Quote:
2023/10/05 20:06:23 [error] 23835#0: *1048649 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xx.xx.xx.xx, server: gulfstatessupply.com, request: "POST /index.php?main_page=checkout_process HTTP/2.0", upstream: "fastcgi://unix:/var/www/vhosts/system/gulfstatessupply.com/php-fpm.sock", host: "gulfstatessupply.com", referrer: "https://gulfstatessupply.com/index.php?main_page=checkout_one_confirmation"
Does not matter if it's a payment module, COD, Invoice, etc.. I know how to make it so it doesn't error, but I don't know why the process is taking so long to get to the checkout final page. It doesn't happen all the time, but it happens enough to make me want to fix it.
Zen Cart 1.5.7a
17,000 items
UPS
Square
Othe payment options and Local Delivery Option.
I'm about to move to an AWS server on 1.5.8.. This weekend. I'll see if it persists.
Thanks for the great addon!
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
brian70809
I had some time to look at this timeout I get once in awhile.. I think it's a server side issue, but here is a copy of the error from the log.
Does not matter if it's a payment module, COD, Invoice, etc.. I know how to make it so it doesn't error, but I don't know why the process is taking so long to get to the checkout final page. It doesn't happen all the time, but it happens enough to make me want to fix it.
Zen Cart 1.5.7a
17,000 items
UPS
Square
Othe payment options and Local Delivery Option.
I'm about to move to an AWS server on 1.5.8.. This weekend. I'll see if it persists.
Thanks for the great addon!
Hmm, while that log is unintelligible to me, but Google found this SO posting that looks promising: https://stackoverflow.com/questions/...g-response-hea
Unfortunately, there are a couple of proposed solutions in that posting and I don't 'speak' NGINX, so I'm hoping that someone who's conversant can chime in with the best "path to success".
Re: One-Page Checkout [Support Thread]
I'm so sorry, I thought you were a man, :D
I have a small suggestion. On the contact us page, add a read-only judgment for the contactname option on the guest account. I am currently doing this, but I don’t know if there is any other better method.
HTML Code:
includes/templates/template_default/templates/tpl_contact_us_default.php
PHP Code:
<?php if (zen_in_guest_checkout()) { ?>
<?php echo zen_draw_input_field('contactname', $name, ' size="40" id="contactname" placeholder="' . ENTRY_REQUIRED_SYMBOL . '" required'.' readonly="true"'); ?>
<?php } else { ?>
<?php echo zen_draw_input_field('contactname', $name, ' size="40" id="contactname" placeholder="' . ENTRY_REQUIRED_SYMBOL . '" required'); ?>
<?php } ?>
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
ikirin
I'm so sorry, I thought you were a man, :D
I have a small suggestion. On the contact us page, add a read-only judgment for the contactname option on the guest account. I am currently doing this, but I don’t know if there is any other better method.
HTML Code:
includes/templates/template_default/templates/tpl_contact_us_default.php
PHP Code:
<?php if (zen_in_guest_checkout()) { ?>
<?php echo zen_draw_input_field('contactname', $name, ' size="40" id="contactname" placeholder="' . ENTRY_REQUIRED_SYMBOL . '" required'.' readonly="true"'); ?>
<?php } else { ?>
<?php echo zen_draw_input_field('contactname', $name, ' size="40" id="contactname" placeholder="' . ENTRY_REQUIRED_SYMBOL . '" required'); ?>
<?php } ?>
No problems, I wouldn't have mentioned it if @dbltoe hadn't.
Noting that the contact_us page change is a Zen Cart core one. Why do you feel that it is important to make the 'contactname' field read-only during guest checkout?
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
lat9
I can! It's a core-file issue; you'll need to edit /includes/classes/shipping.php's cheapest method:
Code:
function cheapest() {
if (!is_array($this->modules)) return false;
$rates = array();
foreach($this->modules as $value) {
$class = substr($value, 0, strrpos($value, '.'));
if (isset($GLOBALS[$class]) && is_object($GLOBALS[$class]) && $GLOBALS[$class]->enabled) {
$quotes = isset($GLOBALS[$class]->quotes) ? $GLOBALS[$class]->quotes : null;
if (empty($quotes['methods'])) {
continue;
}
$size = sizeof($quotes['methods']);
for ($i=0; $i<$size; $i++) {
if (isset($quotes['methods'][$i]['cost'])){
$rates[] = array('id' => $quotes['id'] . '_' . $quotes['methods'][$i]['id'],
'title' => $quotes['module'] . ' (' . $quotes['methods'][$i]['title'] . ')',
'cost' => $quotes['methods'][$i]['cost'],
'module' => $quotes['id']
);
}
}
}
}
$cheapest = false;
$size = sizeof($rates);
for ($i=0; $i<$size; $i++) {
if (is_array($cheapest)) {
// never quote storepickup as lowest - needs to be configured in shipping module
if ($rates[$i]['cost'] < $cheapest['cost'] and $rates[$i]['module'] != 'storepickup') {
$cheapest = $rates[$i];
}
} else {
if ($rates[$i]['module'] != 'storepickup') {
$cheapest = $rates[$i];
}
}
}
$this->notify('NOTIFY_SHIPPING_MODULE_CALCULATE_CHEAPEST', $cheapest, $cheapest, $rates);
return $cheapest;
}
... and change the highlighted line to read:
Code:
if ($size === 1 || $rates[$i]['module'] != 'storepickup') {
That change enables the storepickup to be selected as the cheapest ... if it's the only shipping method available.
Hi Cindy,
If the only shipping method is storepickup AND storepickup contains more than one pickup point, may be with different prices, then $size equals the number of pickup points (not 1).
Thus, $cheapest is false and shipping options are shown but none will be selected.
Tested in:
zc157d
OPC 2.4.6
Site has storepickup as the only shipping method but configured with 5 locations and different prices.
e.g.: Loc_A, 8.5045;Loc_B, 2.5045;Loc_C, 4.5045;Loc_D, 7.5045;Loc_E, 0.5045
To test, I changed shipping.php, round line 216
PHP Code:
} else {
if ($size === 5 || $rates[$i]['module'] != 'storepickup') {
$cheapest = $rates[$i];
}
Thus, $size === 5.
The 5 locations are shown with bullets in the same order and the first bullet is selected (not cheapest!).
Payment options are shown as well.
Without my change in shipping.php, the shipping locations are shown in the same order, none populated and no Payments options are shown, need to refresh the screen to get the payment options (or set 'Payment-Block Action on Shipping Change' to 'Refresh' i.s.o 'Update').
Any suggestions?
Thanks,
@jpda
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
lat9
Hello Cindy,
I should have sent you this before my previous post on october, 25th.
I had changed shipping.php, but the only available shipping method storepickup was not selected as cheapest.
IMHO because storepickup has an option to register more than one pickup point with different prices.
Did some testing described in my post https://www.zen-cart.com/showthread....04#post1397504
Thanks,
@jpda