テンプレート変数をRadio Option とした場合の不具合

質問全般・改善要望
maki
メンバー
メンバー
記事: 22
登録日時: 2016年10月28日(金) 20:44

テンプレート変数をRadio Option とした場合の不具合

投稿記事by maki » 2020年3月16日(月) 15:24

管理画面での操作の話となります。
テンプレート変数でRadio Optionとした変数が、同じリソースの中に複数ある場合、管理画面でリソースを編集する際、ラジオ選択型の選択項目が誤動作します。
これは、下記のように別のオプションでもlabelに毎度同じく名前がついてしまうためで、ラベル部分をクリックすると別の入力オプションが反応してしまいます。

Aの入力オプション
<label for="tv_0"><input type="radio" value="1" id="tv_0" name="...">...</label>
<label for="tv_1"><input type="radio" value="1" id="tv_1" name="...">...</label>

Bの入力オプション(Aと同じIDがついている)
<label for="tv_0"><input type="radio" value="1" id="tv_0" name="...">...</label>
<label for="tv_1"><input type="radio" value="1" id="tv_1" name="...">...</label>

これで誤動作が起こるためちょっと困っています。
修正していただけますと助かります。(いっそlabelでの反応はなくていいいです)
mod_kks
メンバー
メンバー
記事: 28
登録日時: 2017年11月04日(土) 01:31

テンプレート変数をRadio Option とした場合の不具合

投稿記事by mod_kks » 2020年3月19日(木) 11:35

ドキュメント編集画面内のテンプレート変数項目の描画は
/manager/includes/extenders/ex_subparser.php
で定義されています。

バージョンによって異なりますが1.0.22ですと、1100行目前後に
renderFormElement関数が定義されています。この中でフィールド
タイプ「option」についての記述があり、これを以下のように変更
することで一意のidなるかと思います。

コード: 全て選択

if (strtolower($field_type) === 'option') {
    $rs = $this->ProcessTVCommand($field_elements, $field_id, '', 'tvform');
    $index_list = $this->ParseInputOptions($rs);
    $i = 0;
    $field_html = '';
    $tpl = file_get_contents(MODX_CORE_PATH . 'docvars/inputform/form_radio.tpl');
    foreach ($index_list as $item) {
        list($label, $value) = $this->splitOption($item);
        $checked = $this->isSelected($label, $value, $item, $field_value) ? 'checked="checked"' : '';
        $value = $modx->hsc($value);
        $field_html .= sprintf(
            $tpl
            , $field_id . '_' . $i // ここを変更(label要素のfor属性値)
            , $value
            , $field_id . '_' . $i // ここを変更(input要素のid属性値)
            , $field_id
            , $checked
            , $label
        );
        $i++;
    }
    return $field_html;
}
maki
メンバー
メンバー
記事: 22
登録日時: 2016年10月28日(金) 20:44

テンプレート変数をRadio Option とした場合の不具合

投稿記事by maki » 2020年3月19日(木) 16:03

mod_kksさま
どうもありがとうございました!無事に不具合解消しました。次期バージョンで盛り込んでいただけますと幸いです。
どうぞよろしくおねがいいたします。