【问题标题】:Joomla - Custom error message from form invalid fieldsJoomla - 来自表单无效字段的自定义错误消息
【发布时间】:2015-06-24 12:41:22
【问题描述】:

我正在为 Joomla 开发自定义组件。

通过添加自定义规则,我在验证字段方面做得很好。但是如果输入的值没有通过我的验证,它会给出错误“无效字段:我的字段名称”

我想用我自己的消息替换它。

我知道我可以使用“JText::_('LANGUAGE_STRING')。但我不确定我需要在哪里添加它。

我有一个名为“validemails”的自定义规则,它在客户端和服务器端验证中返回 false。

我的客户端验证是:(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.!#$%&’*+/=?^_`{|}~-]+@[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;
    });
});

我的服务器端验证是:(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;
    }

}

请注意,我正在开发组件的前端视图而不是后端。

【问题讨论】:

    标签: joomla joomla3.4


    【解决方案1】:

    幸运的是,我的服务器端验证通过这种方式工作:

    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;
        }
    
    }
    

    我得到了解决方案。可能对其他谷歌用户有用。下面是用于客户端验证的代码 sn-p。将以下代码放入您的自定义 JS 中:

    jQuery('.validate').click(function (e) {
            var fields, invalid = [], valid = true, label, error, i, l;
            fields = jQuery('form.form-validate').find('input, textarea, select');
            if (!document.formvalidator.isValid(jQuery('form'))) {
                for (i = 0, l = fields.length; i < l; i++) {
                    if (document.formvalidator.validate(fields[i]) === false) {
                        valid = false;
                        invalid.push(fields[i]);
                    }
                }
    
                // Run custom form validators if present
                jQuery.each(document.formvalidator.custom, function (key, validator) {
                    if (validator.exec() !== true) {
                        valid = false;
                    }
                });
    
                if (!valid && invalid.length > 0) {
                    error = {"error": []};
                    for (i = invalid.length - 1; i >= 0; i--) {
                        label = jQuery.trim(jQuery(invalid[i]).data("label").text().replace("*", "").toString());
                        if (label) {
                            if(label === 'Subject') {                            
                                error.error.push('Please Enter Subject');
                            }
                            if(label === 'Description') {
                                error.error.push('Please Enter Description');
                            }
                            if(label === 'Priority') {
                                error.error.push('Please Select Priority');
                            }
                            if(label === 'Email CCs') {
                                error.error.push('Please Enter proper Emails in CC section');
                            }
                            if(label === 'Email BCCs') {
                                error.error.push('Please Enter proper Emails in BCC section');
                            }
                        }
                    }
                }
                Joomla.renderMessages(error);
            }
            e.preventDefault();
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-08
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多