2013/11/26
【MovableType】MoreCustomFieldsでラジオボタンをチェックボックスに変更する
MTでサイトを運用しており、例えば以下のように
エリアを選択させるラジオボタンのリストがあったとして、
途中で複数選択にしてほしいという要望はよくありそうで、実際に起こってしまったのでその対応方法。
要は
のようにしたいというもの。
単純にラジオボタンのフィールドを削除して新しくチェックボックスグループを追加すれば済む話だが
入力済みの記事がたくさんある場合は打ち直しがとてつもなく大変なため、DBを操作して無理やりチェックボックスグループに変更する方法。
使うのは以下2つのテーブル
■mt_fieldテーブル
+——————-+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——————-+————–+——+—–+———+—————-+
| field_id | int(11) | NO | PRI | NULL | auto_increment |
| field_basename | varchar(255) | YES | MUL | NULL | |
| field_blog_id | int(11) | YES | MUL | NULL | |
| field_default | mediumtext | YES | | NULL | |
| field_description | mediumtext | YES | | NULL | |
| field_name | varchar(255) | NO | MUL | NULL | |
| field_obj_type | varchar(50) | NO | MUL | NULL | |
| field_options | mediumtext | YES | | NULL | |
| field_required | tinyint(4) | YES | | NULL | |
| field_tag | varchar(255) | NO | | NULL | |
| field_type | varchar(50) | NO | MUL | NULL | |
+——————-+————–+——+—–+———+—————-+
■mt_entry_metaテーブル
+————————–+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————————–+————–+——+—–+———+——-+
| entry_meta_entry_id | int(11) | NO | PRI | NULL | |
| entry_meta_type | varchar(75) | NO | PRI | NULL | |
| entry_meta_vchar | varchar(255) | YES | | NULL | |
| entry_meta_vchar_idx | varchar(255) | YES | | NULL | |
| entry_meta_vdatetime | datetime | YES | | NULL | |
| entry_meta_vdatetime_idx | datetime | YES | | NULL | |
| entry_meta_vinteger | int(11) | YES | | NULL | |
| entry_meta_vinteger_idx | int(11) | YES | | NULL | |
| entry_meta_vfloat | float | YES | | NULL | |
| entry_meta_vfloat_idx | float | YES | | NULL | |
| entry_meta_vblob | mediumblob | YES | | NULL | |
| entry_meta_vclob | mediumtext | YES | | NULL | |
+————————–+————–+——+—–+———+——-+
まずカスタムフィールド自体のIDを用意する。
/mt.cgi?__mode=view&_type=field&blog_id=17&id=906&saved=1&saved_added=1
例えばこのようなURLの場合、906がIDとなる。
これを使い、
1 | SELECT * FROM mt_field where field_id=906; |
などのようにSELECT文を実行して項目を確認。
field_typeがradioになっていることを確認し
1 | UPDATE mt_field SET field_type='checkbox_group' where field_id=906; |
を実行してfield_typeをcheckbox_groupに変更する。
次に該当カスタムフィールドのベースネームを確認しておき、今回の場合だと
1 | select entry_meta_entry_id,entry_meta_vchar,entry_meta_vchar_idx from mt_entry_meta where entry_meta_type like "%entry_area%"; |
などのようにして現在該当カスタムフィールドを使っている記事を確認する。
ラジオボタンのリストはカンマ区切りでentry_meta_vchar_idxカラムにデータが入っているが
チェックボックスリストはentry_meta_vcharカラムを使用するため
1 | update mt_entry_meta set entry_meta_vchar=entry_meta_vchar_idx where entry_meta_type like "%entry_area%"; |
を実行して entry_meta_vcharにentry_meta_vchar_idxを入れてします。
checkbox_groupはentry_meta_vchar_idxカラムを使用しないため、値はそのままとっておいてOK。
Author Profile
HOSHINO
ECのことを中心に書きたいと思います。 ネタが無いときはプログラムやデザインのことも書きます。
SHARE