[v0.9] ShoppingCart

Выкладываем свои наработки
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

[v0.9] ShoppingCart

Сообщение pirrat »

Библиотека корзины товаров.

скачать - http://code.google.com/p/yiiext/downloads/list
полная и актуальная документация в архиве.
Последний раз редактировалось pirrat 2010.06.26, 19:26, всего редактировалось 7 раз.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: ShoppingCart

Сообщение samdark »

Понравилось:
1. CMap.
2. То, что можно таким образом работать с любыми компонентами AR не прописывая ничего в самих моделях.
3. Возможности по заданию количества и подсчёту цен.

Не доделано или не предусмотрено:
1. Поведение делает допущения о именовании полей в модели AR. Они могут и не так называться.
2. Политика по ценам у магазинов бывает разная. Некоторые предпочитают не менять цен уже положенных в корзину товаров.

Вопросы:
1. С анонимными пользователями работать будет?
2. Почему getTotal() возвращает float?

Предлагаю сделать общий компонент на основе наших корзинок.
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: ShoppingCart

Сообщение pirrat »

по поводу именования полей:
можно сделать так:
создать интерфейс, который будут обязаны реализовать модели товаров, а в корзине проверять реализуют ли они его ,и если нет кидать исключение.
в интерфейсе будут 2 метода
getPrice() и getId().

С анонимными пользователями работает на ура, при этом после авторизации пользователя корзина сохранятеся.

> Почему getTotal() возвращает float?
потому что ошибка, до рефакторинга этот метод был getCost(), а после забыл обновить комментарий

>Предлагаю сделать общий компонент на основе наших корзинок.
В лс обсудим)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: ShoppingCart

Сообщение slavcodev »

Sam Dark писал(а):Некоторые предпочитают не менять цен уже положенных в корзину товаров.
Отсюда поподробнее пжл, что значит менять цены? вручную что ли?
Жду Yii 3!
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: ShoppingCart

Сообщение pirrat »

я думаю Сэм имел ввиду следующие:
при данной реализации, цены товаров каждый раз берутся из модели и соответственно в корзине они обновляются при каждой загрузки.

Может быть такая ситуация, что пользователь положил в корзину товар по одной цене, а она через какое то время изменилась: пользователь может быть немного не доволен...


Хочу пояснить: я подразумеваю что корзина и заказ это разные сущности, и пока товары в корзине, цена может меняться, но когда товары из корзины оформляются как заказ, вот тогда ставится фиксированная цена + применяются скидки и тд и тп...
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: ShoppingCart

Сообщение slavcodev »

Все верное пока человек не сделал заказ, то цены могут и должны меняться в корзине.
Ведь если не будут меняться а товар наоборот подешевел, а в корзине осталась старая цена,
то клиент опять "немножко не доволен" (с).
Жду Yii 3!
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: ShoppingCart

Сообщение pirrat »

Я допустил ошибку - написал довод не проверив его!
при восстановлении из сессии коллекции моделей, данные НЕ обновляются: т.е. в нашем случае цены отдаются, такие как были при сохранении.
изменить такую ситуацию просто, дописать в подведении CartPositionBehaviour метод

Код: Выделить всё

    public function __wakeup()
    {
            $this->owner->refresh();
    }  
в новой версии обязательно это учту!

думаю целесообразно, вынести данное поведение в настройку компонента...
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: [v0.2beta] ShoppingCart

Сообщение pirrat »

Обновил пост, а так же обновилось само расширение до версии 0.2

changelog:
1)изменена политика именования полей:
Модели должны реализовывать интерфейс ICartPosition и описать два метода: getId() и getPrice(), иначе выбросит исключение
2)Изменено поведение моделей при восстановлении из сессии: данные обновляются при каждой загрузки.
3) добавлено св-во компонента, при изменение которого в false, поведение моделей при восстановлении из сессии меняется: данные не обновляются.
4)компонент был выделен как отдельное расширение и базируется в директории protected/extensions/CShoppingCart
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: [v0.2beta] ShoppingCart

Сообщение pirrat »

Расширение перебазировано в проект yiiext
http://code.google.com/p/yiiext/
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [v0.2beta] ShoppingCart

Сообщение samdark »

Как насчёт вот такой возможности: http://habrahabr.ru/blogs/php/78774/ ?
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: [v0.2beta] ShoppingCart

Сообщение pirrat »

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

по реализации такого функционала:
бегло глянув реализацию сессий в yii, нашел там обработчик destroySession, который по идее вызывается при сборке мусора, и перерузив его мы можем реализовать подобный функционал по снятию локов...
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [v0.2beta] ShoppingCart

Сообщение samdark »

Текущий прогресс по расширению:

[*] Проверки интерфейса изменены на нативные проверки PHP.
[*] Класс переименован в CShoppingCart.
[+] Написаны модульные тесты.
[+] Единичные элементы можно складывать в корзинку как в массив (не очень хорошо оттестировано).

Всплыли первые проблемы с CMap:
— Использование count($cart) и количество однотипного товара (в приципе не очень критично).
— Запихивание в корзинку неподходящей модели:

Код: Выделить всё

$cart = new CShoppingCart();
$cart[] = Post::model()->findByPk(1);
 
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: [v0.2beta] ShoppingCart

Сообщение pirrat »

исправил "Запихивание в корзинку неподходящей модели".

http://code.google.com/p/yiiext/source/detail?r=69
Использование count($cart) и количество однотипного товара (в приципе не очень критично).
не понял.
я предполагал что count возвращает кол-во позиций, а getTotal - кол-во товаров, так что поидее все верно.

Дописал тесты.
Все тесты проходит успешно.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [v0.2beta] ShoppingCart

Сообщение samdark »

С count() всё более-менее неплохо.

Код: Выделить всё

$this->setUp();
$cart = new CShoppingCart();

// Почему тут 1? Почему не 2 или ничего? Можно ли получить 1 автоматом?
$cart[1] = Post::model()->findByPk(1);
 
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: [v0.2beta] ShoppingCart

Сообщение pirrat »

да я ошибся в написании теста, тут ключ не нужен, ключ сам устанавливается через метод getId
закомитил.
Зы: все время забываю при комите, добавить комментарий к ревизии(
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: [v0.2beta] ShoppingCart

Сообщение pirrat »

Нужно обсудить вопрос именования методов.
Поскольку например есть метод count и метод getTotal.
надо привести к одному виду, либо все без приставки get, либо все с ней.

Так же надо бы перевести все комментарии на En.

После чего думаю, можно давать статус первой релиз версии расширению, если не будет предложении по добавлению функционала.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [v0.2beta] ShoppingCart

Сообщение samdark »

put, remove — эти так лучше и оставить.
getTotal — можно переименовать, чтобы отражал суть. Например, в getItemsCount.
getCost — вроде нормально.
saveAsOrder — это что?

«перевести все комментарии на En» — могу взять на себя.
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: [v0.2beta] ShoppingCart

Сообщение pirrat »

saveAsOrder - это я забыл удалить...
«перевести все комментарии на En» — могу взять на себя.
Я не против, так как умею читать на en, а вот писать хоть и могу, но часто с ошибками)

согласен с переименованием getTotal


Закомитил все вышесказанное..
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: [v0.5 rc1] ShoppingCart

Сообщение pirrat »

ShoppingCart был изменен.
и имеет версию v0.5 rc2

Исправлены ошибки:
При восстановлении из сессии была ошибка с обновлением кол-ва товаров.
Неверно был перегружен метод add класса CMap.
и ещё что то по мелочи.

Изменен метод put - теперь работает так:
когда вызывается метод, товар добавляется в корзину, если такой товар там уже есть, то его кол-во не пересчитывается как ранее, а складывается.
например:
вызвав 2 раза метод put

Код: Выделить всё

$sc->put($product,1);
$sc->put($product,1); 
В корзине окажется 1 товар в кол-ве 2шт.

Так же был добавлен метод update, он обновляет позицию в корзине.
Если товара не было, то он добавляется в корзину, если был, то объект переписывается заново.
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: [v0.5 rc2] ShoppingCart

Сообщение pirrat »

Не прошло и года, компонент обновился.
1) добавлены события onUpdatePoistion,onRemovePosition.
2) добавлена простейшая система скидок.
3) добавлены и изменены методы.
4) написана актуальная и полная документация (пока что только на русском)

скачать последнею версию можно тут:
http://code.google.com/p/yiiext/downloads/list
Ответить