我正在使用drupal commerce模块,我有匿名用户的问题,当用户点击添加到购物车按钮时,购物车显示由其他匿名用户添加的额外项目。
我使用自定义代码使用ajax添加到购物车。以下是代码。
// Add a product to cart on ajax call.
function mymodule_custom_add_to_cart($product_id,$uid){
$line_item = commerce_product_line_item_new(commerce_product_load($product_id));
commerce_cart_product_add($uid, $line_item);
$order = commerce_cart_order_load($uid);
commerce_cart_order_refresh($order);
// loads data array from order object
$data = mymoudle_custom_cart_load_all_variables($order->order_id);
$jsonencoded = json_encode($data);
print $jsonencoded;
}
我不知道为什么所有匿名用户都会在购物车中获得相同的产品。
请帮我找出问题。
更新1:
我已经更改了匿名用户的代码如下,然后我收到一个错误:EntityMetadataWrapperException:无法获取数据属性数据,因为未设置父数据结构。在EntityStructureWrapper-> getPropertyValue()中(/ entity.wrapper.inc的第451行
更改代码
// Add a product to cart on ajax call.
function mymodule_custom_add_to_cart($product_id,$uid){
if($uid == 0){
$order_id = commerce_cart_order_id($uid);
if($order_id == false){
$order = commerce_cart_order_new(0, 'checkout_checkout');
} else {
$order = commerce_order_load($order_id);
}
// Load whatever product represents the item the customer will be
// paying for and create a line item for it.
$product = commerce_product_load($product_id);
$line_item = commerce_product_line_item_new($product, 1, $order->order_id);
commerce_line_item_save($line_item);
// Add the line item to the order using fago's rockin' wrapper.
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
$order_wrapper->commerce_line_items[] = $line_item;
// Save the order again to update its line item reference field.
commerce_order_save($order);
// loads data array from order object
$data = mymoudle_custom_cart_load_all_variables($order->order_id);
$jsonencoded = json_encode($data);
print $jsonencoded;
}else{
$line_item = commerce_product_line_item_new(commerce_product_load($product_id));
commerce_cart_product_add($uid, $line_item);
$order = commerce_cart_order_load($uid);
commerce_cart_order_refresh($order);
// loads data array from order object
$data = mymoudle_custom_cart_load_all_variables($order->order_id);
$jsonencoded = json_encode($data);
print $jsonencoded;
}
}
更新2:问题已解决。
网站正在通过googlebot抓取,点击addtocart链接并自动将产品添加到匿名用户帐户,因此我删除了addtocart按钮的链接并使用了商务addtocart表单。
答案 0 :(得分:0)
所有匿名用户的uid为零(请参阅http://server:8088/ws/v1/cluster)。这就是为什么不同匿名用户添加的所有项目都被添加到同一购物车的原因。