Nucleus

オブジェクト指向ブログ

2007年6月5日

ネットサーフィンしていて、ふと目に留まった言葉:『オブジェクト指向ブログ』。面白いかも。

記事に継承機能を取り入れる。例えば、継承もとの記事では、
<block id=1>ここに記事の一部</block>
<block id=2>ここに別の記事の一部</block>
<block id=3>ここに記事の残り</block>
のように書く。

これは次のように表示される。
ここに記事の一部
ここに別の記事の一部
ここに記事の残り

この記事を継承した新しい記事は、次のように書ける。
<block id=2>ここに変更した別の記事の一部</block>

これは、次のように表示されるだろう。
ここに記事の一部
ここに変更した別の記事の一部
ここに記事の残り

これは便利だろうか?それとも、面倒くさいだけなのだろうか?

少なくとも、この機能のためのプラグインを設計・製作することは面白そう。

このプラグインのテーブル構造は、例えば
CREATE TABLE IF NOT EXISTS
nucleus_plugin_itemextension (
id int(11) not null auto_increment,
itemid int(11) not null default 0,
inherit int(11) not null default 0,
PRIMARY KEY (id),
KEY (itemid,inherit)
);

データは、次の例のように挿入される。
(id) (itemid) (inherit)
201    110        1
202    110        10
203    110       110
これは、itemid=110 の継承元が itemid=10で、itemid=10 の継承元が itemid=1のケースである。上から順に継承を行う。継承順は、idキーの値で決まる。継承をまったく行わないケースでも、itemid=inherit となるようなデータを挿入しておく必要がある。

SQLクエリーは次のように書けるかも。
SELECT i.itemid as itemid, j.ibody as body, 
e.inherit as inherit, e.id as eid FROM
nucleus_item as i, nucleus_item as j
nucleus_plugin_itemextension as e
WHERE (デフォルトの条件式)
and i.inumber=e.itemid
and j.inumber=e.inherit

fetch は次のように行う。
$data=array();
$itemid=0;
while($row=mysql_fetch_assoc($res)){
  if ($itemid!=$row['itemid']) {
    $this->_parse($data);
    $itemid=$row['itemid'];
    $data=array();
  }
  $data[$row['eid']]=$row;
}
$this->_parse($data);
nucleus_itemテーブルを2回参照している。iの方は、デフォルトの条件式で決まるitemid取得用で、jの方が実際のデータ(ititle, ibody, imore)取得用である。したがって継承もとの記事は、ドラフトでも未来の記事でも、かまわない。

なお_parse()関数は、キー値でソートした後に、順に継承を行いパースする関数($dataが空の場合は何も実行しない)。

コメント

コメントはありません

コメント送信