public function run() { // если находимся в контроллере оформления заказа, то не отображаем корзину. if ($this->controller->id == 'offer') { return; } Yii::app()->user->setState("shop_cart", Yii::app()->request->url); $products = ShopModule::getProductsFromCookie(); $this->render('cart', array('showPrice' => Yii::app()->getModule('shop')->showPrice, 'products' => $products)); }
public static function clearProductsFromCookie() { ShopModule::$_productsCookie = array(); unset(Yii::app()->request->cookies[self::CART_COOKIE_NAME]); }
public function actionIndex() { $offer = BaseActiveRecord::newModel('Offer'); $offerModelClass = get_class($offer); $products = array(); $transaction = null; // собираем данные, пришедшие от клиента if (isset($_POST[$offerModelClass])) { $offer->attributes = $_POST[$offerModelClass]; //если данные пришли не аяксом, то стартуем транзакцию if (!isset($_POST['ajax'])) { Yii::app()->db->setAutoCommit(false); $transaction = Yii::app()->db->beginTransaction(); } $products = $this->getProducts(); } // валидация формы ajax if (isset($_POST['ajax']) && $_POST['ajax'] === 'offerForm') { $validateResult = CActiveForm::validate($offer, null, false); //Если валидация формы заказа прошла успешно, то валидируем выбранные товары if ($validateResult == '[]') { echo CActiveForm::validateTabular($products, null, false); } else { echo $validateResult; } Yii::app()->end(); } // сохраняем if (isset($_POST[$offerModelClass])) { $valid = true; foreach ($products as $product) { $valid = $product->validate() && $valid; if (!$valid) { break; } } if (count($products) == 0) { $valid = false; $offer->addError('offer_text', 'Для оформления заявки необходимо выбрать хотя бы один товар.'); } if ($valid && $offer->validate()) { // Формируем текст заявки: foreach ($products as $product) { $offerProduct = BaseActiveRecord::newModel('OfferProduct'); //Модель-связь многие-ко-многим м/у заказом и товарами $offerProduct->id_product = $product->id_product; $offerProduct->amount = $product->countInCart; $offer->amount += $product->countInCart * $product->retail_price; $offer->addRelatedRecord('offerProducts', $offerProduct, true); } $offer->offer_text = $this->renderPartial('/offerText', array('products' => $products), true); $offer->onAfterSave = array($this, 'sendMessage'); $offer->save(); if ($transaction != null) { $transaction->commit(); } if (Yii::app()->daShop->useOnlinePayment) { $this->pay($offer); } Yii::app()->user->setFlash('offer-success', 'Спасибо, Ваш заказ успешно отправлен.'); ShopModule::clearProductsFromCookie(); $this->redirect(Yii::app()->createUrl(ShopModule::ROUTE_MAIN)); } else { // вообще сюда попадать в штатных ситуациях не должны // только если кул хацкер резвится Yii::app()->user->setFlash('offer-message', CHtml::errorSummary($offer, '<p>Не удалось отправить заявку</p>')); } } else { $products = ShopModule::getProductsFromCookie(); } $this->render('/offer', array('products' => $products, 'offer' => $offer, 'showPrice' => Yii::app()->getModule('shop')->showPrice)); }
<?php define('MODULE_NAME', 'Shop'); $actions = array('index', 'show'); $action = 'index'; if (isset($_REQUEST['action'])) { $action = strtolower($_REQUEST['action']); if (!in_array($action, $actions)) { $action = 'index'; } } define('ACTION_NAME', $action); require dirname(__FILE__) . '/core/fanwe.php'; $fanwe =& FanweService::instance(); $fanwe->cache_list[] = 'shops'; $fanwe->initialize(); require fimport('module/shop'); $_FANWE['nav_title'] = lang('common', 'shop'); switch (ACTION_NAME) { case 'index': ShopModule::index(); break; case 'show': ShopModule::show(); break; }