p1kka
Постоялец
- Регистрация
- 12 Авг 2009
- Сообщения
- 89
- Реакции
- 24
- Автор темы
- #1
Сохранение корзины в базе
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Доброго времени суток!
Есть ли у кого-нибудь модуль записи корзины в базу данных?
create table s_carts (code varchar(255) not null, user_id int(11), cart text, primary key (user_id, code)) default charset=utf8
public function cart_to_base()
{
$query = $this->db->placehold("DELETE FROM __carts WHERE code=?", $_COOKIE['shopping_cart_code']);
$this->db->query($query);
if($_SESSION['user_id']){
$query = $this->db->placehold("DELETE FROM __carts WHERE user_id=?", $_SESSION['user_id']);
$this->db->query($query);
}
if($_SESSION['shopping_cart']){
$query = $this->db->placehold("INSERT IGNORE INTO __carts SET code=?, user_id=?, cart=?", $_COOKIE['shopping_cart_code'], 0, serialize((array)$_SESSION['shopping_cart']));
$this->db->query($query);
if($_SESSION['user_id']){
$query = $this->db->placehold("INSERT IGNORE INTO __carts SET code=?, user_id=?, cart=?", '', $_SESSION['user_id'], serialize((array)$_SESSION['shopping_cart']));
$this->db->query($query);
}
}
}
public function base_to_cart($param, $add='max')
{
if(empty($param)) return;
// $this->db->query("SELECT cart FROM __carts WHERE code=? OR user_id=? LIMIT 1", $param, $param);
$this->db->query("SELECT cart FROM __carts WHERE code=? OR (user_id>0 AND user_id=?) LIMIT 1", $param, $param);
if($c=$this->db->result('cart'))
$bcs = unserialize($c);
if ($bcs){
if($add=='max'){
if(is_array($bcs))foreach ($bcs as $variant_id => $amount) {
if(isset($_SESSION['shopping_cart'][$variant_id]))
$_SESSION['shopping_cart'][$variant_id]=max($_SESSION['shopping_cart'][$variant_id], (int)$amount);
else
$_SESSION['shopping_cart'][$variant_id]=$amount;
}
}else
$_SESSION['shopping_cart']=$bcs;
}
$this->check_cart();
}
public function check_cart()
{
$sc=(array)$_SESSION['shopping_cart'];
$variant_ids=array_keys($sc);
if(empty($variant_ids))
return;
$_SESSION['shopping_cart']=array();
$variants=$this->variants->get_variants(array('id' => $variant_ids));
if(is_array($variants))foreach ($variants as $variant) {
$vids[]=$variant->id;
}
if(is_array($variants))foreach ($variants as $variant) {
$id=$variant->id;
if(!($sc[$id]>0))continue;
if($variant->infinity)
$_SESSION['shopping_cart'][$id]=$sc[$id];
elseif($sc[$id]<=$variant->stock)
$_SESSION['shopping_cart'][$id]=$sc[$id];
elseif($variant->stock>0)
$_SESSION['shopping_cart'][$id]=$variant->stock;
}
}
// Если товар существует, добавим его в корзину
if(!empty($variant) && ($variant->stock>0) )
{
// Не дадим больше чем на складе
$amount = min($amount, $variant->stock);
$_SESSION['shopping_cart'][$variant_id] = intval($amount);
$this->cart_to_base();
unset($_SESSION['shopping_cart'][$variant_id]);
$this->cart_to_base();
unset($_SESSION['shopping_cart']);
unset($_SESSION['coupon_code']);
$this->cart_to_base();
public function get_cart()
{
$cart = new stdClass();
$cart->purchases = array();
$cart->total_price = 0;
$cart->total_products = 0;
$cart->coupon = null;
$cart->discount = 0;
$cart->coupon_discount = 0;
if(!isset($_COOKIE['shopping_cart_code'])){
$sid=session_id();
$_COOKIE['shopping_cart_code']=$sid;
setcookie("shopping_cart", $sid, time()+365*24*3600, '/');
$this->cart->base_to_cart($_COOKIE['shopping_cart_code']);
}
$_SESSION['user_id'] = $user_id;
$this->cart->base_to_cart($user_id);
$this->cart->cart_to_base();
$_SESSION['user_id'] = $user_id;
$this->cart->base_to_cart($user_id);
$this->cart->cart_to_base();
public function base_to_cart($param, $add='max')
{
if(empty($param)) return;
// $this->db->query("SELECT cart FROM __carts WHERE code=? OR user_id=? LIMIT 1", $param, $param);
$this->db->query("SELECT cart FROM __carts WHERE code=? OR (user_id>0 AND user_id=?) LIMIT 1", $param, $param);
if($c=$this->db->result('cart'))
$bcs = unserialize($c);
if ($bcs){
if($add=='max'){
if(is_array($bcs))foreach ($bcs as $variant_id => $amount) {
if(isset($_SESSION['shopping_cart'][$variant_id]))
$_SESSION['shopping_cart'][$variant_id]=max($_SESSION['shopping_cart'][$variant_id], (int)$amount);
else
$_SESSION['shopping_cart'][$variant_id]=$amount;
}
}else
$_SESSION['shopping_cart']=$bcs;
}
$this->check_cart();
$this->cart_to_base();
}
Это id вариантаВот с этим: $variant_id не совсем ясно, поясните пожалуйста.