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がそのまま数字で表示されてしまっています。
これをレストラン名で表示するようにし、ついでにレストラン詳細情報へのリンクにしちゃいましょう。
変更箇所は以下の通りです。
{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&restaurant_id=<{$obj->getShow('restaurant_id')}>"><{$obj->mRest->getShow('restaurant_name')}></a>
あとはアップデートを行って変更を反映させましょう。
数字で表示されていたレストランIDが名前で表示されるようになり、しかもレストラン詳細情報へのリンクにもなっていることが分かります。
【ここまで75分】
さぁ、あとはレイアウトを整えていきましょう!
参考サイト:氷川 XOOPS Module 開発室