本ページではXoops Cube のサンプルモジュール(データベース使用)の作成方法を記載します。
1. サンプルモジュールを作ってみよう
サンプルモジュール(データベース使用)を作ってみよう
「PHPエクスプローラー」の中の「sample2」フォルダから「xoops_version.php」を選択して画面内容のように編集して下さい。
<?php $modversion['name'] = 'サンプル2モジュール'; $modversion['dirname'] = basename(dirname(__FILE__)); $modversion['hasMain'] = 1; $modversion['cube_style'] = true; $modversion['templates'][0]['file'] = 'sample2.html'; // データベース設定 $modversion['sqlfile']['mysql'] = 'sql/mysql.sql'; $modversion['tables'][0] = '{prefix}_{dirname}_data';
5、10、11行目がデータベースの指定になります。
5行目で cube_style を true 指定しているので、データベースの指定方法は最後の行の {prefix}_{darname}_data のような形とします。
接頭辞_ディレクトリ名_dataの名前でデータベースにテーブルが作成されるように設定しています。
「mysql.sql」を画面内容のように編集して下さい。
CREATE TABLE `{prefix}_{dirname}_data` ( `id` int(8) unsigned NOT NULL auto_increment, `data` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM;
1行目の {prefix}_{dirname}_data は
「xoops_version.php」で指定したデータベースのテーブル名と同じものを指定します。
5行目の ENGINE=MyISAM は
MySQLのバージョンが5.x以降では Type=MyISAM は使用出来ないので ENGINE=MyISAM とする。
「data.php」を画面のように編集して下さい。
<?php if (!defined('XOOPS_ROOT_PATH')) exit(); class Sample2DataObject extends XoopsSimpleObject { function Sample2DataObject() { $this->initVar('id', XOBJ_DTYPE_INT, 0); $this->initVar('data', XOBJ_DTYPE_STRING, '', true, 100); } } class Sample2DataHandler extends XoopsObjectGenericHandler { var $mTable = 'sample2_data'; var $mPrimary = 'id'; var $mClass = 'Sample2DataObject'; function Sample2DataHandler(&$db) { parent::XoopsObjectGenericHandler($db); } }
データベースへアクセスするためのクラスを作成します。
このクラスについては命名規則があります。
「モジュールディレクトリ名+ファイル名+Object」及び「モジュールディレクトリ名+ファイル名+Handler」と指定する必要があります。
この場合にはモジュールディレクトリ名「Sample2」+ファイル名「Data」+「Object」または「Handler」となっている
6行目のテーブルオブジェクトのコンストラクタ function Sample2DataObject() 内でテーブルのフィールドを
initVar() を使用して登録します。
この場合、フィールドは「mysql.sql」で指定した「id」と「data」となります。
次に「class」フォルダに「AbstructAction.class.php」ファイルを作成して下さい。
作成したファイルを上記画面のように編集して下さい。
<?php if(!defined('XOOPS_ROOT_PATH')) exit(); class Sample2_Abstract { function Sample2_Abstract() { } function execute() { } function executeView(&$render) { } }
各アクションに対する基底クラスです。各アクションで使用する共通の関数や値を記載します。
ここではexecute()とexecuteView()を記載しています。
次に「class」フォルダに「sample2.class.php」ファイルを作成して下さい。
作成したファイルを上記画面のように編集して下さい。
<?php if (!defined('XOOPS_ROOT_PATH')) exit(); require _SMP2_MODULE_PATH.'class/AbstructAction.class.php'; class sample2 { var $act; function sample2($adm = false) { $this->mAdmin = $adm; $root = & XCube_Root::getSingleton(); $this->act = $root->mContext->mRequest->getRequest('action'); if($this->act == "") { $this->act = 'index'; } if(!preg_match("/^\w+$/", $this->act)) { exit('bad action name'); } } function execute($controller) { $className = $this->act.'Action'; $fileName = _SMP2_MODULE_PATH.'actions/'.$className.'.class.php'; if(!file_exists($fileName)) { exit('file not found'); } require $fileName; $Action = new $className($controller); $Action->execute(); $Action->executeView($controller->mRoot->mContext->mModule->getRenderTarget()); } }
9行目のfunction sample2($adm = false) 内で読み込むアクションクラスのファイルを設定します。
24行目のfunction execute($controller) 内で、読み込むファイルに記載されているクラスのコンストラクタと表示処理を入れます。
「sample2」フォルダに「index.php」ファイルを作成して下さい。
作成したファイルを上記画面のように編集して下さい。
<?php require '../../mainfile.php'; //モジュールディレクトリ名を定数定義 define('_SMP2_DIRNAME', basename(dirname(__FILE__))); //モジュールパスを定数定義 define('_SMP2_MODULE_PATH', XOOPS_MODULE_PATH.'/'._SMP2_DIRNAME.'/'); //モジュールURLを定数定義 define('_SMP2_MODULE_URL', XOOPS_MODULE_URL.'/'._SMP2_DIRNAME.'/'); //モジュールコントローラクラス読み込み require _SMP2_MODULE_PATH.'class/sample2.class.php'; //ルートコントローラー起動 $root = & XCube_Root::getSingleton(); //ヘッダー実行 $root->mController->executeHeader(); //モジュールコントローラークラス $sample2 = new sample2(); //ルートコントローラへモジュールコントローラーを登録 $root->mController->mExecute->add(array(&$sample2, 'execute')); //コントローラの実行 $root->mController->execute(); //画面の描画 require XOOPS_ROOT_PATH.'/footer.php';
23行目の $sample2 = new sample2() に関して
php5.3.x以降において推奨しない機能として「new の返り値を参照で代入すること」とあります。
Xoops Cube モジュールの作成の本などでは{$xxxx = & new xxxx() と記載されていることがありますが
php5.3.x以降ではエラーが発生することがあるので、気をつける必要があります。
「sample2」フォルダの中に「actions」フォルダを作成する。作成した「actions」フォルダの中に「indexAction.class.php」ファイルを作成して下さい。
作成したファイルを上記画面のように編集して下さい。
<?php if (!defined('XOOPS_ROOT_PATH')) exit(); require '../../mainfile.php'; class indexAction extends Sample2_Abstract { function indexAction() { $modhand = & xoops_getmodulehandler('data'); $modobj = & $modhand->create(); for($i=0; $i<=1; $i++) { $modobj->assignVar('data',"test".$i+1); $modhand->insert($modobj, true); } } function executeView(&$render) { $root =& XCube_Root::getSingleton(); $mCriteria = new CriteriaCompo(); $mCriteria->add(new Criteria('id', 2)); $modhand = & xoops_getmodulehandler('data'); $modobj = & $modhand->getObjects($mCriteria); $value = $modobj[0]->get('data'); $render->setTemplateName('sample2.html'); $render->setAttribute('VALUE', $value); } }
「sample2.class.php」の function execute($controller) で呼ばれた時の処理を
8行目のコンストラクタ function indexAction() 内に設定する処理を記載します。
ここでは、データベースに対して値の設定を実施する処理が入っています。
10行目の xoops_getmodulehandler('data'); で、アクセスするテーブル内容を記載したファイル名(data.phpから拡張子を除いたもの)を指定します。
11行目の $modhand->create(); で空のテーブルオブジェクトを作成します。
14行目の $modobj->assignVar('data',"test".$i+1); でassignVar関数を使用して空のテーブルオブジェクトに値を設定しています。
15行目の $modhand->insert($modobj, true); でinsert関数を使用してテーブルに値を設定しにいきます。
19行目の function executeView(&$render) には「sample2.class.php」の $Action->executeView() で呼び出された時の処理を記載する。
ここでは、データベースからの値の取得処理と、その値の設定のための処理が記載されています。
23行目の new CriteriaCompo(); では、データベースに問い合わせするためのオブジェクトの作成をしています。
24行目の add(new Criteria('id', 2)); では、問い合わせるための条件を追加しています。
26行目の xoops_getmodulehandler('data'); では接続するデータベースを指定しています。
28行目の $modhand->getObjects($mCriteria); では指定データベースから条件の値を取得しにいきます。
29行目の $modobj[0]->get('data'); ではデータベースから取得した値を設定しています。
31行目の setTemplateName('sample2.html'); では、値を設定するHTMLを指定しています。
32行目の setAttribute('VALUE', $value); では、指定したHTMLファイルの「VALUE」に値を設定しにいきます。
「sample2」フォルダの中に「templates」フォルダを作成する。作成した「templates」フォルダの中に「xoops_version.php」で指定したHTMLファイル「sample2.html」ファイルを作成して下さい。
作成したファイルを上記画面のように編集して下さい。
<div>データベースから取得した値</div>
<div>値は:<{$VALUE}></div>
2行目の <{$VALUE}> の記述方法はSmartyを使用した値の設定方法です。
indexAction.class.phpの32行目で設定された値が、<{$VALUE}> に入ってきます。
インストールが完了したら、作成したモジュールのテーブルが作成されているか確認します。
XamppからphpMyAdminを開いて下さい。
Xoops Cubeを入れたデータベースの中に「xxx_samole2_data」というテーブルが作成されていることを確認して下さい。
(注)xxxはXoops Cubeが「xoops_version.php」で指定した「{prefix}」に与えられた値
以上でXoops Cubeのサンプルモジュール(データベース使用)作成を終了します。お疲れ様でした。