[v0.9] ShoppingCart
-
- Сообщения: 110
- Зарегистрирован: 2010.02.05, 01:58
- Откуда: Нижний Новгород
- Контактная информация:
Re: [v0.7] ShoppingCart
Спасибо за расширение!
Несколько вопросов:
1. На всех страницах, кроме непосредственно корзины, отображается только сумма всех товаров в корзине (getCost()). Однако, каждый раз из БД выбираются все данные по всем сохраненным товарам. Как бы отключить такое поведение?
2. Следствие первого вопроса. При входе в админ-панель, корзина продолжает дергать данные из БД. Как это отключить, скажем, для отдельного контроллера?
Несколько вопросов:
1. На всех страницах, кроме непосредственно корзины, отображается только сумма всех товаров в корзине (getCost()). Однако, каждый раз из БД выбираются все данные по всем сохраненным товарам. Как бы отключить такое поведение?
2. Следствие первого вопроса. При входе в админ-панель, корзина продолжает дергать данные из БД. Как это отключить, скажем, для отдельного контроллера?
Re: [v0.7] ShoppingCart
Шикарное расширение, спасибо огромное!!!!
Нашел один "недостаток". У меня все модели товаров находятся в модуле catalog. А виджет карзины - на каждой странце сайта. Так вот, когда я нахожусь вне модуля catalog, yii ничего не знает о моделях товаров. Но shoppingCart (который используется в виджете корзины), вместо того, чтобы генерировать ошибку, завершает приложение.
Рецепт прост - заранее импортировать необходимые модели в конфиге в секции import. Но об этом нужно написать в документации, так как ошибка не выдается, и сразу не поймешь из-за чего ты получаешь пустую страницу.
Нашел один "недостаток". У меня все модели товаров находятся в модуле catalog. А виджет карзины - на каждой странце сайта. Так вот, когда я нахожусь вне модуля catalog, yii ничего не знает о моделях товаров. Но shoppingCart (который используется в виджете корзины), вместо того, чтобы генерировать ошибку, завершает приложение.
Рецепт прост - заранее импортировать необходимые модели в конфиге в секции import. Но об этом нужно написать в документации, так как ошибка не выдается, и сразу не поймешь из-за чего ты получаешь пустую страницу.
Re: [v0.7] ShoppingCart
Есть предложение ввести такой параметр как Валюта.
Типа так
и во всех методах, где возвращается цена, возвращать отформатированное значение, например как
вместо
Типа так
Код: Выделить всё
public $currency = 'RUR';
Код: Выделить всё
return Yii::app()->NumberFormatter->formatCurrency($price, $this->currency);
Код: Выделить всё
return $price;
-
- Сообщения: 110
- Зарегистрирован: 2010.02.05, 01:58
- Откуда: Нижний Новгород
- Контактная информация:
Re: [v0.7] ShoppingCart
Я сделал разные конфиги для админки и для пользовательской части, убрав из конфига для админки подключение компонента shoppingCart (в секции import и в секции components).
Теперь, если в корзине лежит хоть один товар, админка не отображается. Никаких логов, ничего - просто белый экран.
Если товары из корзины удалить - все нормально.
Примерно то же самое описал несколькими постами выше mitaichik. Но у меня никаких обращений к корзине в админке нет.
И я не хочу импортировать файлы корзины в админке - так как при этом на каждой странице дергаются данные о товарах из БД.
Есть ли другое решение проблемы?
Теперь, если в корзине лежит хоть один товар, админка не отображается. Никаких логов, ничего - просто белый экран.
Если товары из корзины удалить - все нормально.
Примерно то же самое описал несколькими постами выше mitaichik. Но у меня никаких обращений к корзине в админке нет.
И я не хочу импортировать файлы корзины в админке - так как при этом на каждой странице дергаются данные о товарах из БД.
Есть ли другое решение проблемы?
- Darth_Ixis
- Сообщения: 105
- Зарегистрирован: 2010.08.23, 10:03
- Откуда: KZ, Almaty
Re: [v0.7] ShoppingCart
Этот код
выдает
А вот этот код
работает исправно.
Что это за магия такая? Почем нужно вызывать модель до исп. shoppingCart ?
Код: Выделить всё
public function actionEdit()
{
var_dump( Yii::app()->shoppingCart->getCost() );
Yii::app()->end();
}
Код: Выделить всё
Fatal error: CComponent::__call(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "CTimestampBehavior" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in Z:\home\shopcms\vadim\lib\yii\base\CComponent.php on line 260
Call Stack:
0.0009 341216 1. {main}() Z:\home\shopcms\vadim\frontend.php:0
0.0322 2624840 2. CWebApplication->runEnd() Z:\home\shopcms\vadim\frontend.php:13
0.0322 2625040 3. CComponent->__call() Z:\home\shopcms\vadim\lib\yii\base\CComponent.php:0
0.0322 2625288 4. call_user_func_array() Z:\home\shopcms\vadim\lib\yii\base\CComponent.php:261
0.0322 2625472 5. WebApplicationEndBehavior->runEnd() Z:\home\shopcms\vadim\lib\yii\base\CComponent.php:0
0.0336 2636800 6. CApplication->run() Z:\home\shopcms\vadim\application\components\behaviors\WebApplicationEndBehavior.php:28
0.0337 2636800 7. CWebApplication->processRequest() Z:\home\shopcms\vadim\lib\yii\base\CApplication.php:155
0.0358 2836168 8. CWebApplication->runController() Z:\home\shopcms\vadim\lib\yii\web\CWebApplication.php:121
0.0406 3263048 9. CController->run() Z:\home\shopcms\vadim\lib\yii\web\CWebApplication.php:328
0.0416 3304984 10. CController->runActionWithFilters() Z:\home\shopcms\vadim\lib\yii\web\CController.php:257
0.0416 3304984 11. CController->runAction() Z:\home\shopcms\vadim\lib\yii\web\CController.php:278
0.0484 3384544 12. CInlineAction->runWithParams() Z:\home\shopcms\vadim\lib\yii\web\CController.php:300
0.0485 3385160 13. ShoppingCartController->actionEdit() Z:\home\shopcms\vadim\lib\yii\web\actions\CInlineAction.php:50
0.2512 6626856 14. EShoppingCart->getCost() Z:\home\shopcms\vadim\application\controllers\frontend\ShoppingCartController.php:30
0.2517 6638144 15. Product->getSumPrice() Z:\home\shopcms\vadim\application\extensions\shoppingCart\EShoppingCart.php:145
0.2517 6638344 16. CActiveRecord->__call() Z:\home\shopcms\vadim\lib\yii\db\ar\CActiveRecord.php:0
0.2517 6638464 17. CComponent->__call() Z:\home\shopcms\vadim\lib\yii\db\ar\CActiveRecord.php:213
Код: Выделить всё
public function actionEdit()
{
Product::model();
var_dump( Yii::app()->shoppingCart->getCost() );
Yii::app()->end();
}
Что это за магия такая? Почем нужно вызывать модель до исп. shoppingCart ?
Re: [v0.7] ShoppingCart
Ну судя по ошибке у вас закешировано что-то криво, даже не что-то, а CTimestampBehaviorDarth_Ixis писал(а):работает исправно.Код: Выделить всё
public function actionEdit() { Product::model(); var_dump( Yii::app()->shoppingCart->getCost() ); Yii::app()->end(); }
Что это за магия такая? Почем нужно вызывать модель до исп. shoppingCart ?
- Darth_Ixis
- Сообщения: 105
- Зарегистрирован: 2010.08.23, 10:03
- Откуда: KZ, Almaty
Re: [v0.7] ShoppingCart
Проверил в другом браузере, с новой сессией, всё окей.
А отчего криво закешироваться могло?
Update
А нет, не работает. Если в корзине есть добавленные товары, выскакивает эта ошибка.
Впрочем, если вызвать модель перед вызовом метода getCost(), всё работает.
Кто-нибудь может объяснить более подробно, почему так?
Update 2
Проблема решена. Нужно вручную подключать все классы используемые в модели. В моём случае это CTimestampBehavior.
А отчего криво закешироваться могло?
Update
А нет, не работает. Если в корзине есть добавленные товары, выскакивает эта ошибка.
Впрочем, если вызвать модель перед вызовом метода getCost(), всё работает.
Кто-нибудь может объяснить более подробно, почему так?
Update 2
Проблема решена. Нужно вручную подключать все классы используемые в модели. В моём случае это CTimestampBehavior.
- Darth_Ixis
- Сообщения: 105
- Зарегистрирован: 2010.08.23, 10:03
- Откуда: KZ, Almaty
Re: [v0.7] ShoppingCart
Код: Выделить всё
$positions = Yii::app()->shoppingCart->getPositions();
Код: Выделить всё
foreach ($positions as $position) {
unset($position->imagePacks);
}
Почему так? Ведь в $positions должна содержаться копия данных и манипуляция над ними никак не должна влиять на функцию "Yii::app()->shoppingCart->getPositions()".
Делал так.
Код: Выделить всё
$positions_copy = $positions;
foreach ($positions_copy as $position) {
unset($position->imagePacks);
}
Upd
Нужно учить матчасть. Всё дело в clone.
-
- Сообщения: 5
- Зарегистрирован: 2011.06.17, 22:33
Re: [v0.7] ShoppingCart
Друзья, помогите пожалуйста решить проблему! Использую версию ShoppingCart 0.8 и на продакшене выдается фатал еррор:
ShoppingCart::getAttributes() [<a href='shoppingcart.getattributes'>shoppingcart.getattributes</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Product" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in ..... /protected/components/ShoppingCart.php on line 21
Локально все работает отлично. Подскажите пожалуйста в чем может быть ошибка. Про предыдущий пост где написано о ручной загрузке классов в курсе, пробовал через Yii::import, не помогает. Спасибо.
ShoppingCart::getAttributes() [<a href='shoppingcart.getattributes'>shoppingcart.getattributes</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Product" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in ..... /protected/components/ShoppingCart.php on line 21
Локально все работает отлично. Подскажите пожалуйста в чем может быть ошибка. Про предыдущий пост где написано о ручной загрузке классов в курсе, пробовал через Yii::import, не помогает. Спасибо.
Re: [v0.7] ShoppingCart
Помогите с обновлением корзины. Совсем запутался
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [v0.7] ShoppingCart
antonivanov
Похоже на десериализацию, очень странно, что Yii::import не помогает. Второй параметр при импорте выставлен в true?
Похоже на десериализацию, очень странно, что Yii::import не помогает. Второй параметр при импорте выставлен в true?
Нравится Yii? Давайте сделаем его лучше!.
-
- Сообщения: 5
- Зарегистрирован: 2011.06.17, 22:33
Re: [v0.7] ShoppingCart
Выставлен.Sam Dark писал(а):antonivanov
Похоже на десериализацию, очень странно, что Yii::import не помогает. Второй параметр при импорте выставлен в true?
Код: Выделить всё
public function init(){
Yii::import('application.models.Product',true);
$this->restoreFromSession();
}
Много что пробовал, результатов нет...
- Darth_Ixis
- Сообщения: 105
- Зарегистрирован: 2010.08.23, 10:03
- Откуда: KZ, Almaty
Re: [v0.7] ShoppingCart
Импортируйте через конфиг.
-
- Сообщения: 5
- Зарегистрирован: 2011.06.17, 22:33
Re: [v0.7] ShoppingCart
Код: Выделить всё
'import'=>array(
'application.models.*',
'application.models.Product',
'application.extensions.shoppingCart.*',
'application.components.*',
'application.extensions.yiidebugtb.*',
'application.vendors.Smarty.sysplugins.*',
'application.extensions.CAdvancedArBehavior',
),
-
- Сообщения: 5
- Зарегистрирован: 2011.06.17, 22:33
Re: [v0.7] ShoppingCart
Код: Выделить всё
'preload'=>array(
'log',
'viewRenderer',
'image',
'application.models.Product',
),
-
- Сообщения: 5
- Зарегистрирован: 2011.06.17, 22:33
Re: [v0.7] ShoppingCart
Добрый создатель сего модуля собственноручно прошарил мой проект и решил проблему добавлением "php_value session.auto_start 0" в .htaccess за что ему огромное спасибо!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [v0.7] ShoppingCart
Эээ, это имеет отношение к корзинке?
Нравится Yii? Давайте сделаем его лучше!.
Re: [v0.7] ShoppingCart
А может кто ни будь поделиться контроллером, который использует это расширение?
Интересно посмотреть реализацию в бою
Интересно посмотреть реализацию в бою
Re: [v0.7] ShoppingCart
Я использую версию version 0.5 rc2 !systemiv писал(а):А может кто ни будь поделиться контроллером, который использует это расширение?
Интересно посмотреть реализацию в бою
Код: Выделить всё
public function actionAddBasket()//добавление товара в корзину
{
if(Yii::app()->request->isAjaxRequest)//если пришел ajax-запрос
{
$item=Items::model()->findByPk((int)$_GET['id']);//ищем товар по ID
if($item and $item->txt_available==Items::AVAILABLE_YES)//товар есть и "доступен" для заказа
{
Yii::app()->shoppingCart->put($item);//добавляем товар в корзину
echo '<p>Товаров: <strong>'.Yii::app()->shoppingCart->getCount().' шт.</strong></p>';//возвращаем кол-во товаров
echo '<p>На сумму: <strong>'.Yii::app()->shoppingCart->getCost().' руб.</strong></p>';//сумму товаров
}
else
throw new CHttpException(404,'The requested page does not exist.');//товара нет
}
else
throw new CHttpException(404,'The requested page does not exist.');//запрос НЕ ajax'овский
}
public function actionDeleteBasket()//удаление товара из корзины
{
Yii::app()->shoppingCart->remove((int)$_GET['id']);//удаляем товар из корзины по ID
$this->redirect($this->createUrl('shop/basket'));
}
public function actionRecalcBasket()//пересчет товаров в корзине
{
if($_POST)//к нам пришел POST
{
foreach($_POST['Items'] as $itemBasket)//перебираем товары в корзине
{
Yii::app()->shoppingCart->update((int)$itemBasket['id'],$itemBasket['quantity']);//апдейтим у ID - кол-во
}
}
$this->redirect($this->createUrl('shop/basket'));
}
А это: сохранение товара в базе
Код: Выделить всё
//сохраняем детали заказа
foreach(Yii::app()->shoppingCart as $cart)
{
$cart->orderId=$orders->id;//ID заказа
$cart->priceTotal=($cart->quantity*$cart->price);//общая цена позиции
OrdersDetails::model()->add($cart);//сохраняем позицию заказа
}