ExtraFields Plugin ReadMe.htmlの邦訳

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です。

ExtraFields Plugin/Hack for Movable Type


EXTRAFIELDSについて

多くのMovable Type ユーザーは、各エントリーに登録できる項目(fields)の数を追加したいと願っています。将来的には、公式にその様な機能が追加されるかもしれません。このプラグインは、そのような項目を簡単に追加できるMovable Typeが出てくるまでの、間に合わせの手段です。これは、追加情報を保存する1つ以上のMySQLテーブルを作成して、1つのweblog上に独自の項目を定義することを可能にします(このプラグインはMySQLで作成しているMTのみ対応しています)

一部のユーザーは、MT内部の項目の定義を変更して、独自の項目を追加しています。こちらのページこのスレッドこのスレッドをご覧下さい。しかし、この方法にはいくつか問題が生じます。

  • MT独自のデータ構造を修正しなければなりません。これは、アップデートするときに問題の生じる可能性があります。ExtraFieldsはデータを保存するテーブルを追加し、この問題を避けています。(MT独自のテーブルを変更しない)
  • MTのスクリプトソースを書き換えなければなりません。これも、アップデートするときに問題の生じる可能性があります。Extrafieldsも同じ問題を抱えていますが、私(作者)が、できる限りスクリプトを細かく簡単に更新し、新しいバージョンのMTが出た時にこのドキュメントも更新する様に努力します。
  • どの様な変更をしても、1つのMTで作成されている全てのweblogに反映されてしまいます。ExtraFieldsでは、各weblogに異なる定義をした項目を定めることができます。

もしExtraFieldsを使うにあたって迷っているならば、他の選択肢としてBrad ChoateのKey Values pluginがあります。このプラグインは、既存のMTの項目(例えばExcerpt(概要)、もし実際に概要として使っていなければ)いずれにもkeysとvaluesを保存することができます。テンプレート上で簡単に特定のKeyの値を利用することができます。

要約すると、ExtraFieldsは決して完全な解決法ではありません(注意点をよく読んでください。)。また、導入に数段階必要です。しかし、もし独自の項目が本当に必要なら、ExtraFieldsは有効でしょう。

必要条件

  • Movable Type 3.14 または 2.661. 実際には、ExtraFieldsは2.21より新しければ、どのバージョンでも動作するはずです。しかし、下記にある様に、CMS.pmedit_entry.tmplでパッチを当てる部分が、3.14と(ついでに言えば)2.661での説明となっています。
  • SQL database? ExtraFieldsは、Movable Typeのデータを格納するデータベースがMySQLまたはSQLベースの場合のみに対応していました。しかし、Berkely DBでも動作すると報告がありました。-下部のインストール手順のステップ2を省略するだけです。しかし私(作者)は自分では試していませんが。
  • Direct database access. 独自の項目を格納するSQLデータベースのテーブルを作成しなければなりません。もし、お使いのサーバーでphpMyAdminの様な操作環境が利用できるならば、それで可能です。しかし、シェルでアクセス可能であることと、コマンドからにデータベースにアクセスする知識が必要です。また、SQLのテーブルをどのように定義するか基本的な知識も必要でしょう。

動作

ExtraFieldsで行われることは簡単です: 項目を追加したい各weblogに、entry IDのカラムをprymary keyとしてテーブルを作成し、必要な追加項目用カラムを作成します。そのweblogに、追加項目のデータを加えたエントリーを作成したときに、追加したテーブルに同じentry IDの列が追加されます。(注:作成したテーブルを複数のweblogに関連付けることができます。この点は下記のインストールにてnumbingな詳細が記されています。)

追加項目のデータを書き込まなかったエントリーを作成・保存した場合、その追加したテーブルに列は追加されませんので注意してください。

エントリーを削除したとき、対応する行も削除されます。

注意点

ExtraFieldsをインストールする前に、以下に目を通してください。もしいずれかの点で赤信号が灯れば、ExtraFieldsは利用すべきではないかもしれません。

  • ExtraFieldsを利用するには、Movable Typeのソースに変更を加えなければなりません。―ライブラリ中のモジュール1つと、CMSテンプレートの1つです。書き換えることに不安が無いか、よく考えてください。また、MTの新しいバージョンをインストールするときに、それらのファイルが更新された場合、再度パッチを当てなければなりません。(MTの最新バージョンに対応させる努力はします。)
  • 現時点で、追加項目で保存されたデータは、MTの閲覧者用(?public)の検索では検索できません。
  • プレビュー(確認)では正しく動作しません。 この点に注意してください。例えば、追加項目にデータが含まれるエントリーを書いているとします。そして プレビュー(確認)をクリックします。もしその確認ページでSave(保存)をクリックしたならば、問題はありません。しかし、もしRe-Edit(変更)をクリックすると、追加項目の変更は保存されません。プレビュー(確認)ページをどれほど拡張して利用するかにもよりますが、難点のひとつになるかもしれません。
  • 追加項目は、データをエクスポートしたときに一緒にエクスポートされません。もし近い将来、サーバーの変更やデータベースをリストアする予定があるならば、ExtraFieldsの利用を2度考えなければなりません。他のMTデータベースと追加したテーブルを分けてエキスポート・インポートすることは難しくないかもしれませんが、相当のSQLに関する知識が必要になるでしょう。
  • 最終的にMovable Typeに追加項目の機能が採用されたとき、おそらくExtraFieldsとは異なる方法でデータを保存することになるでしょう。よって、変換作業が必要になるでしょう。
  • ExtraFieldsは現時点の形式では強健なものではありません。例えば、追加項目にデータを加えるときに検証しませんし、数的カラムに特別な処理をしている訳ではありません。 下部の将来的な計画を参照し、他の欠けている点と、なぜそのような状態にあるか確認してください。
  • もしMovable TypeのソースコードやSQL,プラグインを書き換える自信、また、Movable Typeの作者によるサポートのないhacked-togetherな方法を使ってデータを保存することに自信がなければ、ExtraFieldsは使わないで下さい。

Other than that, Mrs. Lincoln, you'll love the play.

Future Plans

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.

  • Patch Search.pm so custom fields will be searched when the user searches for text in entries.
  • Fix the Preview/Re-Edit problem.
  • Create an interface within MT's CMS for editing the custom field configuration.
  • Add the ability to specify a maximum length for a field, make a field required, specify that a field should be numeric, and other validation.
  • Add the option to define a choice list for a field.
  • Improve the interfaces to the ExtraFields modules, making them more object-oriented-esque-ish. The reason it's done the way it's done is to minimize the amount of code that needs to be hacked into CMS.pm, but there's probably a better way.

Contact

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.


インストール

1) ExtraFields関連ファイルのインストール

ExtraFieldsをダウンロードして含まれた3つのファイルを、MTのインストールディレクトリ内の正しい場所にアップロードしなければなりません。

  • ExtraFields.plpluginsディレクトリにアップロードする。もしpluginsディレクトリが無ければ、MTのメインディレクトリに作成する。
  • ExtraFields.pmextlibディレクトリにアップロードする。
  • EFConfig.txtextlibディレクトリにアップロードする。この構成(Configration)ファイルは、下記のstep 3で変更が必要なconfig情報のサンプルです。

EFDebug.plは、インストールの手順を終えた後、トラブルが生じたときにpluginsディレクトリにアップロードしてください。それ以外は必要ありません。(下記のトラブルシューティングを参照)

2) テーブルの定義を決める

項目を追加したい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にログインしてテーブルを作成してください。

3) Configuration情報の記述

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

4) CMS.pmの変更

追加項目の定義が完了しました。次はエントリーを書き込むページにその項目が表示されるようにMTのファイルにコードを書き加えます。

ます、MTディレクトリ内のlibディレクトリにあるPerlモジュールを変更します。何か問題が生じたときにMTオリジナルのものに復元させるため、必ずバックアップを保存してください。

このファイルには6つの追記を行います。もしUNIXを使っており、使い方がわかる場合は、ExtraFieldsをダウンロードした際に含まれていたパッチを当てるだけです。2種類のパッチがあります。2.661を使っていればef_diff26.txtを、3.14ならばef_diff3.txtを充ててください。

もし使い方を知らないか、変更をマニュアル通りに行うならば、以下の様にCMS.pmを書き換えてください。(以下では、行数が変わらない様に、ファイルの下部から順になっています)

  • 以下のコードの行を探してください。オリジナルでは3248行目にあります。(2.661では2169行目):
        my $cols = MT::Entry->column_names;
    この行の後に、次の行を挿入:
        push(@$cols, ef_column_names($blog_id));
  • 以下のコードの行を探してください。オリジナルでは2687行目にあります。(2.661では1734行目):
        ## If the saved status is RELEASE, or if the *previous* status was
    この行の前に、次の行を挿入:
        ef_save($obj->blog_id, $obj->id, $q);
  • 以下のコードの行を探してください。オリジナルでは1747行目にあります。(2.661では1260行目):
                $obj->remove;
    この行の後に、次の行を挿入:
                ef_delete($q->param('blog_id'), $id) if ($type eq 'entry');
  • 以下のコードの行を探してください。オリジナルでは1009-1010行目にあります。(2.661では729-730行目):
                    $param{disp_prefs_bar_colspan} = $param{new_object} ? 1 : 2;
                }
    これらの行の後に、次の行を挿入:
                ef_prepare_html($blog_id, \%param);
  • 以下のコードの行を探してください。オリジナルでは695-696行目にあります。(2.661では499-500行目):
                        $param{previous_entry_id} = $prev->id;
                    }
    これらの行の後に、次の行を挿入:
                    ef_load($blog_id, $id);
  • 以下のコードの行を探してください。オリジナルでは17行目にあります。(2.661では14行目):
    @MT::App::CMS::ISA = qw( MT::App );
    この行の後に、次の行を挿入:
    use ExtraFields;

以上で完了です。

5) edit_entry.tmplの変更

これはもっと簡単です。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>

6) 動作確認

以上の手順を終えたら、追加項目にデータを加えてみましょう。正しく動作しているか確認するために以下のテストをしてください。

  • MTにログイン
  • 追加項目を加えたweblogに新しいエントリーを作成する。
  • エントリーフォームを確認してください。既存のMTの項目に加えて、今追加した項目があるはずです。
  • それぞれの追加項目に適当なテキストを入れる。
  • エントリーを保存する。

エントリーを保存した後にエントリーフォームをリロードするとき、再度追加項目が表示されるか確認してください。もし表示されれば、ExtraFieldsは正しく動作しています。エントリーに追加項目を入れ始めてください。他にすることは、ExtraFields プラグインタグを使って、各ページに追加した項目が表示させるだけです。

7) トラブルシューティング

もし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>

MTExtraFields

現在のエントリーの追加項目のデータを読み込むコンテナタグ。他のExtraFieldsタグはこのタグの内部でなければなりません。

MTIfExtraFields

2つの条件下(?どちらか?)でその内容を表示するコンテナタグ。A) configurationファイルで、そのweblogの追加項目を定義した場合。B) 現在のエントリーの追加項目に1つ以上のデータがあるとき。以上でなければ、何も表示されません。

MTIfExtraField

現在のエントリーに、特定の追加項目にデータがあるとき、その内容を表示させるコンテナタグ。

このタグは以下のアトリビュートが使えます。

  • field="fieldname" (looping以外で必須)
    データを読み込む追加項目の名前。頭にdatasource_を付けても付けなくても構わない。

MTExtraFieldValue

特定の追加項目の値を表示するタグ。−つまり、現在のエントリーのその項目に入れたデータは何であっても表示させる。

このタグは以下のアトリビュートが使えます。

  • field="fieldname" (looping以外で必須)
    表示される追加項目の名前。頭にdatasource_を付けても付けなくても構わない。

MTExtraFieldLabel

configurationファイルで定義した追加項目の名前(label)を表示する。

このタグは以下のアトリビュートが使えます。

  • field="fieldname" (looping以外で必須)
    表示される追加項目の名前。頭にdatasource_を付けても付けなくても構わない。

MTExtraFieldsLoop

現在のweblogに定義された全ての追加項目の、各項目の内容を一度ずつ表示させるコンテナタグ。configurationファイルで定義された順にその項目を繰り返す。繰り返す中で、MTIfExtraFieldMTExtraFieldValueMTExtraFieldLabel現在繰り返している項目を参照する。

以下の例は、レストランの例の追加項目のデータを表示させる。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>

VERSION HISTORY

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

  • Updated form field HTML for entry edit screen to use CSS formatting in MT 3.
  • Plugin now registers itself with MT 3 interface.
  • Updated documentation for MT 3.
  • Added package declaration and $VERSION variable.
  • Conditional container tags are now declared as conditional tags, so they should work with MTElse.

3/9/04 - version 0.51

  • All container tags now pass conditions along when building contents, so they'll work outside conditional tags within MTEntries, etc. (mirra)
    NOTE: In order to install this update, all you need to do is replace the ExtraFields.pl file.

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


© 2002 Kevin Shay (stylesheet shamelessly borrowed from the Movable Type documentation)

Created On:2005/3/07 18:27