/** * Returns the data model based on the primary key given in the GET variable * If the data model is not found, an HTTP exception will be raised * @param integer $id the ID of the model to be loaded * * @return mixed * @throws CHttpException */ public function loadModel($id) { $model = Bannerarea::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }
/** * Updates a particular model * If update is successful, the browser will be redirected to the 'view' page * @param integer $id the ID of the model to be updated */ public function actionUpdate($id) { $model = $this->loadModel($id); $areaList = Bannerarea::createAreaList(); // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if (isset($_POST['Banners'])) { $model->attributes = $_POST['Banners']; if ($model->save()) { $this->redirect(array('/banners')); } } $this->render('update', array('model' => $model, 'areaList' => $areaList)); }
/** * @method run */ public function run() { if ($bannerarea = Bannerarea::model()->find('name=:name', array('name' => $this->areaname))) { $banners = array(); $typeRotation = false; $criteria = new CDbCriteria(); $criteria->condition = 'bannerarea=:bannerarea AND notactive<>1'; $criteria->params = array('bannerarea' => $bannerarea->id); switch ($bannerarea->mode) { case Bannerarea::SHOW_ALL: $criteria->order = 'sort_order'; break; case Bannerarea::RANDOM_ALL: $criteria->order = new CDbExpression('RAND()'); break; } $dataProvider = new CActiveDataProvider('Banners', array('criteria' => $criteria)); switch ($bannerarea->mode) { case Bannerarea::ONE_AT_ROTATION: // Поочередная ротация $typeRotation = true; $dataProvider->pagination->pageSize = 1; // Увеличиваем номер очередного баннера на 1 if (isset($bannerarea->queue)) { $bannerarea->queue = $bannerarea->queue + 1; } else { $bannerarea->queue = 0; } // Если номер больше, чем общее количество - обнуляем if ($bannerarea->queue > $dataProvider->totalItemCount - 1) { $bannerarea->queue = 0; } // Устанавливаем текущую страницу $dataProvider->pagination->currentPage = $bannerarea->queue; // Сохраняем номер очередной просмотренной страницы $bannerarea->save(); break; case Bannerarea::RANDOM_ROTATION: $typeRotation = true; $dataProvider->pagination->pageSize = 1; // Генерируем случайным образом номер баннера для показа $bannerarea->queue = mt_rand(0, $dataProvider->totalItemCount - 1); // Устанавливаем текущую страницу $dataProvider->pagination->currentPage = $bannerarea->queue; // Сохраняем номер очередной просмотренной страницы $bannerarea->save(); break; case Bannerarea::SLIDER: $this->viewName = 'slider'; $banners = Banners::model()->findAll($criteria); break; default: $dataProvider->pagination = false; break; } $this->render($this->viewName, array('dataProvider' => $dataProvider, 'itemViewName' => $this->itemViewName, 'banners' => $banners, 'typeRotation' => $typeRotation)); return parent::run(); } else { echo 'Рекламное место ' . $this->areaname . 'не найдено!'; } }
/** * @return array - List of banner areas */ public static function createAreaList() { $areaList = array(); if ($bannerAreas = Bannerarea::model()->findAll()) { foreach ($bannerAreas as $bannerArea) { $areaList[$bannerArea['id']] = $bannerArea['title']; } } return $areaList; }