HI!
I new in Magento and I'm trying to personalize my checkout page, I want to add a newsletter checkbox. I started to add this code in LayoutProcessor.php of checkout module :
if (isset($jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
['shippingAddress']['children']['shipping-address-fieldset']['children'])
) {
$jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
['shippingAddress']['children']['shipping-address-fieldset']['children']['subscribe'] = [
'component' => 'Magento_Ui/js/form/element/abstract',
'config' => [
'customScope' => 'shippingAddress',
'template' => 'ui/form/field',
'elementTmpl' => 'ui/form/element/checkbox',
'options' => [],
'id' => 'delivery-date',
],
'dataScope' => 'shippingAddress.newsletter_subscribe',
'label' => 'Sign Up for Newsletter',
'provider' => 'checkoutProvider',
'visible' => true,
'checked' => true,
'validation' => [],
'sortOrder' => 250,
'id' => 'newsletter-subscribe',
'value' => 'subscription',
];
}And now I need to get the checkbox value and put the consumer email in newsletter_suscriber table after finish the checkout process. How Can I do that please ?
Thank you!
Hi
I ended up replacing 'required-entry' with a custom validator that checks if the checkbox is checked first. For example:
validator.addRule( 'required-entry-if-create-account-checked', function (value) { if(hiddenLoginFields.is(':visible') || !$('input[name*="create_account_checkbox"]').is(":checked")) { return true; } else { return !utils.isEmpty(value); } }, $.mage.__('This is a required field.') ); validator.addRule( 'validate-create_password', function (value) { if(hiddenLoginFields.is(':visible') || !$('input[name*="create_account_checkbox"]').is(":checked")) { return true; } else { var pass; if (value == null) { return false; } pass = $.trim(value); if (!pass.length) { return true; } return !(pass.length > 0 && pass.length < 6); } }, $.mage.__('Please enter 6 or more characters. Leading and trailing spaces will be ignored.') ); validator.addRule( 'validate-confirm_password', function (value) { if(hiddenLoginFields.is(':visible') || !$('input[name*="create_account_checkbox"]').is(":checked")) { return true; } else { return $('input[name*="create_account_password"]').val() === $('input[name*="create_account_password_confirm"]').val(); } }, $.mage.__('Please enter the same value again.') );
Thank you so much for your response!
And I put the validator on : Magento/module_checkout/Model/frontend/web/js/model/default-validator.js ?
Thank you:
I'm sorry but I'm still lost ![]()
I do not know what to do exactly after adding my newsletter checkbox in the LayoutPorcessor.php to receive the customer's email in the newsletter table.
I need to validate my code in LayoutPorcessor.php
if (isset($jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
['shippingAddress']['children']['shipping-address-fieldset']['children'])
) {
$jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
['shippingAddress']['children']['shipping-address-fieldset']['children']['subscribe'] = [
'component' => 'Magento_Ui/js/form/element/abstract',
'config' => [
'customScope' => 'shippingAddress',
'template' => 'ui/form/field',
'elementTmpl' => 'ui/form/element/checkbox',
'options' => [],
'id' => 'delivery-date',
],
'dataScope' => 'shippingAddress.newsletter_subscribe',
'label' => 'Sign Up for Newsletter',
'provider' => 'checkoutProvider',
'visible' => true,
'checked' => true,
'validation' => [],
'sortOrder' => 250,
'id' => 'create_account_checkbox',
'value' => 'create_account_checkbox',
];
}
return $jsLayout;
}With default-validator.js ? After I need to call subscriber model in the checkout module controller to get the email in newsletter table after finishing the checkout process ?