Last Updated:2006/3/05 18:07
以前から気になっていた、各エントリーで保存するデータ(既存ではエントリーの内容(EntryBody)、追記(extend)、概要(excerpt)等)の数を
追加するプラグイン、ExtraFieldsのドキュメントを邦訳してみました。
まだ適当な部分もありますが、自分の訳文を見ながら無事インストールできたので、大きく間違ってはいないかなぁ、と思います。
ちなみに辞書は10年前の小学館のPocketProgressiveEnglishDictionaryを使いました。
ただ、この邦訳はベースが本国verなので、
CMS.pmの書き換えなどは、適宜、日本語verで確認しながら行ってください。
また、遊便局による追記は(追記内容)と記しています。(遊modeのCSSをお使いだと薄い灰色で表示されます)
プラグインタグは、あまり使い込んでいないので、訳は自信ありません。。。
遊便局による意訳なので、判りにくい部分もあるかと思いますが、
その内導入記をUP予定です。
このドキュメントの元はhttp://www.staggernation.com/mtplugins/ExtraFieldsReadMe.htmlです。
多くのMovable Type ユーザーは、各エントリーに登録できる項目(fields)の数を追加したいと願っています。将来的には、公式にその様な機能が追加されるかもしれません。このプラグインは、そのような項目を簡単に追加できるMovable Typeが出てくるまでの、間に合わせの手段です。これは、追加情報を保存する1つ以上のMySQLテーブルを作成して、1つのweblog上に独自の項目を定義することを可能にします(このプラグインはMySQLで作成しているMTのみ対応しています)
一部のユーザーは、MT内部の項目の定義を変更して、独自の項目を追加しています。こちらのページやこのスレッド、このスレッドをご覧下さい。しかし、この方法にはいくつか問題が生じます。
もしExtraFieldsを使うにあたって迷っているならば、他の選択肢としてBrad ChoateのKey Values pluginがあります。このプラグインは、既存のMTの項目(例えばExcerpt(概要)、もし実際に概要として使っていなければ)いずれにもkeysとvaluesを保存することができます。テンプレート上で簡単に特定のKeyの値を利用することができます。
要約すると、ExtraFieldsは決して完全な解決法ではありません(注意点をよく読んでください。)。また、導入に数段階必要です。しかし、もし独自の項目が本当に必要なら、ExtraFieldsは有効でしょう。
CMS.pm
とedit_entry.tmpl
でパッチを当てる部分が、3.14と(ついでに言えば)2.661での説明となっています。ExtraFieldsで行われることは簡単です: 項目を追加したい各weblogに、entry IDのカラムをprymary keyとしてテーブルを作成し、必要な追加項目用カラムを作成します。そのweblogに、追加項目のデータを加えたエントリーを作成したときに、追加したテーブルに同じentry IDの列が追加されます。(注:作成したテーブルを複数のweblogに関連付けることができます。この点は下記のインストールにてnumbingな詳細が記されています。)
追加項目のデータを書き込まなかったエントリーを作成・保存した場合、その追加したテーブルに列は追加されませんので注意してください。
エントリーを削除したとき、対応する行も削除されます。
ExtraFieldsをインストールする前に、以下に目を通してください。もしいずれかの点で赤信号が灯れば、ExtraFieldsは利用すべきではないかもしれません。
プレビュー(確認)
をクリックします。もしその確認ページでSave(保存)
をクリックしたならば、問題はありません。しかし、もしRe-Edit(変更)
をクリックすると、追加項目の変更は保存されません。プレビュー(確認)ページをどれほど拡張して利用するかにもよりますが、難点のひとつになるかもしれません。Other than that, Mrs. Lincoln, you'll love the play.
As emphasized above, ExtraFields is a stopgap measure, designed to tide us over until we have a version of MT or MT Pro that does custom fields natively. Meanwhile, adding more features would most likely add more steps to the already somewhat cumbersome installation process. For these reasons, it's not likely that ExtraFields will be improved much in the future. But to the extent that it does get updated (by me or by anyone else who'd like to work on it), here are some obvious enhancements that would be nice to have.
Search.pm
so custom fields will be searched when the user searches for text in entries.CMS.pm
, but there's probably a better way.Please address questions, comments, bug reports, feature requests, interesting usage examples, etc., to mtplugins [AT] staggernation [DOT] com
, or post them in the Plugin Development area of the Movable Type Support Forum.
ExtraFieldsをダウンロードして含まれた3つのファイルを、MTのインストールディレクトリ内の正しい場所にアップロードしなければなりません。
ExtraFields.pl
をplugins
ディレクトリにアップロードする。もしplugins
ディレクトリが無ければ、MTのメインディレクトリに作成する。ExtraFields.pm
をextlib
ディレクトリにアップロードする。EFConfig.txt
をextlib
ディレクトリにアップロードする。この構成(Configration)ファイルは、下記のstep 3で変更が必要なconfig情報のサンプルです。EFDebug.plは、インストールの手順を終えた後、トラブルが生じたときにpluginsディレクトリにアップロードしてください。それ以外は必要ありません。(下記のトラブルシューティングを参照)
項目を追加したいMTの各weblogに対して、MySQLにテーブルを加える必要があります。(実際は、同じ追加したテーブルを複数のweblogで利用することができます。詳細は下部のstep 3を参照のこと。)
テーブルと、そのテーブルのカラムの名前は重要です。初めに、端的に保存するデータを示す特有な短い名前を選んでください。ここでdatasource
とします。その場合:
mt_datasource
datasource_id
という名の整数(integer)のカラムを作成し、index化させるdatasource_
と付けるMTの既存のテーブルと衝突するので、以下の名前は使えません。mt_author
, mt_blog
, mt_category
, mt_comment
, mt_entry
, mt_ipbanlist
, mt_log
, mt_notification
, mt_permission
, mt_placement
, mt_template
, mt_templatemap
, mt_trackback
, mt_tbping
.
ひとつの例として、レストランのレビューのweblogを運営しているとします。各レストランの場所(location)・料理(cuisine)・平均価格(average meal price)・数字で表した評価(a numeric rating)のデータを保存したいとします。テーブルの定義は以下の様になります:
CREATE TABLE mt_restaurant ( restaurant_id INTEGER NOT NULL, restaurant_location VARCHAR(100), restaurant_cuisine VARCHAR(40), restaurant_price VARCHAR(20), restaurant_rating TINYINT, INDEX(restaurant_id) );
テーブルの定義を決定したらMySQLにログインしてテーブルを作成してください。
ExtraFieldsは、extlib
ディレクトリ内のEFConfig.txt
、configurationファイルによって、weblogと追加したテーブルを関連付けます。あるひとつのweblogの追加項目のセットアップのフォーマットは以下の様になります:
blog_id:datasource colname1:Column Label 1:lines colname2:Column Label 2:lines
weblogのblog_id
を確認するために、Movable Typeにログインし、そのweblogに関連するリンク(新しいエントリーを投稿・ウェブログの設定 etc.)をどれでも構わないのでクリックしてください。そのリンクのURLに目的のIDが&blog_id=7
の様に含まれます。
"datasource
"は上部のstep 2で選んだものです。―頭の"mt_
"を省いたテーブルの名前です。
各"colname
"は、追加したテーブルの、頭の"datasource_
"を省いた各カラムの名前です。注:このリストにはid
を含むカラムは加えないで下さい。
各"Column Label
"は各項目を記述する名前(Label)となります。この名前(Label)がMTでエントリーを書くときに表示されます。また、ExtraFieldsのプラグインタグを利用するとテンプレートにも並ぶことになります。
"lines
"の値はこの項目に書き込む部分の大きさに影響します。もし"lines
"が1ならば、type="text"
のinput要素が表示されます。"lines
"が1より大きければ、その値分の行のtextarea
要素が表示されます。
レストランの例に戻りましょう。もしレストランのレビューを書いているweblogのblog_idが7ならば、configファイルは下記のようになります:
7:restaurant location:Location:1 cuisine:Type of Cuisine:1 price:Average Meal Price:1 rating:My Rating:1
複数のweblogの境界は5つのハイフン(-----
)の行で表されます。
もし必要ならば、1つの追加したテーブルで複数のweblogの異なる種類の追加項目に対応させることも可能です。以下の様な汎用的なテーブルを作成したとします:
CREATE TABLE mt_extra ( extra_id INTEGER NOT NULL, extra_col1 VARCHAR(255), extra_col2 VARCHAR(255), extra_col3 VARCHAR(255), extra_col4 VARCHAR(255), extra_col5 VARCHAR(255), INDEX(extra_id) );
次にconfigファイルで、それぞれのweblogに異なる名前(label)を入れるだけです。例えば、あるweblog(ID=3)では書籍のレビューを、もう1つのweblog(ID=6)では映画のレビューを保存したい場合は以下の様になります。
3:extra col1:Amazon URL:1 col2:Author:1 col3:Publisher:1 col4:Year:1 col5:Pages:1 ----- 6:extra col1:IMDb URL:1 col2:Director:1 col3:Releasing Company:1 col4:Year:1 col5:Length:1
追加項目の定義が完了しました。次はエントリーを書き込むページにその項目が表示されるようにMTのファイルにコードを書き加えます。
ます、MTディレクトリ内のlib
ディレクトリにあるPerlモジュールを変更します。何か問題が生じたときにMTオリジナルのものに復元させるため、必ずバックアップを保存してください。
このファイルには6つの追記を行います。もしUNIXを使っており、使い方がわかる場合は、ExtraFieldsをダウンロードした際に含まれていたパッチを当てるだけです。2種類のパッチがあります。2.661を使っていればef_diff26.txt
を、3.14ならばef_diff3.txt
を充ててください。
もし使い方を知らないか、変更をマニュアル通りに行うならば、以下の様にCMS.pm
を書き換えてください。(以下では、行数が変わらない様に、ファイルの下部から順になっています)
my $cols = MT::Entry->column_names;この行の後に、次の行を挿入:
push(@$cols, ef_column_names($blog_id));
## If the saved status is RELEASE, or if the *previous* status wasこの行の前に、次の行を挿入:
ef_save($obj->blog_id, $obj->id, $q);
$obj->remove;この行の後に、次の行を挿入:
ef_delete($q->param('blog_id'), $id) if ($type eq 'entry');
$param{disp_prefs_bar_colspan} = $param{new_object} ? 1 : 2; }これらの行の後に、次の行を挿入:
ef_prepare_html($blog_id, \%param);
$param{previous_entry_id} = $prev->id; }これらの行の後に、次の行を挿入:
ef_load($blog_id, $id);
@MT::App::CMS::ISA = qw( MT::App );この行の後に、次の行を挿入:
use ExtraFields;
以上で完了です。
これはもっと簡単です。MTディレクトリ内のtmpl
にあるMovable TypeのCMSに使われているページのテンプレートのひとつに1ヵ所加えるだけです。変更するファイルはtmpl/cms/edit_entry.tmpl
。何か問題が生じたときにMTオリジナルのものに復元させるため、必ずバックアップを保存してください。
MT 3.14: 以下のコードの行を探してください。オリジナルでは249-251行目にあります:
</div> <TMPL_IF NAME=DISP_PREFS_BASIC>
この行の前に、次の行を追加:
<TMPL_VAR NAME=EF_FIELDS>
MT 2.661: 以下のコードの行を探してください。オリジナルでは427-430行目にあります:
</tr> </TMPL_IF> </table>
</TMPL_IF>
の行と、</table>
の行の間に、次の行を追加:
<TMPL_VAR NAME=EF_FIELDS>
以上の手順を終えたら、追加項目にデータを加えてみましょう。正しく動作しているか確認するために以下のテストをしてください。
エントリーを保存した後にエントリーフォームをリロードするとき、再度追加項目が表示されるか確認してください。もし表示されれば、ExtraFieldsは正しく動作しています。エントリーに追加項目を入れ始めてください。他にすることは、ExtraFields プラグインタグを使って、各ページに追加した項目が表示させるだけです。
もしExtraFieldsがうまく動作しなかった場合は、EFDebug.plプラグインをインストールしてみましょう。このファイルは、ExtraFieldsモジュールとconfigファイルを読み込み、各weblogのサンプルの列を作成・削除しようと試みます。結果が表示されるので、動作しない原因を確かめるのに役立つでしょう。あるテンプレート(ユーザーに表示されないテンプレートは避けるべきです)に以下のタグを加え、リビルドするだけです:
<$MTExtraFieldsDebug$>
追加項目のデータをエントリーに表示させるために、これらのタグをテンプレートに入れます。各エントリーのデータを表示させる他のタグと同じく、コンテナタグMTEntries
の内部でなければなりません。
以下の例ではインストールのレストランの例の追加項目が表示されます。
<MTEntries> <p><$MTEntryTitle$><br> <$MTEntryBody$> <MTExtraFields> <MTIfExtraFields> <p>ADDITIONAL INFORMATION:<br> <MTIfExtraField field="location"> Location: <$MTExtraFieldValue field="location"><br> </MTIfExtraField> <MTIfExtraField field="cuisine"> Type of Cuisine: <$MTExtraFieldValue field="cuisine"><br> </MTIfExtraField> <MTIfExtraField field="price"> Average Meal Price: <$MTExtraFieldValue field="price"><br> </MTIfExtraField> <MTIfExtraField field="rating"> My Rating: <$MTExtraFieldValue field="rating"> of 4 stars<br> </MTIfExtraField> </MTIfExtraFields> </MTExtraFields> </MTEntries>
現在のエントリーの追加項目のデータを読み込むコンテナタグ。他のExtraFieldsタグはこのタグの内部でなければなりません。
2つの条件下(?どちらか?)でその内容を表示するコンテナタグ。A) configurationファイルで、そのweblogの追加項目を定義した場合。B) 現在のエントリーの追加項目に1つ以上のデータがあるとき。以上でなければ、何も表示されません。
現在のエントリーに、特定の追加項目にデータがあるとき、その内容を表示させるコンテナタグ。
このタグは以下のアトリビュートが使えます。
datasource_
を付けても付けなくても構わない。
特定の追加項目の値を表示するタグ。−つまり、現在のエントリーのその項目に入れたデータは何であっても表示させる。
このタグは以下のアトリビュートが使えます。
datasource_
を付けても付けなくても構わない。
configurationファイルで定義した追加項目の名前(label)を表示する。
このタグは以下のアトリビュートが使えます。
datasource_
を付けても付けなくても構わない。
現在のweblogに定義された全ての追加項目の、各項目の内容を一度ずつ表示させるコンテナタグ。configurationファイルで定義された順にその項目を繰り返す。繰り返す中で、MTIfExtraField、MTExtraFieldValue、MTExtraFieldLabel現在繰り返している項目を参照する。
以下の例は、レストランの例の追加項目のデータを表示させる。but without having to call in the fields individually in the template:
<MTEntries> <p><$MTEntryTitle$><br> <$MTEntryBody$> <MTExtraFields> <MTIfExtraFields> <MTExtraFieldsLoop> <p>ADDITIONAL INFORMATION:<br> <MTIfExtraField> <$MTExtraFieldLabel$>: <$MTExtraFieldValue$><br> </MTIfExtraField> </MTExtraFieldsLoop> </MTIfExtraFields> </MTExtraFields> </MTEntries>
1/12/05 - updated documentation and diff file for MT 3.14
9/21/04 - updated documentation and diff file for MT 3.11
8/23/04 - updated documentation and diff file for MT 3.01D
7/7/04 - version 0.6
3/9/04 - version 0.51
5/6/03 - added EFDebug.pl troubleshooting plugin and updated documentation
2/18/03 - updated documentation and diff files for MT 2.6
11/5/02 - version 0.5 released
Created On:2005/3/07 18:27