カテゴリー別アーカイブ: xoops

cubsonを使って3時間で作るXOOPS評価モジュール[5]

XOOPS用モジュールの開発支援ツールであるcubsonを使って、レストラン評価モジュールを作ってみましょう。
今回はその5回目。

前回の記事はこちらcubsonを使って3時間で作るXOOPS評価モジュール[4]

分かりづらい点や間違い点、質問などありましたら、お気軽にコメントしてください^^

(10)評価対象のレストランを一覧から選択できるようにする

レストランに対する評価(rating)をするときには、レストランをプルダウンで選べると便利です。

レストランをプルダウンで選択
この画像のように、登録されているレストランを選べるようにしましょう。

{module_dir}/actions/RatingEditAction.class.phpに以下を追加

○追加箇所
var $mRestArr = null;
function prepare()
{
parent::prepare();
$catHandler =& $this->mAsset->load('handler', "restaurant");
$this->mRestArr =& $catHandler->getObjects();
・・・
}
function executeViewInput(&$render)
{
$render->setAttribute('restArr', $this->mRestArr);
・・・
}

{module_dir}/templates/resrate_rating_edit.html を一部変更
restaurant_id入力の部分を次のように変更します。

△変更前
<{xoops_input type=text name=restaurant_id value=$actionForm->get('restaurant_id')}>

○変更後
<select name="restaurant_id">
<{foreach item=rest from=$restArr}>
<option value="<{$rest->get('restaurant_id')}>" <{if $rest->get('restaurant_id') == $actionForm->get('restaurant_id')}> selected="selected"<{/if}>><{$rest->getShow('restaurant_name')}></option>
<{/foreach}>
</select>

これで登録されているレストラン一覧から選択できるようになりました。

もちろんレストラン情報を登録していないと選択することはできませんので、まずはレストランを登録してからRatingEditを見てみてください。

(11)評価のList表示でrestaurant_idにレストラン名を表示する

次に評価のList表示画面(RatingList)をいじりましょう。

現在は、RESTAURANT_ID のところに、そのレストランのIDがそのまま数字で表示されてしまっています。
レストランのIDがそのまま数字で表示されている

これをレストラン名で表示するようにし、ついでにレストラン詳細情報へのリンクにしちゃいましょう。
変更箇所は以下の通りです。

{module_dir}/class/handler/Rating.class.phpに以下を追加

○追加箇所
var $mRest = null;
var $_mRestLoadedFlag = false;
function loadRest()
{
if ($this->_mRestLoadedFlag == false) {
$handler =& xoops_getmodulehandler('restaurant', 'resrate');
$this->mRest =& $handler->get($this->get('restaurant_id'));
$this->_mRestLoadedFlag = true;
}
}

{module_dir}/actions/RatingListAction.class.php の
function executeViewIndex(&$render) に以下を追加

○追加箇所
foreach(array_keys($this->mObjects) as $key){
$this->mObjects[$key]->loadRest();
}

{module_dir}/templates/resrate_rating_list.html を変更

△変更前
<{$obj->getShow('restaurant_id')}>

○変更後
<a href="./index.php?action=RestaurantView&amp;restaurant_id=<{$obj->getShow('restaurant_id')}>"><{$obj->mRest->getShow('restaurant_name')}></a>

あとはアップデートを行って変更を反映させましょう。

レストランIDが名前になりました
数字で表示されていたレストランIDが名前で表示されるようになり、しかもレストラン詳細情報へのリンクにもなっていることが分かります。

【ここまで75分】

さぁ、あとはレイアウトを整えていきましょう!

参考サイト:氷川 XOOPS Module 開発室

カテゴリー: cubson | コメントをどうぞ

cubsonを使って3時間で作るXOOPS評価モジュール[4]

XOOPS用モジュールの開発支援ツールであるcubsonを使って、レストラン評価モジュールを作ってみましょう。
今回はその4回目。

前回の記事はこちらcubsonを使って3時間で作るXOOPS評価モジュール[3]

分かりづらい点や間違い点、質問などありましたら、お気軽にコメントしてください^^

(7)ユーザーIDを自動入力する

前回まででは、レストランの評価(rating)を入力しようとすると、ユーザーID(uid)を手動で入力する必要がありました。

しかしXOOPSにログインしているユーザーに、ユーザーIDを手動で入力してもらうのは不便ですし、なりすましの危険もあります。

そこでユーザーIDを自動で入力するように変更しましょう。

{module_dir}/actions/RatingEditForm.class.php に以下を追加します。
これは$this->mObject->isNew()をチェックして、評価(rating)が新規投稿のときには、uid に XOOPSの登録ユーザーIDを代入する関数です。

○追加箇所
function prepare()
{
parent::prepare();
if ($this->mObject->isNew()) {
$this->mObject->set('uid', $this->mRoot->mContext->mXoopsUser->get('uid'));
}
}

さらに {module_dir}/templates/resrate_rating_edit.html の一部を削除・追加。
input 部分を削除して、hiddenにしています。

△削除箇所
<p>
<tr><br />
<td class="head"><{$smarty.const._MD_RESRATE_LANG_UID}></td><br />
<td class="<{cycle values="odd,even"}>"><br />
<{xoops_input type=text name=uid value=$actionForm->get('uid')}><br />
</td></p>

○追加箇所(< {xoops_token form=$actionForm}>の直後)
<{xoops_input type=hidden name=uid value=$actionForm->get('uid')}>

これで評価の入力時にユーザーID(uid)が自動で入力されるようになりました。
しかもユーザーIDは画面上にはあらわに現れませんので、ユーザーは特に意識せずに評価を投稿することができます。

(8)ユーザーIDを(数字ではなく)登録ユーザ名で表示する

評価(rating)のListをしたとき、ユーザーID(uid)はただの数字で表示されています。
しかし、ただの数字だと誰の投稿した評価なのか分かりにくいですよね。

そこでユーザーIDを XOOPSの登録ユーザ名で表示するようにしましょう。
これは簡単で次のようにするだけです。

{module_dir}/templates/resrate_rating_list.html の一部を変更

△変更前
<{$obj->getShow('uid')}>
○変更後
<{$obj->getShow('uid')|xoops_user:"uname"}>

(9) 評価Edit時、5段階評価をラジオボタンで選択

評価を投稿するときには、味、値段、サービスのそれぞれについて5段階で評価するようにしています。
この5段階評価をラジオボタンで選択できるようにしましょう。

一例として、味(aji)についての変更法を示します。
値段(nedan)とサービス(service)についても同様の変更を行ってください。

{module_dir}/templates/resrate_rating_edit.html の一部を変更

△変更前
<{xoops_input type=text name=aji value=$actionForm->get('aji')}>

○変更後
<label><input type="radio" name="aji" value="1"<{if $actionForm->get('aji')==1}> checked="checked"<{/if}> />1</label> &nbsp;&nbsp;
<label><input type="radio" name="aji" value="2"<{if $actionForm->get('aji')==2}> checked="checked"<{/if}> />2</label> &nbsp;&nbsp;
<label><input type="radio" name="aji" value="3"<{if $actionForm->get('aji')==3}> checked="checked"<{/if}> />3</label> &nbsp;&nbsp;
<label><input type="radio" name="aji" value="4"<{if $actionForm->get('aji')==4}> checked="checked"<{/if}> />4</label> &nbsp;&nbsp;
<label><input type="radio" name="aji" value="5"<{if $actionForm->get('aji')==5}> checked="checked"<{/if}> />5</label>

一度投稿した評価を編集するときには、以前に投稿したときの評価が選択済みになるように
<{if $actionForm->get('aji')==1}> checked="checked"<{/if}>
を入れています。
つまり、前回は「味:4」で評価した場合は、編集するときに「味:4」が選択済みになります。

また<label>〜</label>で囲っておくと、label内の文字をクリックするだけで、そのラジオボタンが選択されます。(Internet Explorer 6では上手く動かないようです)

アップデートをして反映させてください。

【ここまで60分】

カテゴリー: cubson | コメントをどうぞ

cubsonを使って3時間で作るXOOPS評価モジュール[3]

XOOPS用モジュールの開発支援ツールであるcubsonを使って、レストラン評価モジュールを作ってみましょう。
今回はその3回目。

前回の記事はこちらcubsonを使って3時間で作るXOOPS評価モジュール[2]

分かりづらい点や間違い点、質問などありましたら、お気軽にコメントしてください^^

(4) デフォルト・アクションの修正

前回までで、cubsonのインストール、プロジェクトの作成、テーブルの作成まで終わって、とりあえずモジュールの原型ができました。

しかし、今のままだとモジュールにアクセスしたときに何も表示してくれません。
そこで、デフォルトではレストランの一覧を表示するように設定します。

{module_dir}/class/Module.class.php

※{module_dir}は、モジュールが保存されているディレクトリ(C:\xampp\htdocs\html\modules\resrateなど)

を開いて、

function execute(&$controller)内の
$this->mActionName = "Default";

“Default”を{テーブル名}+{アクション}に変更します。
今回はレストランの一覧を表示したいので、”RestaurantList”に変更しました。
変更後:
$this->mActionName = "RestaurantList";

○アクション一覧

  • 編集: “Edit”
  • 一覧表示: “List”
  • 詳細表示: “View”
  • 削除: “Delete”

(5) テンプレートの修正

cubson が生成する一覧表示用のコードには余計な文字がまざっていて、うまく表示してくれません。そこで

{module_dir}/templates/{modulename}_{tablename}_list.html

の中の

"|theme}>

をすべて削除してください。

(6) インストール

ここで一度モジュールをインストールしてみましょう。
インストール方法は普通のモジュールと同じです。

モジュールをインストールすると、メインメニューに「RESRATE」というモジュール名が追加されているはずですので、それをクリックしてみましょう。

モジュールにアクセスすると、レストランの一覧表示画面になります。
また「ADD_A_NEW_RESTAURANT」から、新規レストランの追加もできるはずです。

各テーブルへのアクセスは

http://(XOOPSのURL)/modules/{モジュール名}/index.php?action={テーブル名}{アクション}

となっています。たとえば評価(rating)の一覧表示を見たい場合は

http://(XOOPSのURL)/modules/resrate/index.php?action=RatingList

とします。

【ここまでで50分】

次回は投稿時にユーザーIDを自動入力するようにしてみましょう。

カテゴリー: cubson | 4件のコメント

cubsonを使って3時間で作るXOOPS評価モジュール[2]

XOOPS用モジュールの開発補助をしてくれるcubsonというツールを使って、
レストラン評価モジュールを作っています。

前回の記事はこちら
muzin » cubsonを使って3時間で作るXOOPS評価モジュール[1]

今回は

  • cubsonのインストール
  • プロジェクトの作成
  • テーブルの作成

を行います。

分かりづらいところとか、間違いとかがありましたら、修正していきたいと思いますので
お気軽にツッコミを入れてってくださいm(_ _)m

【これまでで0分】

(1) cubsonのインストール

まずcubson/インストール – PukiWiki Plus!を参考に、cubsonをインストールしてください。
ある意味、これが一番大変かもしれません。

【ここまでで30分】

(2) プロジェクトの作成

まず cubson を起動して、プロジェクトを作成します。
1プロジェクト=1モジュールと思っていただければ良いかと。

プロジェクトを作成するには、cubson を起動して

makeproject resrate

と入力してください。文字がズラーッと表示されるはずです。
XOOPSをインストールしたフォルダの下の modules フォルダの中に resrate というフォルダが作成されていれば成功です。

※プロジェクトの作成
makeproject {プロジェクト名}

(3) phpMyAdmin からテーブルを作成

次にmuzin ≫ cubsonを使って3時間で作るレストラン評価モジュール[1]を参照して
テーブルを作成します。

テーブルはphpMyAdminから作成できます。

http://localhost/phpmyadmin/

にアクセスして、フレーム左側の「データベース」から xoops を選択。

ページ最下部の「データベース xoops に新しいテーブルを作成する」から、次のテーブルを作成してください。

{prefix}_resrate_restaurant
{prefix}_resrate_cat
{prefix}_resrate_rating

※{prefix} はデータベース用の接頭辞です。同じ文字からはじまるテーブルがたくさんあるので分かるはず。

XOOPS用のモジュールでは、テーブル名を
{prefix}_{モジュール名}_{テーブル名}
とする必要があるようです。

いちいちデータベースを作っている暇は無い!という方は次のようにしても大丈夫です。

プロジェクトを作成すると {module_dir}/sql/mysql.sql というファイルがあるはずなので、メモ帳などで開いて以下の内容をコピペしてください。

※{module_dir}には、モジュールが保存されているディレクトリを入れてください(C:\xampp\htdocs\html\modules\resrateなど)

CREATE TABLE `{prefix}_resrate_restaurant` (
`restaurant_id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`restaurant_name` VARCHAR( 255 ) NOT NULL ,
`cat_id` INT( 11 ) UNSIGNED NOT NULL ,
`nedan` VARCHAR( 63 ) NOT NULL ,
`tel` VARCHAR( 15 ) NOT NULL ,
`fax` VARCHAR( 15 ) NOT NULL ,
`homepage` VARCHAR( 255 ) NOT NULL ,
`zipcode` INT( 11 ) UNSIGNED NOT NULL ,
`address` VARCHAR( 255 ) NOT NULL ,
`pr` VARCHAR( 1023 ) NOT NULL ,
PRIMARY KEY ( `restaurant_id` )
) ENGINE = MYISAM;

– ——————————————————–

CREATE TABLE `{prefix}_resrate_cat` (
`cat_id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`cat_name` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `cat_id` )
) ENGINE = MYISAM;

– ——————————————————–

CREATE TABLE `{prefix}_resrate_rating` (
`rating_id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`uid` INT( 11 ) UNSIGNED NOT NULL ,
`restaurant_id` INT( 11 ) UNSIGNED NOT NULL ,
`aji` INT( 5 ) UNSIGNED NOT NULL ,
`nedan` INT( 5 ) UNSIGNED NOT NULL ,
`service` INT( 5 ) UNSIGNED NOT NULL ,
`comment` VARCHAR( 1023 ) NOT NULL ,
PRIMARY KEY ( `rating_id` )
) ENGINE = MYISAM;

また {module_dir}/xoops_version.php の
// $modversion['sqlfile']['mysql'] = “sql/mysql.sql”;
のコメントアウトを外して次のようにします。
$modversion['sqlfile']['mysql'] = “sql/mysql.sql”;

さらに同じファイルの [cubson:tables] に以下の項を記述。
##[cubson:tables]
$modversion['tables'][0] = “{prefix}_resrate_restaurant”;
$modversion['tables'][1] = “{prefix}_resrate_cat”;
$modversion['tables'][2] = “{prefix}_resrate_rating”;
##[/cubson:tables]

あとはモジュールのアップデートを行えば、テーブルが作成されます。

【ここまでで40分】

カテゴリー: cubson | コメントをどうぞ

cubsonを使って3時間で作るXOOPS評価モジュール[1]

XOOPS用モジュールの開発補助をしてくれるcubsonというツールを使って、
レストラン評価モジュールを作ってみましょう。

制限時間は3時間。

既に自宅のパソコン上にサーバを立ち上げており、XOOPSもインストール済み
という前提で話を進めていきますのでご了承ください。
(希望があれば、XOOPSのインストールから説明します)

PHPが分からなくてもコピペで何とかなるように話していくつもりですが、
氷川 XOOPS 研究室 – Menu/Cubson [Cubson] – wikiを読んでいると、もっとよく分かると思います。

分かりづらいところとか、間違いとかがありましたら、修正していきたいと思いますので
お気軽にツッコミを入れてってくださいm(_ _)m

(0) 案件を決める

まず最初に、どんなモジュールを作るかを明確にしましょう。

今回は「レストランの評価」をするモジュールを作りたいと思います。

欲しい機能としては

  • レストラン情報を投稿できる
  • そのときレストランのカテゴリを、和食・洋食・中華etcから選択できる
  • レストラン情報に対して評価を投稿できる

とりあえずこれだけあれば、評価モジュールとしては最低限の機能をそろえているでしょう。

cubson ではデータベースを使いますので、
欲しい機能を元にどんなデータベースを作るかを決めます。
今回は次のようなデータベースを作りたいと思います。

※データベースを使ったことのない人は意味が分からないかも知れませんが、
使っているうちに分かってくるので、今の時点では分からなくても問題ありません。

モジュール名は、restaurant(レストラン)のrating(評価)ということで「resrate」とします。

{prefix}は、XOOPSインストール時に設定したデータベース用の接頭辞(prefix)です。
あとでデータベースを作成するときに、phpMyAdminでテーブル一覧を表示すれば、テーブル名の頭に同じ文字が並んでいるので分かるはず。
 XOOPS Cube Legacy をデフォルトでインストールしたときにはランダムな英数字6文字になっています。XOOPS2.0.Xから移行した場合は XOOPS_ となっていることが多いとか。

○レストラン情報用テーブル
{prefix}_resrate_restaurant

フィールド名 説明
restaurant_id レストランの識別ID
restaurant_name レストラン名
cat_id カテゴリ(和・洋・中ほか)
nedan 値段の目安
tel 電話
fax ファックス(なくても可)
homepage ホームページ(なくても可)
address 住所
pr PR

○カテゴリ情報用テーブル
{prefix}_resrate_cat

フィールド名 説明
cat_id カテゴリのID
cat_name カテゴリの説明
(和食・安め 和食・お手ごろ 和食・高級etc)

○ユーザー評価用テーブル
{prefix}_resrate_rating

フィールド名 説明
rating_id ユーザー評価の識別ID
uid 評価を投稿したユーザーの識別ID
restaurant_id 評価対象のレストランの識別ID
aji 味の評価(5段階)
nedan 値段の評価(5段階)
service サービスの評価(5段階)
comment コメント

とりあえず、こんな感じで。

このテーブルについては、あとから何度も参照することになると思います。

カテゴリー: cubson | コメントをどうぞ