[v0.9] ShoppingCart
[v0.9] ShoppingCart
Библиотека корзины товаров.
скачать - http://code.google.com/p/yiiext/downloads/list
полная и актуальная документация в архиве.
скачать - http://code.google.com/p/yiiext/downloads/list
полная и актуальная документация в архиве.
Последний раз редактировалось pirrat 2010.06.26, 19:26, всего редактировалось 7 раз.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: ShoppingCart
Понравилось:
1. CMap.
2. То, что можно таким образом работать с любыми компонентами AR не прописывая ничего в самих моделях.
3. Возможности по заданию количества и подсчёту цен.
Не доделано или не предусмотрено:
1. Поведение делает допущения о именовании полей в модели AR. Они могут и не так называться.
2. Политика по ценам у магазинов бывает разная. Некоторые предпочитают не менять цен уже положенных в корзину товаров.
Вопросы:
1. С анонимными пользователями работать будет?
2. Почему getTotal() возвращает float?
Предлагаю сделать общий компонент на основе наших корзинок.
1. CMap.
2. То, что можно таким образом работать с любыми компонентами AR не прописывая ничего в самих моделях.
3. Возможности по заданию количества и подсчёту цен.
Не доделано или не предусмотрено:
1. Поведение делает допущения о именовании полей в модели AR. Они могут и не так называться.
2. Политика по ценам у магазинов бывает разная. Некоторые предпочитают не менять цен уже положенных в корзину товаров.
Вопросы:
1. С анонимными пользователями работать будет?
2. Почему getTotal() возвращает float?
Предлагаю сделать общий компонент на основе наших корзинок.
Нравится Yii? Давайте сделаем его лучше!.
Re: ShoppingCart
по поводу именования полей:
можно сделать так:
создать интерфейс, который будут обязаны реализовать модели товаров, а в корзине проверять реализуют ли они его ,и если нет кидать исключение.
в интерфейсе будут 2 метода
getPrice() и getId().
С анонимными пользователями работает на ура, при этом после авторизации пользователя корзина сохранятеся.
> Почему getTotal() возвращает float?
потому что ошибка, до рефакторинга этот метод был getCost(), а после забыл обновить комментарий
>Предлагаю сделать общий компонент на основе наших корзинок.
В лс обсудим)
можно сделать так:
создать интерфейс, который будут обязаны реализовать модели товаров, а в корзине проверять реализуют ли они его ,и если нет кидать исключение.
в интерфейсе будут 2 метода
getPrice() и getId().
С анонимными пользователями работает на ура, при этом после авторизации пользователя корзина сохранятеся.
> Почему getTotal() возвращает float?
потому что ошибка, до рефакторинга этот метод был getCost(), а после забыл обновить комментарий
>Предлагаю сделать общий компонент на основе наших корзинок.
В лс обсудим)
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: ShoppingCart
Отсюда поподробнее пжл, что значит менять цены? вручную что ли?Sam Dark писал(а):Некоторые предпочитают не менять цен уже положенных в корзину товаров.
Жду Yii 3!
Re: ShoppingCart
я думаю Сэм имел ввиду следующие:
при данной реализации, цены товаров каждый раз берутся из модели и соответственно в корзине они обновляются при каждой загрузки.
Может быть такая ситуация, что пользователь положил в корзину товар по одной цене, а она через какое то время изменилась: пользователь может быть немного не доволен...
Хочу пояснить: я подразумеваю что корзина и заказ это разные сущности, и пока товары в корзине, цена может меняться, но когда товары из корзины оформляются как заказ, вот тогда ставится фиксированная цена + применяются скидки и тд и тп...
при данной реализации, цены товаров каждый раз берутся из модели и соответственно в корзине они обновляются при каждой загрузки.
Может быть такая ситуация, что пользователь положил в корзину товар по одной цене, а она через какое то время изменилась: пользователь может быть немного не доволен...
Хочу пояснить: я подразумеваю что корзина и заказ это разные сущности, и пока товары в корзине, цена может меняться, но когда товары из корзины оформляются как заказ, вот тогда ставится фиксированная цена + применяются скидки и тд и тп...
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: ShoppingCart
Все верное пока человек не сделал заказ, то цены могут и должны меняться в корзине.
Ведь если не будут меняться а товар наоборот подешевел, а в корзине осталась старая цена,
то клиент опять "немножко не доволен" (с).
Ведь если не будут меняться а товар наоборот подешевел, а в корзине осталась старая цена,
то клиент опять "немножко не доволен" (с).
Жду Yii 3!
Re: ShoppingCart
Я допустил ошибку - написал довод не проверив его!
при восстановлении из сессии коллекции моделей, данные НЕ обновляются: т.е. в нашем случае цены отдаются, такие как были при сохранении.
изменить такую ситуацию просто, дописать в подведении CartPositionBehaviour метод
в новой версии обязательно это учту!
думаю целесообразно, вынести данное поведение в настройку компонента...
при восстановлении из сессии коллекции моделей, данные НЕ обновляются: т.е. в нашем случае цены отдаются, такие как были при сохранении.
изменить такую ситуацию просто, дописать в подведении CartPositionBehaviour метод
Код: Выделить всё
public function __wakeup()
{
$this->owner->refresh();
}
думаю целесообразно, вынести данное поведение в настройку компонента...
Re: [v0.2beta] ShoppingCart
Обновил пост, а так же обновилось само расширение до версии 0.2
changelog:
1)изменена политика именования полей:
Модели должны реализовывать интерфейс ICartPosition и описать два метода: getId() и getPrice(), иначе выбросит исключение
2)Изменено поведение моделей при восстановлении из сессии: данные обновляются при каждой загрузки.
3) добавлено св-во компонента, при изменение которого в false, поведение моделей при восстановлении из сессии меняется: данные не обновляются.
4)компонент был выделен как отдельное расширение и базируется в директории protected/extensions/CShoppingCart
changelog:
1)изменена политика именования полей:
Модели должны реализовывать интерфейс ICartPosition и описать два метода: getId() и getPrice(), иначе выбросит исключение
2)Изменено поведение моделей при восстановлении из сессии: данные обновляются при каждой загрузки.
3) добавлено св-во компонента, при изменение которого в false, поведение моделей при восстановлении из сессии меняется: данные не обновляются.
4)компонент был выделен как отдельное расширение и базируется в директории protected/extensions/CShoppingCart
Re: [v0.2beta] ShoppingCart
Расширение перебазировано в проект yiiext
http://code.google.com/p/yiiext/
http://code.google.com/p/yiiext/
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [v0.2beta] ShoppingCart
Как насчёт вот такой возможности: http://habrahabr.ru/blogs/php/78774/ ?
Нравится Yii? Давайте сделаем его лучше!.
Re: [v0.2beta] ShoppingCart
идея хорошая, но нужно понять целесообразность установки локов на товар.
с одной стороны - это логичо, если проводить аналогию с корзиной в магазине, то положив товар в корзину, он исчезает с полки и другой человек уже не может его забрать...
с другой - мне кажется, что лок надо ставить не в момент когда товар положен в корзину, а когда корзина оформляется как заказ(хотя очень сильно такое поведение зависит от ситуации) .
В любом случае такой функционал мы можем реализовать как поведение корзины, с возможностью его подключать и отключать!
по реализации такого функционала:
бегло глянув реализацию сессий в yii, нашел там обработчик destroySession, который по идее вызывается при сборке мусора, и перерузив его мы можем реализовать подобный функционал по снятию локов...
с одной стороны - это логичо, если проводить аналогию с корзиной в магазине, то положив товар в корзину, он исчезает с полки и другой человек уже не может его забрать...
с другой - мне кажется, что лок надо ставить не в момент когда товар положен в корзину, а когда корзина оформляется как заказ(хотя очень сильно такое поведение зависит от ситуации) .
В любом случае такой функционал мы можем реализовать как поведение корзины, с возможностью его подключать и отключать!
по реализации такого функционала:
бегло глянув реализацию сессий в yii, нашел там обработчик destroySession, который по идее вызывается при сборке мусора, и перерузив его мы можем реализовать подобный функционал по снятию локов...
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [v0.2beta] ShoppingCart
Текущий прогресс по расширению:
[*] Проверки интерфейса изменены на нативные проверки PHP.
[*] Класс переименован в CShoppingCart.
[+] Написаны модульные тесты.
[+] Единичные элементы можно складывать в корзинку как в массив (не очень хорошо оттестировано).
Всплыли первые проблемы с CMap:
— Использование count($cart) и количество однотипного товара (в приципе не очень критично).
— Запихивание в корзинку неподходящей модели:
[*] Проверки интерфейса изменены на нативные проверки PHP.
[*] Класс переименован в CShoppingCart.
[+] Написаны модульные тесты.
[+] Единичные элементы можно складывать в корзинку как в массив (не очень хорошо оттестировано).
Всплыли первые проблемы с CMap:
— Использование count($cart) и количество однотипного товара (в приципе не очень критично).
— Запихивание в корзинку неподходящей модели:
Код: Выделить всё
$cart = new CShoppingCart();
$cart[] = Post::model()->findByPk(1);
Нравится Yii? Давайте сделаем его лучше!.
Re: [v0.2beta] ShoppingCart
исправил "Запихивание в корзинку неподходящей модели".
http://code.google.com/p/yiiext/source/detail?r=69
я предполагал что count возвращает кол-во позиций, а getTotal - кол-во товаров, так что поидее все верно.
Дописал тесты.
Все тесты проходит успешно.
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
С count() всё более-менее неплохо.
Код: Выделить всё
$this->setUp();
$cart = new CShoppingCart();
// Почему тут 1? Почему не 2 или ничего? Можно ли получить 1 автоматом?
$cart[1] = Post::model()->findByPk(1);
Нравится Yii? Давайте сделаем его лучше!.
Re: [v0.2beta] ShoppingCart
да я ошибся в написании теста, тут ключ не нужен, ключ сам устанавливается через метод getId
закомитил.
Зы: все время забываю при комите, добавить комментарий к ревизии(
закомитил.
Зы: все время забываю при комите, добавить комментарий к ревизии(
Re: [v0.2beta] ShoppingCart
Нужно обсудить вопрос именования методов.
Поскольку например есть метод count и метод getTotal.
надо привести к одному виду, либо все без приставки get, либо все с ней.
Так же надо бы перевести все комментарии на En.
После чего думаю, можно давать статус первой релиз версии расширению, если не будет предложении по добавлению функционала.
Поскольку например есть метод count и метод getTotal.
надо привести к одному виду, либо все без приставки get, либо все с ней.
Так же надо бы перевести все комментарии на En.
После чего думаю, можно давать статус первой релиз версии расширению, если не будет предложении по добавлению функционала.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [v0.2beta] ShoppingCart
put, remove — эти так лучше и оставить.
getTotal — можно переименовать, чтобы отражал суть. Например, в getItemsCount.
getCost — вроде нормально.
saveAsOrder — это что?
«перевести все комментарии на En» — могу взять на себя.
getTotal — можно переименовать, чтобы отражал суть. Например, в getItemsCount.
getCost — вроде нормально.
saveAsOrder — это что?
«перевести все комментарии на En» — могу взять на себя.
Нравится Yii? Давайте сделаем его лучше!.
Re: [v0.2beta] ShoppingCart
saveAsOrder - это я забыл удалить...
согласен с переименованием getTotal
Закомитил все вышесказанное..
Я не против, так как умею читать на en, а вот писать хоть и могу, но часто с ошибками)«перевести все комментарии на En» — могу взять на себя.
согласен с переименованием getTotal
Закомитил все вышесказанное..
Re: [v0.5 rc1] ShoppingCart
ShoppingCart был изменен.
и имеет версию v0.5 rc2
Исправлены ошибки:
При восстановлении из сессии была ошибка с обновлением кол-ва товаров.
Неверно был перегружен метод add класса CMap.
и ещё что то по мелочи.
Изменен метод put - теперь работает так:
когда вызывается метод, товар добавляется в корзину, если такой товар там уже есть, то его кол-во не пересчитывается как ранее, а складывается.
например:
вызвав 2 раза метод put
В корзине окажется 1 товар в кол-ве 2шт.
Так же был добавлен метод update, он обновляет позицию в корзине.
Если товара не было, то он добавляется в корзину, если был, то объект переписывается заново.
и имеет версию v0.5 rc2
Исправлены ошибки:
При восстановлении из сессии была ошибка с обновлением кол-ва товаров.
Неверно был перегружен метод add класса CMap.
и ещё что то по мелочи.
Изменен метод put - теперь работает так:
когда вызывается метод, товар добавляется в корзину, если такой товар там уже есть, то его кол-во не пересчитывается как ранее, а складывается.
например:
вызвав 2 раза метод put
Код: Выделить всё
$sc->put($product,1);
$sc->put($product,1);
Так же был добавлен метод update, он обновляет позицию в корзине.
Если товара не было, то он добавляется в корзину, если был, то объект переписывается заново.
Re: [v0.5 rc2] ShoppingCart
Не прошло и года, компонент обновился.
1) добавлены события onUpdatePoistion,onRemovePosition.
2) добавлена простейшая система скидок.
3) добавлены и изменены методы.
4) написана актуальная и полная документация (пока что только на русском)
скачать последнею версию можно тут:
http://code.google.com/p/yiiext/downloads/list
1) добавлены события onUpdatePoistion,onRemovePosition.
2) добавлена простейшая система скидок.
3) добавлены и изменены методы.
4) написана актуальная и полная документация (пока что только на русском)
скачать последнею версию можно тут:
http://code.google.com/p/yiiext/downloads/list