カスタムフィールドの値を一覧画面に表示するプラグイン(その2)

カスタムフィールドの値を一覧画面に表示するプラグインでは、ブログ記事等をカスタムフィールドの値で並べ替えることもできます。
ただ、デフォルトの状態では並べ替えが低速です。
条件付きですが、別プラグインを組み合わせて高速化する方法も用意していますので、その手順を解説します。

2011年6月13日 12時0分

この記事で紹介する別プラグインについて、小粋空間さんに同名のプラグインがあるというご指摘があったので、プラグイン名を変更しました。

1.高速化の条件

デフォルトの状態では、並べ替えを行う際には、すべてのオブジェクト(ブログ記事等)をメモリに読み込んでから、Perlのプログラムによって並べ替えるようになっています。
例えば、ブログ記事の一覧の画面で並べ替えを行う場合だと、対象のブログのすべてのブログ記事をいったん読み込んで、Perlのプログラムで並べ替えを行います。
そのため、オブジェクトが増えるにつれて、並べ替えに時間がかかるようになります。

一方、条件を満たせば、Movable TypeのORM(Object Relational Mapping)の中で、SQLを使って並べ替えを行うことができるようになり、処理が高速になります。

高速化できる条件は、「一覧画面に表示されるすべてのオブジェクトのカスタムフィールドに、何らかの値(空文字列も含む)が定義されていること」です。
例えば、ブログ記事を高速に並べ替えるためには、そのブログのすべてのブログ記事で、カスタムフィールドに値が定義されていることが必要です。

ブログ記事がすでにいくつかある状態で、後からカスタムフィールドを追加すると、既存のブログ記事ではそのカスタムフィールドは未定義の状態になります。
このような状態では、ORMの仕様上の問題で、高速並べ替えを行うことができません。

2.未定義のカスタムフィールドの初期化

未定義のカスタムフィールドを一括して初期化するために、「DefaultCFValueSetter」というプラグインをご用意しました。
高速並べ替えを行いたい個々のブログ/ウェブサイトについて、そのブログ/ウェブサイトに属するすべてのオブジェクトで、カスタムフィールドの初期化を行ってください。

2-1.プラグイン利用上の注意

このプラグインでは、すべてのオブジェクトのカスタムフィールドに初期値を設定する処理を行います。
データベースに対して大幅な書き換えを伴う動作ですので、データベースのバックアップを必ず取っておいてください。
万が一、プラグインの利用に伴ってデータベースにトラブルが生じたとしても、こちらでは責任は負えません。

2-2.プラグインのインストール

プラグインは以下からダウンロードします。

DefaultCFValueSetter_1_00.zip

ダウンロードしたZipファイルを解凍すると、「plugins」というフォルダができます。
このフォルダを、Movable Typeのインストール先のディレクトリにアップロードします。

2-3.カスタムフィールドの初期化

このプラグインをインストールすると、「カスタムフィールド」のメニューに「初期値設定」という項目が追加されます。

このメニューを選ぶと、まず「オブジェクトの選択」というページが表示されます。
初期化したいオブジェクトをドロップダウンで選択して、「初期値の設定」のボタンをクリックします。

初期化対象のオブジェクトを選ぶ

すると、個々のカスタムフィールドの初期値を入力するページが表示されます。
カスタムフィールド側で既定値が定義されている場合は、そのカスタムフィールドの入力欄には、既定値があらかじめ入力された状態になります。
一方、既定値が定義されていない場合は、そのカスタムフィールドの入力欄は空欄になります。
初期値を適宜入力して、ページ末尾の「初期化開始」ボタンをクリックすると、初期化が始まります。

カスタムフィールドの初期値の設定

2-4.システムレベルのカスタムフィールドの初期化

システムメニューで「カスタムフィールド」→「初期値設定」メニューを選ぶと、システムレベルのカスタムフィールドを初期化することもできます。

3.高速並べ替えを有効化する

すべてのオブジェクトでカスタムフィールドの初期値を設定し終わったら、そのブログ/ウェブサイトで、高速並べ替えを有効化します。
手順は以下の通りです。

  • ブログ/ウェブサイトの管理画面で「ツール」→「プラグイン」メニューを選び、プラグイン一覧のページを開きます。
  • CustomFieldsListingプラグインの設定のタブを開きます。
  • 「高速並べ替え」のチェックをオンにし、「変更を保存」ボタンをクリックします。

高速並べ替えを有効化する

4.ウェブサイト/システムのオブジェクト一覧画面での並べ替え高速化

ウェブサイトやシステムのオブジェクト一覧画面では、ウェブサイト/システム配下の多数のブログ/ウェブサイトのオブジェクトが混在して表示されます。
この状況では、「一覧画面に表示されるすべてのオブジェクトのカスタムフィールドに、何らかの値(空文字列も含む)が定義されている」という条件を満たすことが困難です。
この条件を満たせるのは、システムレベルのカスタムフィールドを使っていて、かつすべてのオブジェクトに何らかの値が定義されている時だけです。
したがって、ウェブサイト/システムのオブジェクト一覧画面では、システムレベルのカスタムフィールドのみ、高速並べ替えの対象になります。

なお、システムレベルのオブジェクト一覧画面で高速並べ替えを有効にするには、システムメニューのプラグイン一覧のページで、CustomFieldsListingプラグインの「高速並べ替え」のチェックをオンにします。