この問題を解決したいと思います:
フォームにいくつかのフィールドを取得しました。コンボボックス、ラジオボタン、テキスト入力などがあります。
今、私は次のことをしたいと思います:Radio-Button 1の値が1の場合、テキスト入力が表示され(showonで動作します)、表示される場合は必須です。
表示されていない場合は必要ありません。
それは可能ですか?
はい、これは可能ですが、主要な回避策です。 Joomlaには2つの必須検証イベントがあります。 1つはブラウザにあり、もう1つはフォームを保存する直前のサーバーにあります。ブラウザーはブリッジするのが簡単な部分であり、サーバー側の検証はよりトリッキーです。
「not_required」という追加の非表示フィールドをフォームに追加し、これを使用して不要なフィールドをサーバーに送信します。次に、このビューのJModelAdmin拡張クラスで、検証時に「not_required」フィールドの値を取るようにvalidateメソッドを書き換えます。
さて、ブラウザの検証を橋渡しするコードは次のとおりです。
jform_LATkbJUPdS_required = false;
// the LATkbJU function
function LATkbJU(add_css_view_LATkbJU)
{
// set the function logic
if (add_css_view_LATkbJU == 1)
{
jQuery('#jform_css_view').closest('.control-group').show();
if (jform_LATkbJUPdS_required)
{
updateFieldRequired('css_view',0);
jQuery('#jform_css_view').prop('required','required');
jQuery('#jform_css_view').attr('aria-required',true);
jQuery('#jform_css_view').addClass('required');
jform_LATkbJUPdS_required = false;
}
}
else
{
jQuery('#jform_css_view').closest('.control-group').hide();
if (!jform_LATkbJUPdS_required)
{
updateFieldRequired('css_view',1);
jQuery('#jform_css_view').removeAttr('required');
jQuery('#jform_css_view').removeAttr('aria-required');
jQuery('#jform_css_view').removeClass('required');
jform_LATkbJUPdS_required = true;
}
}
}
一般的な名前付けで申し訳ありませんが、上記は、フィールドを更新してブラウザーの検証を解除する方法についての良いアイデアを提供します。
「updateFieldRequired( 'css_view'、0);」という関数呼び出しがあることがわかります。
これは、この検証の問題のサーバー側で役立つ非表示フィールドを設定するために使用されます。この関数のコードは次のとおりです。
// update required fields
function updateFieldRequired(name,status)
{
var not_required = jQuery('#jform_not_required').val();
if(status == 1)
{
if (isSet(not_required) && not_required != 0)
{
not_required = not_required+','+name;
}
else
{
not_required = ','+name;
}
}
else
{
if (isSet(not_required) && not_required != 0)
{
not_required = not_required.replace(','+name,'');
}
}
jQuery('#jform_not_required').val(not_required);
}
これはモデルの新しい検証メソッドです
protected function checkString($string)
{
if (isset($string) && is_string($string) && strlen($string) > 0)
{
return true;
}
return false;
}
public function validate($form, $data, $group = null)
{
// check if the not_required field is set
if ($this->checkString($data['not_required']))
{
$requiredFields = (array) explode(',',(string) $data['not_required']);
$requiredFields = array_unique($requiredFields);
// now change the required field attributes value
foreach ($requiredFields as $requiredField)
{
// make sure there is a string value
if ($this->checkString($requiredField))
{
// change to false
$form->setFieldAttribute($requiredField, 'required', 'false');
// also clear the data set
$data[$requiredField] = '';
}
}
}
return parent::validate($form, $data, $group);
}
ここに GitHubのデモコンポーネント があります フィールド依存の実装モデル検証メソッド と関連する他のスクリプトも見てください。
これがあなたが探しているものであることを願って、次回は気をつけてください!