'Управление', 'create' => 'Добавить', 'update' => 'Редактировать', ); public $modelName; public $i18ModelName; public function init() { parent::init(); if (!isset($this->i18ModelName)) $this->i18ModelName = $this->modelName . 'I18n'; } /** * Creates a new model. * If creation is successful, the browser will be redirected to the 'view' page. */ public function actionCreate() { $model = new $this->modelName; $i18nModels = array(); foreach (Yii::app()->params['languages'] as $lang) { $i18nModel = new $this->i18ModelName; $i18nModel->lang = $lang; $i18nModels[$lang] = $i18nModel; } // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if (isset($_POST[$this->modelName]) || isset($_POST[$this->i18ModelName])) { if (isset($_POST[$this->modelName])) $model->attributes = $_POST[$this->modelName]; $i18nValidation = true; if (isset($_POST[$this->i18ModelName])) { foreach ($_POST[$this->i18ModelName] as $lang => $post) { $i18nModels[$lang]->attributes = $post; $i18nValidation = $i18nValidation && $i18nModels[$lang]->validate(); } } if ($model->validate() && $i18nValidation) { $model->i18ns = $i18nModels; $model->save(false); foreach ($i18nModels as $i18nModel) { $i18nModel->id = $model->id; $i18nModel->save(); } $this->redirect(array('admin')); } } $this->render('create', array( 'model' => $model, 'i18nModels' => $i18nModels, )); } /** * 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); $i18nModels = array(); foreach (Yii::app()->params['languages'] as $lang) { if (!isset($model->i18ns[$lang])) { $i18nModel = new $this->i18ModelName; $i18nModel->id = $model->id; $i18nModel->lang = $lang; $i18nModels[$lang] = $i18nModel; } else { $i18nModels[$lang] = $model->i18ns[$lang]; } } if (isset($_POST[$this->modelName]) || isset($_POST[$this->i18ModelName])) { if (isset($_POST[$this->modelName])) $model->attributes = $_POST[$this->modelName]; $i18nValidation = true; if (isset($_POST[$this->i18ModelName])) { foreach ($_POST[$this->i18ModelName] as $lang => $post) { $i18nModels[$lang]->attributes = $post; $i18nValidation = $i18nValidation && $i18nModels[$lang]->validate(); } } if ($model->validate() && $i18nValidation) { $model->i18ns = $i18nModels; $model->save(false); foreach ($i18nModels as $i18nModel) { $i18nModel->save(); } $this->redirect(array('admin')); } } $this->render('update', array( 'model' => $model, 'i18nModels' => $i18nModels, )); } /** * Deletes a particular model. * If deletion is successful, the browser will be redirected to the 'admin' page. * @param integer $id the ID of the model to be deleted */ public function actionDelete($id) { if (Yii::app()->request->isPostRequest) { // we only allow deletion via POST request $this->loadModel($id)->delete(); // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser if (!isset($_GET['ajax'])) $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin')); } else throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.'); } /** * Manages all models. */ public function actionAdmin() { /** @var $model CActiveRecord */ $model = new $this->modelName('search'); $model->unsetAttributes(); // clear any default values foreach ($model->getAttributes() as $k => $v) { if (isset($_GET[$k])) { $model->$k = $_GET[$k]; } } if (isset($_GET[$this->modelName])) $model->attributes = $_GET[$this->modelName]; $this->render('admin', array( 'model' => $model, )); } /** * 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 the ID of the model to be loaded */ public function loadModel($id) { $class = $this->modelName; $model = call_user_func_array(array(&$class, 'model'), array()); $model = $model->findByPk($id); if ($model === null) throw new CHttpException(404, 'The requested page does not exist.'); return $model; } }