Корзина Интернет Магазина

Yoskaldyr

"Спамер"
Партнер клуба
@antson, опенкарт очень неудачный пример для изучения :( Там жесть а не код. Хотя с другой стороны альтернативы то и нет :(
 

antson

Новичок
Партнер клуба
@Yoskaldyr, разовьем идею. Прежде чем писать свое нужно посмотреть несколько готовых продуктов.
Скажу сразу идеального я не нашел. Даже сам к такому не приблизился.

что мне не хватает - возможности фиксировать несколько вариантов закупки и поделиться ими по ссылке.
типа вот нужен компьютер тыц,тыц - имхо вот так можно набрать под ваши запросы.
 

Yoskaldyr

"Спамер"
Партнер клуба
@Yoskaldyr, разовьем идею. Прежде чем писать свое нужно посмотреть несколько готовых продуктов.
Скажу сразу идеального я не нашел. Даже сам к такому не приблизился.
В том то и дело, что абсолютно все опенсорсные движки интернет магазинов - очень сомнительного качества внутри :(

Ведь топик стартер задает ну очень странные вопросы (и это учитывая что он на форуме давно), поэтому если ему советовать опенкарт для изучения, то в будущем начнет задавать еще более странные вопросы.
Хотя может корзина там и нормально сделана, не помню уже. Последний раз в этом говне копался больше года назад и стараюсь забыть как страшный сон.
 

fixxxer

К.О.
Партнер клуба
А вот еще очень бесит, когда накидаешь в корзину всякого, обнаружишь, что был не залогинен, логинишься, гостевая корзина пропадает и замещается какой-то фигней, которую я кинул в корзину будучи залогиненным год назад. После такого обычно иду покупать в каком-нибудь другом месте.
 

AnrDaemon

Продвинутый новичок
Без понятия. Просто интересно стало, это тот функционал, который ты упоминал?
 

antson

Новичок
Партнер клуба
@AnrDaemon, в принципе да. единственное я думал, про шоркатер и сохранение в базе.
В варианте, что у них парсинг цен слишком упрощен для конкурентов
 

antson

Новичок
Партнер клуба
@AnrDaemon, я тому, что решение простейшее. и перечислив в такой строке интересующие артикулы можно на одной странице взять цены без обхода рубрик . Но может это моя параноя
 

Фанат

oncle terrible
Команда форума
@AnrDaemon, fcenter - не смог опознать движок. Самопис ?
разумеется
Причем этому движку больше лет чем иным участникам дискуссии.

А опенкарт неудачный пример тупо потому что в англоязычном инете корзиной называют целиком магазин
В то время как автору нужна реализация корзины в нашем пониманием - только корзины отдельно, списка товаров.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
еще можно в indexedDb - нет ограничений на размер, как с куками, и не пропадет, как сесия
очень модное сейчас направление
:) да, я работал с ним ... на фабрике, вот и шлю ... ммм ... кому подойдет
 
Последнее редактирование:

StalkerClasses

Новичок
Вот что получилось:
PHP:
<?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;
        }
    }
    
}
?>
 

StalkerClasses

Новичок
А для чего сессию нужно закрывать?
И что это значит?

После блокировки ни один другой скрипт не может получить доступ к этому же файлу сессии, пока он не будет закрыт или при завершении скрипта, или при вызове функции session_write_close().
 

AnrDaemon

Продвинутый новичок
Твой второй вопрос - это ответ на твой первый.
Если ты не собираешься писать в сессию в этом запросе, её надо закрыть, чтобы другие запросы могли при необходимости в неё что-то записать.
Естественно, это относится только к файловым сессиям.
 
Сверху