AnrDaemon
Продвинутый новичок
Логично.в сессии "id корзины"
Логично.в сессии "id корзины"
Кстати код там даже более менее оформлен и отформатирован. Но вот вся бизнес логика - через ж...Предлагают изучать принципы, а не код.
В том то и дело, что абсолютно все опенсорсные движки интернет магазинов - очень сомнительного качества внутри@Yoskaldyr, разовьем идею. Прежде чем писать свое нужно посмотреть несколько готовых продуктов.
Скажу сразу идеального я не нашел. Даже сам к такому не приблизился.
http://fcenter.ru/basket/buy-from-string?goods=108766:1,109240:1,128560:1,116116:1возможности фиксировать несколько вариантов закупки и поделиться ими по ссылке.
разумеется@AnrDaemon, fcenter - не смог опознать движок. Самопис ?
<?php
class ModelShopBasket {
// Получить список товаров в корзине
function getList(){
session_start();
// unset($GLOBALS['_SESSION']['basket']);
// Собираем Id-товаров в корзине
$recordsIds = array();
foreach($GLOBALS['_SESSION']['basket'] as $k => $v){
$recordsIds[] = $k;
}
// Получаем информацию о товарах
# $rows = ModelShopProduct::getByIds($recordsIds);
# $rowsWithKeyId = array();
# foreach($rows as $k => $v){
# $rowsWithKeyId[ $v['uid'] ] = $v;
# }
// Отправляем итоговый массив
# $listRows = array();
# foreach($GLOBALS['_SESSION']['basket'] as $k => $v){
#
# }
$rows = ModelShopProduct::getByIds($recordsIds);
$rowsMerge = array();
foreach($rows as $k => $v){
$v['CUSTOM_count'] = $GLOBALS['_SESSION']['basket'][$v['uid']]['count'];
$rowsMerge[] = $v;
}
return $rowsMerge;
# return $GLOBALS['_SESSION']['basket'];
}
// Получить кол-во товаров в корзине
function getCount(){
session_start();
$c = count($GLOBALS['_SESSION']['basket']);
return $c;
}
// Добавить 1 товар в корзину
// @ recordId
function add($recordId){
// Получаем информацию о товаре
$row = ModelShopProduct::getById($recordId);
$row = $row[0];
// Заносим в сессию и после данная информация пойдет в serialize-заказа (order)
session_start();
$GLOBALS['_SESSION']['basket'][$recordId]['count'] = 1;
// Всю данную информацию выбираем по Id-записи из БД
// $GLOBALS['_SESSION']['basket'][$recordId]['price'] = $row['price'];
// $GLOBALS['_SESSION']['basket'][$recordId]['uid'] = $recordId;
// $GLOBALS['_SESSION']['basket'][$recordId]['info']['title'] = $row['title'];
// $GLOBALS['_SESSION']['basket'][$recordId]['info']['article'] = $row['article'];
// $GLOBALS['_SESSION']['basket'][$recordId]['info']['pic'] = $row['pic'];
}
// Обновляем кол-во 1-ого товар в корзине
// @ recordId
function updateCountById($recordId, $count = 1){
session_start();
$GLOBALS['_SESSION']['basket'][$recordId]['count'] = $count;
}
// Удалить товар из корзины
// @ recordId
function delete($recordId){
session_start();
unset($GLOBALS['_SESSION']['basket'][$recordId]);
}
// Очистить всю корзину
// @ recordId
function clearAll($recordId){
session_start();
unset($GLOBALS['_SESSION']['basket']);
}
// Получить итоговую стоимость товаров в корзине
function getTotal(){
$row = self::getList(); // получаем содержимое корзины
$costSum = 0; // Итого
foreach($row as $k => $v){
$cost = $v['CUSTOM_count']*$v['price'];
$costSum += $cost;
}
return $costSum;
}
// Проверить наличие товара(товаров в корзине)
// @ recordId
function exists($recordId){
session_start();
if($GLOBALS['_SESSION']['basket'][$recordId]['count'] > 0){
return true;
} else {
return false;
}
}
}
?>
После блокировки ни один другой скрипт не может получить доступ к этому же файлу сессии, пока он не будет закрыт или при завершении скрипта, или при вызове функции session_write_close().
А с какого перепугу у тебя session_start() по классу раскидана?Вот что получилось: