本ページではXoops Cube のサンプルモジュール(データベース使用2)の作成方法を記載します。
1. フォームからデータの追加と削除の実施
フォームからデータの追加と削除を実施してみよう
前回作成したサンプルモジュール(データベース使用)のコードを修正して今回のサンプルを作成します。
今回は以下の2ファイルを修正します。
1. indexAction.class.php
2. sample2.html
<?php if (!defined('XOOPS_ROOT_PATH')) exit(); require '../../mainfile.php'; class indexAction extends Sample2_Abstract { function indexAction() { } function executeView(&$render) { $root =& XCube_Root::getSingleton(); $select = null; $id_array = array(); $data_array = array(); $dataflg = false; $modhand = & xoops_getmodulehandler('data'); if(!empty($_GET['select'])) { $select = $_GET['select']; if($select === "add") { // 追加処理 $str = $_GET['str']; $modobj = & $modhand->create(); $modobj->assignVar('data',$str); $modhand->insert($modobj, true); } elseif($select === "del") { // 削除処理 $id = $_GET['id']; $mCriteria = & new CriteriaCompo(); $mCriteria->add(new Criteria('id',$id,'=','','')); $modobj = $modhand->getObjects($mCriteria); if(!empty($modobj)) $modhand->delete($modobj[0], true); } } // データベースにあるレコード数を取得する $cnt = $modhand->getCount(); if($cnt != 0) { $dataflg = true; // データベースの全レコードを取得する $modobj = $modhand->getObjects(); reset($modobj); while(list($key, $mod) = each($modobj)) { // 全レコードのIDとデータを取得する $id_array[] = $mod->get('id'); $data_array[] = $mod->get('data'); } } $render->setTemplateName('sample2.html'); $render->setAttribute('DFLG', $dataflg); $render->setAttribute('CNT', $cnt); $render->setAttribute('ID', $id_array); $render->setAttribute('DATA', $data_array); } }
以下に修正コードの説明をします。
17行目〜20行目は、変数の初期化を実施しています。
22行目の xoops_getmodulehandler('data'); で指定データベースとのデータのやりとりを可能にしてくれます。
25行目〜47行目については以下の動作をしています。
1. フォームからデータが送信されたか
2. フォームからデータ取得時の動作内容の変更
25行目の empty($_GET['select']) で画面表示時にフォームからデータが送信されたか判定しています。
$_GETでフォームでgetの方法で送信されるパラメータの全てを取得出来ます。$_GET['select']とすることで、パラメータ名"select"の値を取得しています。
判定内容は、取得が出来ればフォームデータが送信されたという内容になっています。
29行目及び38行目では、"select"のパラメータ内の内容を見て動作を変更しています。
25行目から37行目では、追加処理が実施されています。
33行目の $modobj = & $modhand->create(); でデータを格納するための空のオブジェクトが作成されています。
34行目の $modobj->assignVar('data',$str); で空のオブジェクトにフォームで送信された文字列($str)をテーブルのdataフィールドに追加するようにオブジェクトに値が設定されます。
35行目の $modhand->insert($modobj, true); で実際にデータベースへデータを追加する処理をしています。
37行目から45行目では、削除処理が実施されています。
42行目の new CriteriaCompo() で、複数の条件が格納出来るデータベースのテーブルへの問い合わせのためのオブジェクトを作成してます。
43行目の $mCriteria->add(new Criteria('id',$id,'=','','')); でデータベースへの問い合わせのための一つ目の条件を設定しています。
44行目の modhand->getObjects($mCriteria); で、問い合わせの条件に合致するデータ群を配列の形で取得してきます。
45行目の delete($modobj[0], true); でデータベースへ指定オブジェクトに合致するデータの削除を実施しています。
この際に、"$modobj[0]"としているのは、$modobjは関数の戻り値を配列で受け取り、その配列の最初に該当するオブジェクトが入っているためこのような形となります。
51行目の modhand->getCount(); では、データベースに対して指定テーブルのレコード数を取得しにいっています。
]56行目の modhand->getObjects(); では、44行目と違い取得のための条件がありません(引数が指定されていない)。この場合には、全てのテーブルのレコードを取得してきます。
58行目では reset() を使用して、配列のポインタを先頭に移動しています。
59行目から64行目にかけては、全レコードのIDとそれに対応したデータを取得して、各配列に格納しています。
68行目から71行目にかけては、HTMLファイルに記載されたSmartyの変数に値を設定しています。
<div>データベースにあるレコード数は<{$CNT}></div> <{if $DFLG}> レコードに存在するIDは以下の通り。 <table> <tr> <td>ID 番号</td> <td>データ内容</td> </tr> <{section name=num loop=$CNT}> <tr> <td><{$ID[num]}></td> <td><{$DATA[num]}></td> </tr> <{/section}> </table> <{else}> 現在レコードはありません。 <{/if}> <br> <form method="get" action="index.php"> <input type="radio" name="select" value="add">データを追加する</input> <input type="radio" name="select" value="del">データを削除する</input> <br> 文字列を入力して下さい。<input type="text" name="str"> <br> 削除するIDを入力して下さい。<input type="text" name="id"> <br> <button type="submit" name="send" >送信</button> </form>
以下に修正コードの説明をします。
3行目の $DFLG はindexAction.class.phpの68行目で設定された、$dataflg の値を見ています。
この値がtrueの時にはテーブルが表示され、falseの時にはテーブルは表示されません。
3行目から17行目はテーブルの表示処理が入っています。
10行目の <{section name=num loop=$CNT}> は、Smartyを使用したループ処理が入っています。$CNT はindexAction.class.phpの69行目で設定された $cnt の値を見ています。
12行目の $ID[num] では、indexAction.class.phpの70行目で設定された $id_array の値を見ています。
id_array は配列のため、num を使用して配列の中身を取得しています。
13行目の $DATA[num] では、indexAction.class.phpの71行目で設定された $data_array の値を見ています。
data_array も配列のため、num を使用して配列の中身を取得しています。
17行目から19行目については、テーブルにレコードがない時に表示する文字列が入っています。
22行目から31行目については、通常のHTMLのform内容についての記述となっています。
23、24、26、27行目のnameの中身がindexAction.class.phpの $_GET で取得するパラメータになります。
追加されると、本画面のように追加されたデータが表示されます。
また、画面の「データを削除する」を選んで、画面に表示されている「ID番号」を削除するIDに入力して「送信」ボタンを押下すると指定したIDのデータが削除されます。
以上でXoops Cubeのサンプルモジュール(データベース使用2)作成を終了します。お疲れ様でした。