-
Notifications
You must be signed in to change notification settings - Fork 1
Suggested changes from Julien #2
Copy link
Copy link
Open
Description
I modified splitit code to be available only if Accept Terms is checked.
Can you modify the code of the extra on your side ?
Here are the modifications :
1. Fichier lexicon
Chemin : core/components/commerce_splitit/lexicon/en/default.inc.php
Ajouter cette ligne après $_lang['commerce_splitit.gateway'] = 'Splitit'; :
$_lang['commerce_splitit.accept_terms_first'] = 'Please accept the terms and conditions before paying with Splitit.';
Si tu as un fichier lexicon/fr/default.inc.php, y ajouter aussi :
$_lang['commerce_splitit.accept_terms_first'] = 'Veuillez accepter les conditions générales avant de payer avec Splitit.';
2. Template Splitit
Chemin : core/components/commerce_splitit/templates/frontend/gateways/splitit.twig
a) Dans le <style>, ajouter après le bloc existant :
#splitit-terms-notice {
display: none;
padding: 0.75rem 1rem;
margin-bottom: 0.75rem;
background: #fff8e1;
border: 1px solid #f0c040;
border-radius: 4px;
color: #555;
}
b) Avant <div id="splitit-container"></div>, ajouter :
<div id="splitit-terms-notice"></div>
c) Dans onSuccess, remplacer le contenu par :
onSuccess: function(result) {
const form = CommercePayments.getForm();
// Safety check: terms must be accepted before submitting to Commerce
const acceptTermsCheckbox = form.querySelector('input[name="accept_terms"]');
if (acceptTermsCheckbox && !acceptTermsCheckbox.checked) {
showSplititTermsNotice();
return;
}
// Add data to form
const input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", "splitit_data");
input.setAttribute("value", JSON.stringify(result));
form.appendChild(input);
// Submit after adding the data
form.submit();
}
d) Après splititDisableSubmitBtn, ajouter ces 2 fonctions :
function showSplititTermsNotice() {
const notice = document.getElementById('splitit-terms-notice');
if (notice) {
notice.textContent = '{{ lex("commerce_splitit.accept_terms_first") }}';
notice.style.display = 'block';
}
}
function hideSplititTermsNotice() {
const notice = document.getElementById('splitit-terms-notice');
if (notice) {
notice.style.display = 'none';
}
}
e) Dans CommercePayments.onReady, remplacer tout le contenu par :
CommercePayments.onReady(function() {
const form = CommercePayments.getForm();
const btn = document.querySelector('button[type=submit].c-primary-button');
const method = form.querySelector('#payment-method-{{ method }}');
const radios = form.querySelectorAll('input[type=radio].c-payment-method-radio');
const acceptTermsCheckbox = form.querySelector('input[name="accept_terms"]');
const splitit = initializeSplitit();
function termsAccepted() {
return !acceptTermsCheckbox || acceptTermsCheckbox.checked;
}
function updateSplititVisibility() {
if (method.checked) {
splititDisableSubmitBtn(btn);
if (termsAccepted()) {
splitit.show();
hideSplititTermsNotice();
} else {
splitit.hide();
showSplititTermsNotice();
}
} else {
splitit.hide();
hideSplititTermsNotice();
splititEnableSubmitBtn(btn);
}
}
if (method.checked) {
updateSplititVisibility();
}
radios.forEach(function(radio) {
radio.addEventListener('change', function(e) {
updateSplititVisibility();
});
});
if (acceptTermsCheckbox) {
acceptTermsCheckbox.addEventListener('change', function() {
if (method.checked) {
updateSplititVisibility();
}
});
}
});
Résumé du comportement : Si AcceptTerms est activé et que l'utilisateur sélectionne Splitit sans avoir coché les CGU → le widget est masqué et un message s'affiche. Dès que la case est cochée → le widget apparaît. Double sécurité dans onSuccess au cas où.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels