当前位置: 首页 > 知识库问答 >
问题:

Joomla-表单无效字段的自定义错误消息

沙岳
2023-03-14

我正在为Joomla开发定制组件。

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

我想用我自己的信息来代替它。

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

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

我的客户端验证是:(组件/com_helpdesk/模型/表格/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;
    });
});

我的服务器端验证是:(组件/com_helpdesk/模型/规则/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;
    }

}

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

共有1个答案

常枫涟
2023-03-14

幸运的是,我通过以下方式实现了服务器端验证:

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

}

我找到了解决办法。也许这对其他谷歌用户会有用。下面是客户端验证的代码片段。在自定义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();
    });
 类似资料:
  • 我想开始尝试一些文章布局覆盖新字段放置在管理区域,但真的很难找到在线帮助,指导整个过程。不幸的是,关于这个主题(包括joomla.org)的最深入的指南是2.5或更低,但我当然希望使用版本3。 我希望最终使用该技术添加各种字段,但我认为这是一个很好的起点,我的第一个目标是使“完整文章图像”可链接。我的意思是,当用户在管理区域编辑文章时,当他们进入“图像和链接”选项卡时,可能会有一个“链接”字段,这

  • 我需要在joomla 3.0的模块中使用xml创建一些自定义字段。我做了如下所示的事情。我的模块。字段的xml文件代码为: 如何保存多个字段的值?请帮帮我

  • 我在Codeigniter中为表单验证创建了一个自定义函数。它连接到URL帮助器,我通过制作MY_URL_帮助器实现了这一点。 助手修改: 我如何称呼验证: 美元这个- 语言文件: 但是提交表单时不会显示任何错误信息。如果我将valid_url函数更改为true和false,它将执行该函数。所以它运行这个函数。 如何使错误消息出现?

  • 默认情况下,消息:此值无效。这是不够的。我正在向实体中的每个属性添加@Assert,以进行更具体的验证。 我将在表单顶部全局显示错误,而不是单独显示错误,以防在本次讨论中出现问题。 这是迄今为止我所知道的,但当我输入值“D44.33”时,表单仍然无效 如何覆盖默认的“类型”验证器?请注意,其他验证器(如GreaterThanOrEqual)的工作原理与预期相同,但就我而言,我无法让“类型”工作??

  • 如何在wordpress忍者表单插件中显示自定义错误消息。我已经搜索了忍者表格文件,但无法到达网站。默认情况下,错误消息显示为 我希望它是 提前道谢。

  • 问题内容: 我可以看到使用表单时如何向字段添加错误消息,但是模型表单呢? 这是我的测试模型: 我的模型表格: 在字段中的错误信息:和是: 这是必填栏 如何以模型形式进行更改? 问题答案: 对于简单的情况,你可以指定自定义错误消息