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>
<label><input type="radio" name="aji" value="2"<{if $actionForm->get('aji')==2}> checked="checked"<{/if}> />2</label>
<label><input type="radio" name="aji" value="3"<{if $actionForm->get('aji')==3}> checked="checked"<{/if}> />3</label>
<label><input type="radio" name="aji" value="4"<{if $actionForm->get('aji')==4}> checked="checked"<{/if}> />4</label>
<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分】