&pgid();

#contents

MT(MovableType)の[[RightFieldsプラグイン>http://www.staggernation.com/mtplugins/RightFields/]]で拡張(追加)した項目の読み出しを行いたくて方法を調べてみました(ググってみたのですが、関連情報もAPIマニュアルもみつけられなかったので&sad;RightFieldsプラグインのコードを直接調べて見つけた方法です。オフィシャルな方法ではないかもしれません)

以下では、ブログ内の各エントリーに対して拡張したデータ項目を読み出して配列にする方法を記載します。

#blikimore

まず、最初にライブラリパスの指定とMT、RightFieldsクラスをロードします。

 use lib qw(lib plugins/RightFields/lib);
 use MT;
 use RightFields qw( load_plugindata save_plugindata config_key fld_name
        mt_fields mt_field_order new_obj );

MTクラスはエントリー情報を読み出すために、RightFiedldsクラスは読み出したエントリー情報が持つ拡張データ項目のデータを読み出すAPIを利用するためにロードしてします。

次に、MTクラスを利用してMTのエントリー情報を配列に取得します。

 my $mt = MT->new or "cannot load mt";
 my @entries = MT::Entry->load(
         { blog_id => 1 },
         {
                 sort => 'created_on',
                 direction => 'descend',
         }
 );

MTクラスのオブジェクトを作成して、MT::*クラスのクラスメソッドを使えるようにします。(MTクラスはnewする時にmt-config.cgiを読み込んで初期設定を行い、移行、MT API(MT::*クラス) を利用できるようにします。詳しくは[[Movable Type オブジェクト・リファレンス>http://www.sixapart.jp/movabletype/manual/object_reference/]]を参照のこと)~
これでMT::Entryのloadメソッドが使えるようになります。
MT::Entry->load()はパラメータに一致するエントリー情報(=MT::Entryオブジェクト)を配列で返します。上のコードでは、blog_id = 1のブログのエントリー情報を作成日(created_on)の逆順(descend)で取り出すパラメータを指定しています。

次に、RightFieldsクラスのload_plugindataメソッドを使って拡張データ項目に関するコンフィギュレーション情報を取得します。

 my $cfg = load_plugindata(config_key(1, 'extra'));

load_plugindataメソッドにはRightFieldsクラスのconfig_keyメソッドの返り値をkey文字列として与えます。config_keyメソッドにはブログID(=この例では1)と拡張データ項目であることを示すextraを指定します。

最後に、各エントリー情報に対して、RightFieldsの拡張データオブジェクトを作成して、読み出し、配列作成を行います。

 my @result;
 foreach my $entry (@entries) {
         my $rf_obj = new_obj($cfg, $entry->id);
         # 拡張データ項目のフィールド名がnameである場合
         my $name = $rf_obj->name();
         push(@result, $name);
 }

foreach文で各エントリー情報(MT::Entryオブジェクト)単位にループさせています。~
ループ内ではRightFieldsクラスのnew_objメソッドに$cfgとエントリーIDを与えて、該当するエントリーの拡張データを保持する拡張データオブジェクトを作成します。エントリーIDはMT::Entryオブジェクトのgetterを使って$entry->idで取得できます。~

上のコードは拡張データ項目のフィールド名(Extra Fieldsに指定したfield名)をnameとした場合の例です。拡張データオブジェクトに対して取得したい拡張データ項目のフィールド名のメソッドを呼べば、その拡張データ項目の情報を取得してくれる仕組みです。hogeという名前の拡張フィールドがあり、そのデータを取得した場合は上のコードで

 my $hoge = $rf_obj->hoge();

とすれば$hogeにデータを取得できます。

RightFieldsプラグインでは拡張データの保存方法をCustom SQL database table、PluginDataの2種類から選べますが、new_objメソッドは保存方法に関わらず拡張データを読み出せる拡張データオブジェクトを適切に返してくれます。詳細に立ち入るとnew_objメソッドはCustom SQL database tableの時にはRightFieldsObject、PluginDataの時はRightFieldsPseudoを返します。RightFieldsObject、RightFieldsPseudoともにMT::Objectをスーパークラスとして継承していて、インタフェースは統一されているので、APIを利用する側はどのオブジェクトが返されたかを意識しないで扱うことができます。また、意識したコードは推奨されないでしょう。

#blikifooter(進地)

tag: [[MT>tag/MT]], [[MTPlugin>tag/MTPlugin]], [[RightFields>tag/RightFields]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

アークウェブのサービスやソリューションはこちら