web-dev-qa-db-fra.com

Personnalisé bootstrap)

Je suis en train de valider un formulaire personnalisé côté administrateur et ci-dessous, l'exemple de code javascript

Joomla.submitbutton = function(task)
  if(condition){
    document.getElementById('jform_acc_reseller_id').required=true;
    document.formvalidator.isValid(document.id('account-form'));
    return;
}

Le code ci-dessus montre simplement le message d'erreur standard comme ci-dessous

Champ invalide: le libellé du champ

J'aimerais plutôt afficher un message d'erreur personnalisé, comme ci-dessous.

Champ non valide: libellé du champ: veuillez sélectionner un utilisateur revendeur

Comment est-ce possible?

2
Malaiselvan

Disons que j'ai validateur personnalisé "validemail" ajouté dans mon formulaire XML:

<field
            type="text"
            label="COM_HELPDESK_CC_LABEL"
            description="COM_HELPDESK_EMAIL_DESCRIPTION"
            name="cc"
            class="form-control validate-validemail"
            validate = "validemail"
        />

Le code de validation côté serveur réside dans: components/my_component/models/rules/validemail.php

use Joomla\Registry\Registry;

JFormHelper::loadRuleClass('email');

class JFormRuleValidemail extends JFormRuleEmail {

    public function test(SimpleXMLElement $element, $value, $group = null, Registry $input = null, JForm $form = null) {
        $emails = array($value);
        if (strpos($value, ';') !== false) {
            $emails = explode(';', $value);
        }
        else if (strpos($value, ',') !== false) {
            $emails = explode(',', $value);
        }

        foreach ($emails as $email) {
            if (!parent::test($element, trim($email))) {
                $element->addAttribute('message', JText::_('YOUR_ERROR_MESSAGE'));
                return false;
                continue;
            }
        }

        return true;
    }

}

Pour la validation côté client, ajoutez le script suivant à votre composant (back-end/front-end)

jQuery('.validate').click(function (e) {
    var msg = {"error": []};
    if (jQuery('#jform_bcc').hasClass('invalid')) {
        msg.error.Push(Joomla.JText._('COM_HELPDESK_BCC_ERROR'));
    }
    if (jQuery('#jform_cc').hasClass('invalid')) {
        msg.error.Push(Joomla.JText._('COM_HELPDESK_CC_ERROR'));
    }
    if (jQuery('#jform_priority').hasClass('invalid')) {
        msg.error.Push(Joomla.JText._('COM_HELPDESK_PRIORITY_ERROR'));
    }
    if (jQuery('#jform_description').hasClass('invalid')) {
        msg.error.Push(Joomla.JText._('COM_HELPDESK_DESCRIPTION_ERROR'));
    }
    if (jQuery('#jform_subject').hasClass('invalid')) {
        msg.error.Push(Joomla.JText._('COM_HELPDESK_SUBJECT_ERROR'));
    }
    Joomla.renderMessages(msg);
    e.preventDefault();
});

});

Placez ces chaînes de langue dans votre fichier .ini

COM_HELPDESK_SUBJECT_ERROR = "Please Enter Subject"
COM_HELPDESK_DESCRIPTION_ERROR = "Please Enter Description"
COM_HELPDESK_PRIORITY_ERROR = "Please Select Priority"
COM_HELPDESK_CC_ERROR = "Please Enter proper Emails in CC section"
COM_HELPDESK_BCC_ERROR = "Please Enter proper Emails in BCC section"

N'oubliez pas d'enregistrer ces messages dans votre fichier view.html.php:

JText::script('COM_HELPDESK_SUBJECT_ERROR');
JText::script('COM_HELPDESK_DESCRIPTION_ERROR');
JText::script('COM_HELPDESK_PRIORITY_ERROR');
JText::script('COM_HELPDESK_CC_ERROR');
JText::script('COM_HELPDESK_BCC_ERROR');
2
Sahil Purav