2013-03-20 70 views
0

我正在用购物车建立一个商业网站。Codeigniter - 检测请求的发件人

在大多数页面上(即产品页面,类别页面),我希望在侧边栏上显示购物车内容,当购物车被添加到购物车时,这些内容将通过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“显示购物车”页面上为好,以允许从那里更新购物车。

那么,有没有办法在购物车模型中检测到请求来自哪里?或者我是否必须将每个“添加到购物车”或“删除”按钮的信息以隐藏的形式发送?

回答

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); 
    } 
}