it-swarm.com.de

Gebäudekomponente - Ersetzen Sie "Ungültiges Feld: Mein Feld" durch "Benutzerdefinierte Nachricht"

Ich entwickle Custom Component für Joomla.

Ich habe das Feld gut validiert, indem ich benutzerdefinierte Regeln hinzugefügt habe. Wenn der eingegebene Wert meine Überprüfung nicht besteht, wird der Fehler "Ungültiges Feld: Mein Feldname" angezeigt.

Ich möchte dies durch meine eigene Nachricht ersetzen.

Ich weiß, dass ich "JText :: _ ('LANGUAGE_STRING')" verwenden kann. Aber ich bin nicht sicher, wo ich es hinzufügen muss.

Ich habe eine benutzerdefinierte Regel namens "validemails", die sowohl bei der clientseitigen als auch bei der serverseitigen Validierung false zurückgibt.

Meine clientseitige Validierung lautet: (components/com_helpdesk/models/forms/create.js)

jQuery(document).ready(function () {
    document.formvalidator.setHandler('validemail', function (value) {
        var emails = [value];
        if (value.indexOf(';') !== -1) {
            emails = value.split(';');
        }
        else if(value.indexOf(',') !== -1) {
            emails = value.split(',');
        }
        regex = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
        var result = false;
        emails.each(function (value) {
            result = regex.test(jQuery.trim(value));
            if (result === false) {
                return false;
            }
        });
        return result;
    });
});

Meine serverseitige Überprüfung lautet: (components/com_helpdesk/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))) {
                return false;
                continue;
            }
        }

        return true;
    }

}

Bitte beachten Sie, dass ich die Front-End-Ansicht der Komponente und nicht das Back-End entwickle.

4
Sahil Purav

Zum Glück hat meine serverseitige Validierung folgendermaßen funktioniert:

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::_('COM_HELPDESK_ERROR_EMAIL').' '.$value);***
                return false;
                continue;
            }
        }

        return true;
    }

}

Ich habe die Lösung. Vielleicht ist es für andere Googler nützlich. Unten finden Sie einen Codeausschnitt für die clientseitige Validierung. Fügen Sie den folgenden Code in Ihr benutzerdefiniertes JS ein:

jQuery('.validate').click(function (e) {

    var msg = {"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'));
    }      
    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'));
    }
    Joomla.renderMessages(msg);
    e.preventDefault();
});
4
Sahil Purav

Ich weiß nicht für die JS Seite der Dinge, aber für die PHP, die Sie tun würden:

$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('LANGUAGE_STRING'), 'warning');
1
Rob Clayburn