0

Web アプリケーションにプラス/マイナス投票システムを実装しようとしています。現在、ユーザーは私たちのサイトに質問を「投稿」できます。ユーザーが当サイトの閲覧セクションに移動すると、現在 Web サイトで提起されているすべての質問のリストが表示されます。

ユーザーが賛成または反対のリンクをクリックすると、AJAX を介してデータベースを更新する必要があります (つまり、ユーザーをリダイレクトしたり、ページを更新したりしたくありません)。

各アップ/ダウン投票リンクに関連付けられた質問を取得し、そのデータをコントローラーに送信するにはどうすればよいですか?

site/browse:

<?php
    /*
     * @var $model Question
     */

    //loop through all the given questions
    foreach($model as $q)
    {        
        //add the upvote and downvote (text for now)
        echo CHtml::ajaxLink('up', array('question/upvote'));
        echo ("&nbsp - &nbsp;");
        echo CHtml::ajaxLink('down', array('question/downvote'));
        echo '<br />';

        echo CHtml::link($q['name'], array('question/browse/'.$q['_id']));
        echo "<br />Description: " . $q["description"] . "<br />";
        echo "Owner: " . $q["user_id"] . "<br />";

        $timeStamp = new Timestamp($q['timestamp']);

        echo $timeStamp->getDifferenceString() . "<br /><br />";
     }
?>

question controller:

...
 public function upvote()
        {
            //should retrieve question_id and then update database accordingly
            //e.g. UPDATE Question SET value = value + 1 WHERE Question.id = id
        }
...
4

1 に答える 1

1

ajax リクエストの URL で賛成票を得る質問の ID を渡すか、ajax リクエストの POST データとして渡すことができます。jQuery AJAX 呼び出しで POST データを使用することをお勧めしますが、ここでは、提供されたコードを使用してそれを行う方法を示します。

<?php
    /*
     * @var $model Question
     */

    //loop through all the given questions
    foreach($model as $q)
    {        
        //add the upvote and downvote (text for now)
        echo CHtml::ajaxLink('up', array('question/upvote',array('id'=>$q['_id'])));
        echo ("&nbsp - &nbsp;");
        echo CHtml::ajaxLink('down', array('question/downvote',array('id'=>$q['_id'])));
        echo '<br />';

        echo CHtml::link($q['name'], array('question/browse/'.$q['_id']));
        echo "<br />Description: " . $q["description"] . "<br />";
        echo "Owner: " . $q["user_id"] . "<br />";

        $timeStamp = new Timestamp($q['timestamp']);

        echo $timeStamp->getDifferenceString() . "<br /><br />";
     }
?>

ID を取得したら、質問コントローラーで upvote() メソッドを次のように変更します。

質問コントローラー:

...
 public function upvote($id)
        {
            //you have the question id, now you can update database accordingly
            //e.g. UPDATE Question SET value = value + 1 WHERE Question.id = id
        }
...

これで始められます。jQuery を使用して upvote/downvote リクエストを生成し、応答を処理することを検討する必要があります。ajaxLink() メソッドによって自動的に生成された jQuery を意味するものではありません。また、賛成票と反対票のリクエストを処理するルートを使用して、URL の見栄えを良くすることも検討できます。

于 2013-09-02T00:53:22.040 に答える