私は管理者側でカスタムフォーム検証を行っており、以下はサンプルのJavaScriptコードです
Joomla.submitbutton = function(task)
if(condition){
document.getElementById('jform_acc_reseller_id').required=true;
document.formvalidator.isValid(document.id('account-form'));
return;
}
上記のコードは、以下のような標準エラーメッセージを示しています。
無効なフィールド:フィールドラベル
代わりに、以下のようなカスタムエラーメッセージを表示します
無効なフィールド:フィールドラベル:販売代理店ユーザーを選択してください
そんなことがあるものか?
カスタムバリデーター "validemail"をフォームXMLに追加したとします。
<field
type="text"
label="COM_HELPDESK_CC_LABEL"
description="COM_HELPDESK_EMAIL_DESCRIPTION"
name="cc"
class="form-control validate-validemail"
validate = "validemail"
/>
サーバー側の検証コードは、components/my_component/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))) {
$element->addAttribute('message', JText::_('YOUR_ERROR_MESSAGE'));
return false;
continue;
}
}
return true;
}
}
クライアント側の検証では、次のスクリプトをコンポーネント(バックエンド/フロントエンド)に追加します
jQuery('.validate').click(function (e) {
var msg = {"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'));
}
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'));
}
Joomla.renderMessages(msg);
e.preventDefault();
});
});
この言語文字列を.iniファイルに入れます
COM_HELPDESK_SUBJECT_ERROR = "Please Enter Subject"
COM_HELPDESK_DESCRIPTION_ERROR = "Please Enter Description"
COM_HELPDESK_PRIORITY_ERROR = "Please Select Priority"
COM_HELPDESK_CC_ERROR = "Please Enter proper Emails in CC section"
COM_HELPDESK_BCC_ERROR = "Please Enter proper Emails in BCC section"
このメッセージをview.html.phpファイルに登録することを忘れないでください:
JText::script('COM_HELPDESK_SUBJECT_ERROR');
JText::script('COM_HELPDESK_DESCRIPTION_ERROR');
JText::script('COM_HELPDESK_PRIORITY_ERROR');
JText::script('COM_HELPDESK_CC_ERROR');
JText::script('COM_HELPDESK_BCC_ERROR');