Skip to main content

Champs conditionnels dans profil joomla

More
1 year 1 week ago #369053 by Minie
-- HikaShop version -- : 6.1.0
-- Joomla version -- : 5.3.1
-- PHP version -- : 8.3.16

Bonjour,

un petit message pour signaler un petit souci. Les champs conditionnels fonctionnent nickel sur la page d'inscription, si un champ requis n'est pas affiché car il dépend d'un autre, aucun souci.

Par contre, dans le profil joomla, les champs supplémentaires hikashop générés ne répondent pas pareil, la validation JS Joomla bloque sur ces champs, non visibles dans le form car les conditions ne sont pas remplies pour leur affichage, mais présents dans le DOM et donc "is not focusable"

De mon coté ce n'est pas urgent, j'ai fait un petit patch js en attendant, mais je tenais à vous faire remonter l'info.

Merci

Please Log in or Create an account to join the conversation.

More
1 year 1 week ago #369056 by nicolas
Bonjour,

Intéressant en effet. Quel patch avez-vous fait ? Car pour l'instant je ne suis pas sûr de quelle serait la méthode à appliquer pour éviter le problème.

Please Log in or Create an account to join the conversation.

More
1 year 1 week ago #369112 by Minie
Bonjour,

mon "patch" est un peu à l'arrache et pas générique du tout mais il règle mon souci je préviens :)
Code:
<script> // Corrige les champs conditionnels pour éviter le blocage de validation du formulaire JS document.addEventListener('DOMContentLoaded', function() { // 1) Cibler les 3 champs (id ou name — couvre les deux cas) var legalInputs = Array.from(document.querySelectorAll( 'input[id^="user_legal_representative"],' + 'input[name^="data[user][user_legal_representative"]' )); if (legalInputs.length === 0) { return; } var form = legalInputs[0].form || document.querySelector('form.form-validate') || document.querySelector('form'); function isHidden(el) { // offsetParent === null couvre display:none et les éléments non focusables if (el.offsetParent === null) { return true; } // Vérifie si HikaShop masque via visibility/height/opacity var cs = window.getComputedStyle(el); if (cs.visibility === 'hidden' || cs.display === 'none' || parseFloat(cs.opacity) === 0) { return true; } // Vérifie si le conteneur parent est masqué var p = el.closest('.hikashop_field, .control-group, .form-group, li, div'); if (p) { var cps = window.getComputedStyle(p); if (cps.display === 'none' || cps.visibility === 'hidden') { return true; } } return false; } function syncOne(el) { var hidden = isHidden(el); if (hidden) { el.disabled = true; // Le validateur ignore un champ désactivé el.required = false; el.classList.remove('required', 'invalid', 'form-control-danger'); el.setAttribute('aria-invalid', 'false'); var label = form && form.querySelector('label[for="' + el.id + '"]'); if (label) { label.classList.remove('invalid'); var fb = label.querySelector('.form-control-feedback'); if (fb) { fb.remove(); } } } else { el.disabled = false; el.required = true; // Quand visible, le champ redevient requis el.classList.add('required'); } } function syncAll() { legalInputs.forEach(syncOne); } // 2) Synchroniser au chargement syncAll(); // 3) Synchroniser avant chaque soumission (capture pour exécuter avant la validation Joomla) if (form) { form.addEventListener('submit', function() { syncAll(); }, true); } // 4) HikaShop masque/affiche via toggleField → resynchroniser après chaque appel if (window.hikashop && typeof window.hikashop.toggleField === 'function') { var _origToggle = window.hikashop.toggleField; window.hikashop.toggleField = function() { var r = _origToggle.apply(this, arguments); setTimeout(syncAll, 0); return r; }; } // 5) Resynchroniser sur tout changement d’état document.addEventListener('change', syncAll, true); }); </script>

Please Log in or Create an account to join the conversation.

More
1 year 4 days ago #369129 by nicolas
Bonjour,

Merci. Cela m'a bien aidé pour faire le patch de mon côté.
Ce sera inclus dans la prochaine version d'HikaShop.

Please Log in or Create an account to join the conversation.

Time to create page: 0.153 seconds
Powered by Kunena Forum