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;
}
}
バックエンドではなくコンポーネントのフロントエンドビューを開発していることに注意してください。
幸いなことに、次のようにしてサーバー側の検証を機能させました。
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();
});
私はJS側についてはわかりませんが、phpの場合は次のようにします。
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('LANGUAGE_STRING'), 'warning');