0

ユーザーメッセージングシステムのユーザー受信ボックスで、ユーザーが電子メールメッセージをお気に入りのメッセージにすることができる機能を構築しています。

メッセージモデルに2つのメソッドを作成しました。'messages'テーブルの'favourite'列の0を1に更新します。これは、ユーザーがメッセージをお気に入りにすることを意味します。また、ユーザーがクリックしてメッセージをお気に入りにする画像が灰色から色に変わります。

次に、ユーザーがメッセージをお気に入りにしないようにしたい場合は、これと同じプロセスを再度実行します。1が0に更新され、画像が再びグレー表示になります。

以下は、ボックスがチェックされている場合(画像がカラー)に基本的に何かを実行し、ボックスがチェックされていない場合(画像がグレー表示されている)に何かを実行する私のjquery/javascriptです。

// favourite check box
    $('input.favourite:checkbox').simpleImageCheck({
  image: '<?php echo base_url()?>images/messages/check.png',
  imageChecked: '<?php echo base_url()?>images/messages/unchecked.png',
  afterCheck: function(isChecked) {
    if (isChecked) {
  //query to db from php to update favourite number to 1
    }
    else (!isChecked)
        {
            //query to db from php to update favourite number to 0
        }
  }
});

私が理解しようとしているのは、モデルで2dbクエリを呼び出すための最良の方法です。

public function favourite_checked($message_id)
{
    $username = $this->session->userdata('username');
    return $this->db->query("UPDATE messages SET favourite = 1 WHERE id = $message_id AND to_user = '$username'");    
}

    public function favourite_unchecked($message_id)
{
    $username = $this->session->userdata('username');
    return $this->db->query("UPDATE messages SET favourite = 0 WHERE id = $message_id AND to_user = '$username'");    
}

これを行うための最良の方法は何でしょうか?ビューでモデルを直接呼び出すのは悪い習慣ではありませんか?

では、どうすれば達成したいことを達成できますか?

コントローラーは仲介者として機能できますか?

もしそうなら、JavaScript関数でコントローラーを呼び出す方法はありますか?

私はいつもここで与えられたアドバイスに感謝します。前もって感謝します

4

2 に答える 2

4

jQueryでは、CodeIgniterコントローラーへのAjaxgetリクエストを使用します。コントローラがusersと呼ばれ、関数がupdate_favoritesと呼ばれるとします。jQuery呼び出しは次のようになります。

$.get('http://mysite.com/users/update_favorites/user_id/message_id');

次に、コントローラーはuser_idとmessage_idのURL引数を見つけ、それらの引数を使用してモデルをロードします。モデルはデータベースに変更を加えます。

幸運を!

于 2011-01-18T17:26:15.453 に答える
1

Summerの$.getメソッドに加えて、jQueryの$ .post()メソッドをほぼ同じ方法で使用できます。Codeigniterはgetリクエストよりもpostリクエストを優先するように作成されているため、postを使用する方が好きです。

于 2011-01-18T18:57:26.717 に答える