Successfully reported this slideshow.

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

XOOPS Cube Conference 2012 Developer Workshop 3

  1. 1. モジュール作成 XOOPSモジュール作成 2012年6月 氷川 霧霞 @kilica on Twitter http://jp.xoopsdev.com/
  2. 2. モジュールにアクセスしてみる XOOPS_URL/modules/{dirname}/ → 一覧画面が表示される。 class/Module.class.php {Module}_Module::_getDefaultActionName() XOOPS_URL/modules/{dirname}/index.php?action={Table}Edit → 編集画面が表示される XOOPS_URL/modules/{dirname}/index.php?action={Table}View&{table}_id=1 → id=1 の詳細画面が表示される
  3. 3. 生成される機能 編集(Edit)、削除(Delete)、一覧(List)、詳細(View) •actions/{Table}Delete.class.php •actions/{Table}Edit.class.php •actions/{Table}List.class.php •actions/{Table}View.class.php 基本的なURLパラメタ &action={Table}{Action} ex) NewsEdit, PageView, TopicList &{table}_id={n} ex) news_id=2, page_id=123
  4. 4. 言語ファイル factoryは、テーブル名やフィールド名を元に最低 限の言語ファイルを生成する。 ただし、日本語訳まではしてくれない ^ ^;; language/ja_utf8/main.php を編集する。 (設定関係は modinfo.php, 管理画面用は admin.php)
  5. 5. テーブルとハンドラとモデル データベーステーブル (MySQL) ハンドラ データベースとモデルを扱う handler::get() handler::insert() object::get() object::set() モデル object::getShow() (データオブジェクト) フィールド 入力値 の値
  6. 6. データを扱う(オブジェクトの取得) primary key の値を指定してオブジェクトを取得 $handler =Legacy_Utils::getModuleHandler('{table}', '{dirname}'); # primary key の値が 3 のデータを取得 # primary key を引数にして、1件のレコードータをテーブルから取得し、オブジェクトに格納する $newsObject = $handler->get(3); データベーステーブル handler::get() モデル (MySQL) (データオブジェクト)
  7. 7. データを扱う(オブジェクトの取得) テーブルのデータを全件取得する $handler =Legacy_Utils::getModuleHandler('{table}', '{dirname}'); $newsArray = $handler->getObjects(); category_id が 2 で posttime が1日以上前のデータを取得 $handler =Legacy_Utils::getModuleHandler('{table}', '{dirname}'); # CriteriaCompo と Criteria を使ってデータの抽出条件を指定する。 $criteria = new CriteriaCompo(); $criteria->add(new Criteria('category_id', 2)); $criteria->add(new Criteria('posttime', time()-24*60*60), '<='); $newsArray = $handler->getObjects($criteria); データベーステーブル handler::getObjects() モデル (MySQL) モデル モデル (データオブジェクト) (データオブジェクト) (データオブジェクト)
  8. 8. データを扱う(オブジェクトから値を取り出す) $handler =Legacy_Utils::getModuleHandler('{table}', '{dirname}'); $newsObject = $handler->get(22); # $news には、title, content, posttime, uid が格納されているとする $text = $newsObject->getShow('content'); //getShow()で取り出した値はエスケープさ れている $uid = $newsObject->get('uid'); // get()で取り出した値はエスケープされていない フィールド object::get() モデル の値 object::getShow() (データオブジェクト)
  9. 9. データを扱う(データベースの更新) $handler =Legacy_Utils::getModuleHandler('{table}', '{dirname}'); $newsObject = $handler->get(22); #オブジェクトにデータをセットする $newsObject->set('title', 'サイトリニューアル'); $newsObject->set('content', 'XOOPS Cube 公式サイトがリニューアルしました。'); #オブジェクトの中のデータをデータベースに格納する $handler->insert($newsObject); データベーステーブル handler::insert() モデル (MySQL) (データオブジェクト)
  10. 10. データ初期値をセット(1) データ初期値をセット( ) いくつかのフィールドには初期値がセットされる • uid(ユーザID) • posttime(投稿日時) 固定の値をセットしたい場合は、 class/handler/{Table}.class.php {Module}_{Table}Object::__construct() $this->initVar('weight', XOBJ_DTYPE_INT, 50, false); のように initVar() の第3引数に初期値を入れる。
  11. 11. データ初期値をセット(2) データ初期値をセット( ) 動的な値をセットする ex) リクエストの中の値をセットする場合 actions/{Table}Edit.class.php {Module}_{Table}EditAction::prepare() public function prepare(){ parent::prepare(); $req = $this->mRoot->mContext->mRequest; if($this->mObject->isNew()){ $this->mObject->set('uid', Legacy_Utils::getUid()); # 値によってはエスケープ $this->mObject->set('category_id', $req- >getRequest('category_id')); } }
  12. 12. テンプレート XOOPS Cube Legacy では Smarty をテンプレー トエンジンに採用 • templates/{module}_{table}_delete.html • templates/{module}_{table}_edit.html • templates/{module}_{table}_list.html • templates/{module}_{table}_view.html
  13. 13. ActionForm htmlフォーム forms/{Table}EditForm.class.php load Action MySQL モデル Form update class/handler/{Table}.class.php 送信 templates/{module}_{table}edit.html htmlフォームとのデータのやり取り o フォームからの入力値の保持 o DBの値をフォームに受け渡し 入力値検証(Validation)
  14. 14. 入力値検証(Validation) 入力値検証( ) forms/{Table}EditForm.class.php {Module}_{Table}EditForm public function prepare() { $this->mFieldProperties['weight'] = new XCube_FieldProperty($this); $this->mFieldProperties['weight']- >setDependsByArray(array('required')); $this->mFieldProperties['weight']->addMessage('required', '必須です', '表 示順'); }
  15. 15. モジュールコンフィグ 設定 xoops_version.php $modversion['config'] = array( array( 'name' => 'default_order', 'title' => '_MI_XCCK_LANG_DEFAULT_ORDER', 'description' => '_MI_XCCK_DESC_DEFAULT_ORDER', 'formtype' => 'textbox', 'valuetype' => 'int', 'default' => 8, 'options' => array() ), ); コンフィグ値の取得 $defaultOrder = XCube_Root::getSingleton()->mContext->mModule- >getModuleConfig('default_order');
  16. 16. モジュール設定 モジュールの各種設定 xoops_version.php • バージョン、開発者 • テーブル • テンプレート • ブロック • モジュールコンフィグ • 管理画面メニュー

×