注文の多いXOOPS屋 TOP現在のブログ旧スタッフblog アーカイブ
このページは 2007〜2008 年に公開していた「株式会社RYUS スタッフblog」のアーカイブです。内容は当時のものです。

Dyna 再チャレンジ

2007/11/12 17:16   Ryuji   カテゴリ: XOOPS Cube, cubson

cubsonでコードを生成すると、XoopsSimpleObjectを継承した、{TableName}Object クラスが作成されます。

例えば次のようなコードです。

class Foo_FooObject extends XoopsSimpleObject
{
function Foo_FooObject()
{
$this->initVar('foo_id', XOBJ_DTYPE_INT, 0, true);
$this->initVar('title', XOBJ_DTYPE_STRING, "", true, 255);
$this->initVar('note', XOBJ_DTYPE_TEXT, "", true);
}
}/PRE

コンストラクタでは、テーブルの各カラムについてinitVarメソッドを呼び出してでデータ型や、デフォルト値などを設定しています。
設定内容は、$mVarsにカラム名をキーとした連想配列で保存されます。

ほとんどのケースでは、cubsonが自動的に生成したコードで使えますが、時にはちょっと変えたい場合もあります。

変更したいときに変更できるようにするために、cubsonでは、DB情報を毎回取得して設定する方式でなく、事前にDB情報を元にコードを吐き出す形になってます。

ただ、よーく考えたら、initVarの実行結果は$mVarsに入るので、DB情報を取得してinitVarするようにしても問題なさそうです。

そんなわけで、DB情報を取得して、initVarしてくれるようなDynaXoopsSimpleObjectをちょっと試しに作成してます。
使い方としては

PREclass Foo_FooObject extends DynaXoopsSimpleObject
{
}


で、先ほどのcubsonコードと同じようにinitVar。
noteカラムだけinitVarを変更したくなったら、

PREclass Foo_FooObject extends DynaXoopsSimpleObject
{
function Foo_FooObject()
{
parent::DynaXoopsSimpleObject();
$this->initVar('note', XOBJ_DTYPE_TEXT, "Fooooo!!", true);
}
}
と書けばOK

というようなのを作りたいなと(^^;
えぇ、まだ作成途中です。。。。

ただ、オブジェクト生成のたびにDBから情報取得するんじゃムダなので、そこはキャッシュ必要だなぁとか、いろいろ考えてます。

これができたら、ActionFormやActionFilterでもできないかなぁと夢想しています

PS
# exFrameのDynaXXXXは、どうもなじめなかったんで、設定ファイルを使わないDynaXXXXをつくってみようかなと。そんなわけで「Dyna再チャレンジ」です(^^;