バージョン0.5のリリースは、私にとっては、活動ページと署名付きブログからのトピックフィードを追加する以上のものでした。 新しいバージョンは
ORMと
ActiveRecordを実装しています。 これらが一緒になって、開発者に強力なツールキットを提供し、プラグインを開発するたびに記述する必要があった同じタイプのコードのヒープを排除します。 更新後に記事で説明する同じフォーラムでは、2177行のコードが
失われました 。 この記事では、例としてLiveStreet用のプラグインを作成することにより、ORMとARをより深く掘り下げたいと思います。
ほぼ1年前に、
runawayedはtrunkバージョンの革新
に関する記事を投稿しまし
た 。
私はその記事から始めましたが、それはそのツールキットの紹介にすぎません。 配列のキャッシュ、ページング、ツリーのような形式についての言葉はありません。 不必要にロードすることなく、できるだけ多くの情報を読者に提供するようにします。 始めましょうか?
フォーラムプラグインの例ですべてを検討します。 まず、プラグインスケルトンを作成する必要があります。
ソースファイルはgithubで表示できます。プラグインの説明については触れません。次に、forumというモジュールを作成します。

モジュールをModuleORMとして記述する必要があります。また、Initメソッドでは、通常のモジュールからInitメソッドの親を継承する必要があります。
class PluginForum_ModuleForum extends ModuleORM { public function Init() { parent::Init(); } }
エンティティを説明する前に、エンティティ間のすべての接続を考慮する必要があります。これにより、ゲッターを介した操作が容易になります。

そして、作成されたエンティティを説明します。
Category.entity.class.php class PluginForum_ModuleForum_EntityCategory extends EntityORM {}
Forum.entity.class.php class PluginForum_ModuleForum_EntityForum extends EntityORM { protected $aRelations = array( 'category'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'PluginForum_ModuleForum_EntityCategory','category_id'), 'user'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'ModuleUser_EntityUser','user_id'), 'topic'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'PluginForum_ModuleForum_EntityTopic','topic_id'), 'post'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'PluginForum_ModuleForum_EntityPost','post_id'), ); }
Topic.entity.class.php class PluginForum_ModuleForum_EntityTopic extends EntityORM { protected $aRelations = array( 'user'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'ModuleUser_EntityUser','user_id'), 'post'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'PluginForum_ModuleForum_EntityPost','post_id'), 'forum'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'PluginForum_ModuleForum_EntityForum','forum_id'), ); }
Post.entity.class.php class PluginForum_ModuleForum_EntityPost extends EntityORM { protected $aRelations = array( 'user'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'ModuleUser_EntityUser','user_id'), 'topic'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'PluginForum_ModuleForum_EntityTopic','topic_id'), 'forum'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'PluginForum_ModuleForum_EntityForum','forum_id'), ); }
Read.entity.class.php class PluginForum_ModuleForum_EntityRead extends EntityORM {}
これで、プラグインモジュールでクラスを記述せずに、これらすべてを操作できるようになりました。例:
$this->PluginForum_ModuleForum_GetCategoryItemsAll();
$this->PluginForum_ModuleForum_GetForumItemsByCategoryId($oCategory->getId());
$this->PluginForum_ModuleForum_GetTopicItemsByForumId($oForum->getId(),array('#page' => array(1,15), '#cache'=>''));
#cacheフィルターは、次のパラメーターを取ることもできます。
array( '#cache' => array( 'keys', 'tags', 'time' ) );
関係にはいくつかのタイプがあります。
protected $aRelations = array( 'entity'=>array(EntityORM::RELATION_TYPE_BELONGS_TO,'ModuleSome_EntitySome','field_id'),
エンティティを説明した後、次のメソッドを使用できます。
Add(); Update(); Save();
データベース内のテーブルは次のように命名する必要があります:prefix_ <module-name> _ <entity-name>(または構成に名前を書き込む)が、エンティティの名前がモジュールの名前と一致する場合は、次のようにテーブルに名前を付けます:prefix_ <module-名前>。 フィールドにも独自の標準があります:<entity-name> _ <field-name>、または単に<field-name>。
紳士の皆さん、ご清聴ありがとうございました。 最新のフォーラムソースは
gitで表示できることを思い出してください。
UPD :記事に修正を加えました。彼の
コメントに感謝し
ます 。