狠狠撸

狠狠撸Share a Scribd company logo
モジュール作成
XOOPSモジュール作成
           2012年6月
           氷川 霧霞
      @kilica on Twitter
   http://jp.xoopsdev.com/
モジュールにアクセスしてみる
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 の詳細画面が表示される
生成される機能
編集(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
言語ファイル
factoryは、テーブル名やフィールド名を元に最低
  限の言語ファイルを生成する。
ただし、日本語訳まではしてくれない ^ ^;;

language/ja_utf8/main.php
を編集する。
(設定関係は modinfo.php, 管理画面用は admin.php)
テーブルとハンドラとモデル

                               データベーステーブル
                                  (MySQL)                ハンドラ
                                                         データベースとモデルを扱う




                     handler::get()      handler::insert()




 object::get()                                               object::set()
                                  モデル
 object::getShow()
                                  (データオブジェクト)



     フィールド
                                                                 入力値
     の値
データを扱う(オブジェクトの取得)
primary key の値を指定してオブジェクトを取得
$handler =Legacy_Utils::getModuleHandler('{table}', '{dirname}');
# primary key の値が 3 のデータを取得
# primary key を引数にして、1件のレコードータをテーブルから取得し、オブジェクトに格納する
$newsObject = $handler->get(3);




  データベーステーブル                 handler::get()              モデル
     (MySQL)
                                                         (データオブジェクト)
データを扱う(オブジェクトの取得)
テーブルのデータを全件取得する
$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)                                              モデル
                                                           モデル
                                                         (データオブジェクト)
                                                          (データオブジェクト)
                                                           (データオブジェクト)
データを扱う(オブジェクトから値を取り出す)
$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()          (データオブジェクト)
データを扱う(データベースの更新)
$handler =Legacy_Utils::getModuleHandler('{table}', '{dirname}');
$newsObject = $handler->get(22);



#オブジェクトにデータをセットする
$newsObject->set('title', 'サイトリニューアル');
$newsObject->set('content', 'XOOPS Cube 公式サイトがリニューアルしました。');



#オブジェクトの中のデータをデータベースに格納する
$handler->insert($newsObject);




  データベーステーブル                handler::insert()            モデル
     (MySQL)
                                                         (データオブジェクト)
データ初期値をセット(1)
    データ初期値をセット( )
いくつかのフィールドには初期値がセットされる
?   uid(ユーザID)
?   posttime(投稿日時)


固定の値をセットしたい場合は、
class/handler/{Table}.class.php
{Module}_{Table}Object::__construct()
$this->initVar('weight', XOBJ_DTYPE_INT, 50, false);

のように initVar() の第3引数に初期値を入れる。
データ初期値をセット(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'));
     }

}
テンプレート
XOOPS Cube Legacy では Smarty をテンプレー
  トエンジンに採用
? templates/{module}_{table}_delete.html
?   templates/{module}_{table}_edit.html
?   templates/{module}_{table}_list.html
?   templates/{module}_{table}_view.html
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)
入力値検証(痴补濒颈诲补迟颈辞苍)
    入力値検証(          )
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', '必須です', '表
      示順');

}
モジュールコンフィグ
設定
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');
モジュール設定
モジュールの各種設定
xoops_version.php
?   バージョン、開発者
?   テーブル
?   テンプレート
?   ブロック
?   モジュールコンフィグ
?   管理画面メニュー

More Related Content

XOOPS Cube Conference 2012 Developer Workshop 3