web-dev-qa-db-ja.com

構築コンポーネント-「無効なフィールド:私のフィールド」をカスタムメッセージに置き換えます

Joomlaのカスタムコンポーネントを開発しています。

カスタムルールを追加して、フィールドの検証に成功しました。しかし、入力された値が私の検証を通過しない場合、「無効なフィールド:私のフィールド名」というエラーが発生します

これを自分のメッセージに置き換えたい。

"JText :: _( 'LANGUAGE_STRING')を使用できることはわかっていますが、どこに追加する必要があるかわかりません。

クライアント側とサーバー側の検証でfalseを返す「validemails」というカスタムルールがあります。

クライアント側の検証は次のとおりです:(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;
    }

}

バックエンドではなくコンポーネントのフロントエンドビューを開発していることに注意してください。

4
Sahil Purav

幸いなことに、次のようにしてサーバー側の検証を機能させました。

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

私はJS側についてはわかりませんが、phpの場合は次のようにします。

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