0

ショッピングカートを備えた商用ウェブサイトを構築しています。

ほとんどのページ (製品ページ、カテゴリ ページなど) で、カートの内容をサイドバーに表示したいと考えています。これは、アイテムがカートに追加されたときに AJAX を介して更新されます。

「カートを表示」ページで、内容の完全版を表示したい。

明らかに、同じモデルと関数を使用してカートを取得および/または更新することは論理的に思えますが、呼び出し元のページに応じて、データを別のビュー (サイドバーまたは完全なカート) に送信します。

問題は、カート モデルで、リクエストがどこから来たのかをどのように検出できるかということです。

次のように、リクエストがAJAX経由で送信されたかどうかを確認すると思いました。

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') // i.e - the request came as AJAX
{
    $this->load->view('cart_sidebar_view', $data);
}else{ /* not ajax */
    $data['main_content'] = 'cart_view';
    $this->load->view('includes/template', $data);
}

しかし、「カートの表示」ページでも AJAX を使用して、そこからカートを更新できるようにしたいので、それだけでは十分ではありません。

では、カート モデルで、リクエストがどこから来たのかを検出する方法はありますか? それとも、「カートに追加」または「削除」ボタンごとに非表示のフォーム フィールドにその情報を送信する必要がありますか?

4

1 に答える 1

1

簡単な方法があります。表示カートページからリクエストを送信する場合は、追加の変数を送信します。コントローラで変数が来ているかどうかをチェックするよりも、変数が来ていない場合はロジックを呼び出して他のことをします。

if($this->input->is_ajax_request()) 
{
    $this->load->view('cart_sidebar_view', $data);
}else{
    if($this->input->post('another_variable')){
        // do something else
    }else{
        $data['main_content'] = 'cart_view';
        $this->load->view('includes/template', $data);
    }
}
于 2013-03-20T13:13:14.953 に答える