Movable Type version 5.01 でサイト構築しています。
社内スタッフにそれぞれブログアカウントを発行し、記事を書いてもらっています。
スタッフには、カテゴリー追加や編集などの権限は与えておらず、
書いた記事に対して、こちらで予め設定したカテゴリにチェックを入れれるだけです。
通常の設定だと、1つの記事に対して複数のカテゴリを設定出来きてしまうので、
出来れば、1記事1カテゴリしか選べないような仕組みにしたいと思っています。
カテゴリのチェック形式が「チェックボタン」なので、
これを「ラジオボタン」に出来れば、1つしか選べないようにできるのでは?
と考えておりますが、実装方法が分かりません。
上記やり方ではなくても、カテゴリを1つだけしか選べないようにする方法はございますでしょうか?
皆様のお知恵を貸して下さい。
方法1.チェックボックスからラジオボタンに変更します。
・「tmpl/cms/include/category_selector.tmpl」
12行目に次の行があります。
<input type="<mt:if name="object_type" eq="page">radio<mt:else>checkbox</mt:if>" name="<mt:if name="object_type" eq="entry">add_</mt:if>category_id<mt:if name="object_type" eq="entry">_[#= item.id #]</mt:if>" class="add-category-checkbox" <mt:if name="category_is_selected">checked="checked"</mt:if> /> [#|h item.label #]
上記を次のように変更します。
<input type="<mt:if name="object_type" like="(page|entry)">radio<mt:else>checkbox</mt:if>" name="<mt:if name="object_type" eq="entry">add_</mt:if>category_id" class="add-category-checkbox" <mt:if name="category_is_selected">checked="checked"</mt:if> /> [#|h item.label #]
方法2.カテゴリが2つ以上選択された場合に、警告メッセージを表示します。(※メッセージを無視して選択する事は可能です。)
・「tmpl/cms/edit_entry.tmpl」
229行目に次の記述があります。
[# if ( !items.length ) { #] <span class="disabled">[#|h trans("None selected") #]</span> [#* return #] [# } #]
この次に処理を追加して次のように変更します。
[# if ( !items.length ) { #] <span class="disabled">[#|h trans("None selected") #]</span> [#* return #] [# } #] // ここに次の4行を追加します。 [# if ( items.length > 1 ) { alert("カテゴリが二つ以上選択されました。\n一つだけ選択してください。"); #] <span class="disabled">[#|h trans("Two or more were selected") #]</span> [#* return #] [# } #]
さらに「mt-static/mt_ja.js」の適当な場所に次の1行を追加します。
Lexicon['Two or more were selected'] = '二つ以上選択されました。一つだけ選択してください';
これでカテゴリが2つ以上選択された場合に警告メッセージを表示して、カテゴリの選択状態を表示する箇所にもメッセージを表示します。
方法2はメッセージを表示するだけですので、実際には2つ以上のカテゴリを選択する事ができてしまいますが、どちらでも好きな方法を試してみてください。
回答ありがとうございます。
方法2の解説に「方法2はメッセージを表示するだけですので、実際には2つ以上のカテゴリを選択する事ができてしまいます」とありましたので、出来れば1つしか選択出来ないスタイルを希望しますので、方法1を試してみました。
カテゴリ部分の表示がうまくラジオボタンになり、成功したと思ったのですが、実質複数のチェックが可能のようです。
radioの場合、同じnameを付けてないと、「1つしか選べない」という状態を作れませんが、それがうまくいっていないのでしょうか?
修正ポイントあれば、再度ご教授お願いします。