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   パーマリンク

コメントをどうぞ

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>