[v0.9] ShoppingCart

Выкладываем свои наработки
oleg
Сообщения: 58
Зарегистрирован: 2010.04.20, 09:19
Откуда: Россия, Воронеж

Re: [v0.7] ShoppingCart

Сообщение oleg »

Столкнулся с проблемой при работе с этим расширением. Попался один проект, в котором в корзину добавляется за раз 200-300 позиций и из-за этого метод ECartPositionBehaviour::__wakeup() не кисло нагружает базу при вызове CActiverRecord::refresh().

Так же хотел порекомендовать, возможность хранения позиций корзины в БД (можно было бы включать для авторизованных пользователей, например).
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: [v0.7] ShoppingCart

Сообщение Nafania »

Тут в теме проскакивает проблема с методом restoreFromSession у разных людей при использовании этого компонента.
Сейчас и сам с этим багом столкнулся.

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

    
include(CartController.php): failed to open stream: No such file or
directory (Z:\home\yii-1.1.8.r3324\framework\YiiBase.php:421)
Stack trace:
#0 unknown(0): spl_autoload_call()
#1
Z:\home\***\www\protected\extensions\yiiext\components\shoppingCart\EShoppingCart.php(36):
unserialize()
#2
Z:\home\***\www\protected\extensions\yiiext\components\shoppingCart\EShoppingCart.php(29):
EShoppingCart->restoreFromSession() 
Как его исправить пока идей нет.
Последний раз редактировалось Nafania 2011.09.06, 01:20, всего редактировалось 1 раз.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: [v0.7] ShoppingCart

Сообщение rak »

а можно взглянуть на код подключения корзины и версию?
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: [v0.7] ShoppingCart

Сообщение Nafania »

Версия 0.9.
Способ подключения стандартный, через конфиг.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: [v0.7] ShoppingCart

Сообщение rak »

возможно тут поможет подключение не через конфиг, с предварительным подключением модели, которая находится в корзине
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: [v0.7] ShoppingCart

Сообщение SpiLLeR »

Если есть возможность установи в php.ini:
unserialize_callback_func = 'spl_autoload_call'
Предупрежден - значит вооружен.
devKP.ru
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: [v0.7] ShoppingCart

Сообщение Nafania »

rak писал(а):возможно тут поможет подключение не через конфиг, с предварительным подключением модели, которая находится в корзине
SpiLLeR писал(а):Если есть возможность установи в php.ini:
unserialize_callback_func = 'spl_autoload_call'
это все какие-то костыли :)
Хотелось бы решить эту проблему в рамках самого компонента.
SpiLLeR писал(а):Если есть возможность установи в php.ini:
unserialize_callback_func = 'spl_autoload_call'
да и так тоже не работает.
Аватара пользователя
RSol
Сообщения: 325
Зарегистрирован: 2010.05.07, 08:36
Откуда: Северодонецк, Украина
Контактная информация:

Re: [v0.7] ShoppingCart

Сообщение RSol »

Вопрос:
в EShoppingCart не нужно ли добавить "applyDiscounts()":

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

    public function restoreFromSession() {
...
        $this->applyDiscounts();
    }
 
Аватара пользователя
RSol
Сообщения: 325
Зарегистрирован: 2010.05.07, 08:36
Откуда: Северодонецк, Украина
Контактная информация:

Re: [v0.7] ShoppingCart

Сообщение RSol »

нет это не правильно... (точнее не совсем правильно)

нужно думать...

проблема в том, что скидка не применяется если не меняется корзина.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: [v0.7] ShoppingCart

Сообщение Nafania »

Nafania писал(а):Тут в теме проскакивает проблема с методом restoreFromSession у разных людей при использовании этого компонента.
Сейчас и сам с этим багом столкнулся.

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

    
include(CartController.php): failed to open stream: No such file or
directory (Z:\home\yii-1.1.8.r3324\framework\YiiBase.php:421)
Stack trace:
#0 unknown(0): spl_autoload_call()
#1
Z:\home\***\www\protected\extensions\yiiext\components\shoppingCart\EShoppingCart.php(36):
unserialize()
#2
Z:\home\***\www\protected\extensions\yiiext\components\shoppingCart\EShoppingCart.php(29):
EShoppingCart->restoreFromSession()  
Как его исправить пока идей нет.
Я тут немного локализовал проблему, но опять же решения нет, если кто поможет, то буду рад.

Проблема возникает если к модели, попадающей в корзину, подключён фильтр CHtmlPurifier.
Так как фильтр наследуюется от CWidget, то у него есть параметр $_owner. У меня он равен CartController.
В Yii соответственно включен autoload и при ресторе корзины из сессии Yii пытается все объекты подцепить, но контроллер не находит.

Тут в рамках приложения 2 решения
1) отключить фильтр - не вариант
2) добавить в конфиг в import импорт контроллеров - костыль тот еще, но работает.

А вот в рамках компонента я не вижу решения.
Может быть, если есть возможность, каким-то образом при добавлении объекта в корзину можно его "очищать", то есть отрубать все поведения, фильтры итд итп, а при ресторе их подцеплять.
Или же вообще оказаться от хранения самих объектов, а хранить только PK и каждый раз объекты восстанавливать по PK, но это чревато изменениями объектов между сессиями.
Вообщем, помощь приветствуется.
Аватара пользователя
badenkov
Сообщения: 79
Зарегистрирован: 2009.06.22, 09:05
Откуда: Ижевск
Контактная информация:

Re: [v0.7] ShoppingCart

Сообщение badenkov »

Господа, возникла проблемы с этим расширением! В частности, с его системой скидок.
Мне нужно сделать две скидки, которые применяются цепочкой. В принципе алгоритм назначения простейший, поэтому достаточно просто всей корзине назначать discountPrice - но почему то не сохраняется в сессии этот discountPrice. А скидки применяются ведь только при изменении содержимого корзины.
Поэтому я попробовал назначать скидку каждому товару (тут и сохряняется нормально в сессии). Но используя метод addDiscountPrice - скидка постоянно растет просто с изменением содержимого корзины, никак нигде не учитывается сколько раз применяласть скидка. Когда несколько скидок тем более не понятно как учитывать - что применялось, к какому товару. У кого как решено это?
Vasiliy Baukin
Сообщения: 102
Зарегистрирован: 2011.02.04, 12:47

Re: [v0.7] ShoppingCart

Сообщение Vasiliy Baukin »

Уважаемые дамы и господа!

Посоветуйте пожалуйста, как лучше подрубить корзину, если мне нужно класть в корзину элементы обычного массива. Массив получается со стороннего сервиса, т.е. не является классическим DB ActiveRecord.

Правильно ли я понимаю, что надо делать какую-никакую модель и наследовать ее от CModel, делать ей implements, который требует корзина?
Если надо поступить именно так, то могу ли я тупо сделать модели setAttributes, а потом положить ее в корзину?

Побочный вопрос: как модели CModel прописать список атрибутов.. их ведь надо явно задать? Или какие насетил через setAttributes с safemode = Off, такие и можно считать?

Спасибо.
merphy
Сообщения: 3
Зарегистрирован: 2012.05.16, 08:59

Re: [v0.7] ShoppingCart

Сообщение merphy »

Помогите плз, не получается подключить.
Псевдоним "application.extensions.shoppingCart.EShoppingCart" неверен. Убедитесь, что он указывает на существующий PHP файл.
EShoppingCart.php лежит по пути \protected\extensions\shoppingСart\
В main.php:

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

'import'=>array(
        'application.models.*',
        'application.backends.models.*',
        'application.components.*',
        'application.extensions.shoppingCart.*',
    ),
'components'=>array(
        'shoppingCart' => array(
            'class' => 'application.extensions.shoppingCart.EShoppingCart',
        ),
        'user'=>array(
            // enable cookie-based authentication
            'allowAutoLogin'=>true,
        ), 
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: [v0.7] ShoppingCart

Сообщение nizsheanez »

пиши:
ext.shoppingСart.EShoppingCart
и в импорте вроде он не особо нужен.
merphy
Сообщения: 3
Зарегистрирован: 2012.05.16, 08:59

Re: [v0.7] ShoppingCart

Сообщение merphy »

Разобрался директория shoppingCart была сохранена через русскую букву С
merphy
Сообщения: 3
Зарегистрирован: 2012.05.16, 08:59

Re: [v0.7] ShoppingCart

Сообщение merphy »

nizsheanez писал(а):пиши:
ext.shoppingСart.EShoppingCart
и в импорте вроде он не особо нужен.
да прочитал и так прописал, вот ктото поиздевался в названии директории ))
mrchaos
Сообщения: 18
Зарегистрирован: 2011.03.31, 17:41

Re: [v0.7] ShoppingCart

Сообщение mrchaos »

Не соображу как модель построить для корзины. Содержимое корзины сохраняется в БД через модель или как? Думал что в сессии или кукесах...
kotchuprik
Сообщения: 75
Зарегистрирован: 2012.02.06, 19:33
Контактная информация:

Re: [v0.7] ShoppingCart

Сообщение kotchuprik »

mrchaos писал(а):Не соображу как модель построить для корзины. Содержимое корзины сохраняется в БД через модель или как? Думал что в сессии или кукесах...
зачем модель для корзины? то, что в корзине, хранится в сессии, как минимум иногда исходный код полезно смотреть. расширение отлично работает, для продукта имплементируете интерфейс с которым работает класс корзины и реализовываете пару методов описанных в интерфейсе. сама работа с корзиной (а именно вызов методов из класса для корзины) делается к примеру в контроллере и все
launchpro
Сообщения: 212
Зарегистрирован: 2011.08.10, 17:54

Re: [v0.7] ShoppingCart

Сообщение launchpro »

Друзья, помогите с проблемой...

Все подключит.

Но вот такой код:

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

$goods = Goods::model()->find('id_goods=:id_goods', array(':id_goods'=>$id));
        
Yii::app()->shoppingCart->put($goods);
Выдает ошибку:

Argument 1 passed to EShoppingCart::put() must be an instance of IECartPosition, instance of Goods given, called in Z:\home\shop.ru\www\protected\controllers\CartController.php on line 32 and defined
launchpro
Сообщения: 212
Зарегистрирован: 2011.08.10, 17:54

Re: [v0.7] ShoppingCart

Сообщение launchpro »

Рассказываю как решил задачку (если я не прав, то поправьте...)

В файле с расширения корзины EShoppingCart.php убрал в объявлениях функций

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

public function update(IECartPosition $position, $quantity){
...
}

public function put(IECartPosition $position, $quantity = 1){
...
}
 
Вот этот указание типа передаваемой переменной IECartPosition
т.е. теперь они выглядят вот так:

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

public function update($position, $quantity){
...
}

public function put($position, $quantity = 1){
...
}
 
И все заработало!
Ответить