Geeklog DataproxyプラグインのAPI

制作者 mystral-kk - geeklog AT mystral-kk DOT net
バージョン 2.0.0
公開日 2012-06-11

1. 概要

Dataproxyプラグインは、Geeklogのコンテンツ取得代行・キャッシュ管理を行うプラグインです(キャッシュ管理機能はまだ実装されていません)。通常、各プラグインが管理するデータを取得するには、それぞれSQLを組み立て、権限チェックを追加するなどの手順を踏む必要がありますが、Dataproxyプラグインを使用すれば、簡単な手順と統一されたインターフェースでコンテンツを取り出すことができます。

ご注意:Dataproxyプラグインはまだ開発初期の段階のため、下記のAPIは変更される可能性があります。

2. データソース・カテゴリ・アイテム

Dataproxyプラグインでは、コンテンツを提供する機能・プラグインをデータソースとして位置づけています。現時点でサポートされているデータソースは次の通りです。article, comments, trackbackは常に利用できます。

また、各データソースは階層的なカテゴリを持っています(staticpagesなどにはありません)。各階層にある具体的なコンテンツをアイテムと呼びます。

3. Dataproxyプラグインの利用法

Dataproxyプラグインがインストールされ、有効になっていれば、次の1行を記述するだけでDataproxyプラグインが提供するAPIを利用できます。

$dataproxy = Dataproxy::getInstance($uid);

$uidはデータを取得するユーザーのID($_USER['uid'])です。デフォルト値は1(ゲストユーザーの扱い)です。全データを取得する必要がある場合は、0を指定します。

4. Dataproxyクラス

Dataproxyクラスは実際にデータを取得するdpxyDriverクラスの生成・管理を担当します。現在有効になっているプラグインを認識し、必要なdpxyDriverクラスのインスタンスを作成します。

4.1 Dataproxyクラス - 公開メソッド(静的メソッド)

getAllSupportedDriverNames()

Dataproxyプラグインでサポートされているデータソース名の配列を返します。

getAllDriverNames()

Dataproxyプラグインで現在有効になっているデータソース名の配列を返します。サポートされているデータソースについては、上記をご覧ください。

escape($str)

文字列をHTMLとして出力できるようエスケープします。

4.2 Dataproxyクラス - 公開メンバー

以下のメンバーは、データソースオブジェクト(:dpxyDriverクラス)へのリファレンスになっています。

5. dpxyDriverクラス

dpxyDriverクラスは各コンテンツのデータ・メタデータを実際に取り出すデータソースドライバーの親クラスです。Dataproxyクラスが管理しますので、ユーザーがデータソースドライバーをインスタンス化する必要はありません。

5.1 dpxyDriverクラス - 公開メソッド

getEntryPoint()

各プラグインのユーザーに見えるトップページのURIを返します。staticpagesプラグインなどのようにトップページがない場合は、FALSEを返します。

getChildCategories($pid = FALSE, $all_langs = FALSE)

親カテゴリ$pidの下にあるすべての子カテゴリのメタデータを配列で返します。配列の要素は以下のようになっています。ルートカテゴリの場合は、$pidにFALSEを指定して呼び出します。多言語機能を有効にしたサイトで$all_langsにTRUEを指定すると、カレントユーザーの言語IDを無視します。Googleサイトマップなどを作成する場合に有効です。

getAllCategories($all_langs = FALSE)

データソースが持つすべてのカテゴリのメタデータを配列で返します。配列の要素は、getChildCategories()と同じです。多言語機能を有効にしたサイトで$all_langsにTRUEを指定すると、カレントユーザーの言語IDを無視します。Googleサイトマップなどを作成する場合に有効です。

getItems($category, $all_langs = FALSE)

親カテゴリ$pidの下にあるすべてのアイテムのメタデータを配列で返します。配列の要素は以下のようになっています。ルートカテゴリの場合は、$pidにFALSEを指定して呼び出します。多言語機能を有効にしたサイトで$all_langsにTRUEを指定すると、カレントユーザーの言語IDを無視します。Googleサイトマップなどを作成する場合に有効です。

getItemById($id, $all_langs = FALSE)

$idで指定されたIDを持つアイテム1個分のメタデータと生データを配列で返します。配列の要素は以下のようになっています。

getAllItems($all_langs = FALSE)

データソースが持つすべてのアイテムのメタデータを配列で返します。配列の要素は、getItems()と同じです。多言語機能を有効にしたサイトで$all_langsにTRUEを指定すると、カレントユーザーの言語IDを無視します。Googleサイトマップなどを作成する場合に有効です。

escape($str)

文字列をHTMLとして出力できるようエスケープします。

toUtf8($str)

$strをUTF-8に変換します。

cleanUrl($url)

与えられたURIからXSSの可能性のあるコードを取り除きます。

6. Dataproxyプラグイン利用のコーディング例

例1. 記事のメタデータを全て(カレントユーザーの言語のみ)取り出す

$dataproxy = Dataproxy::getInstance();
$item_metadata = $dataproxy->article->getAllItems();

例1. 記事のメタデータを全て(すべての言語)取り出す。

$dataproxy = Dataproxy::getInstance();
$item_metadata = $dataproxy->article->getAllItems(TRUE);

例2. 静的ページのメタデータを全て取り出す

$dataproxy = Dataproxy::getInstance();
$item_metadata = $dataproxy->staticpages->getAllItems();

例3. 'foo'カテゴリの記事のメタデータを全て取り出す

$dataproxy = Dataproxy::getInstance();
$item_metadata = $dataproxy->article->getItems('foo');

例4. 記事IDが'bar'の記事のデータを取り出す

$dataproxy = Dataproxy::getInstance();
$item = $dataproxy->article->getItem('bar');

例5. 全データソースのアイテムのメタデータを全て取り出す

$items = array();
$dataproxy = Dataproxy::getInstance();

foreach (Dataproxy::getAllDriverNames() as $driver) {
   $items[] = $dataproxy->$driver->getAllItems();
}

7. APIの変更履歴

バージョン公開日変更点
2.0.02012-06-11Singletonパターンを用いて、Dataproxyクラスを書き直しました。
1.0.32007-12-26getChildCategories(), getAllCategories(), getAllCategoriesAsLinks(), getItemById(), getItems(), getItemsAsLinks), getAllItems()で、$all_langsパラメーター(オプション)を追加しました。
1.0.02007-11-04初期バージョン