public function actionEdit($id) { $model = Navigation::model()->findByPk($id); if ($model == null) { throw new CHttpException(404, Yii::t('app', 'Страница не найдена')); } $this->pageTitle = 'Редактирование пункта "' . $model->lang->title . '"'; $this->breadcrumbs = array_merge($this->breadcrumbs, array('Редактирование')); $modelLangRu = $model->getNavigationLangModel('ru'); $modelLangEs = $model->getNavigationLangModel('es'); $modelLangEn = $model->getNavigationLangModel('en'); if (!empty($_POST) && array_key_exists('Navigation', $_POST)) { //var_dump($_POST);die; $transaction = Yii::app()->db->beginTransaction(); try { $modelLangRu->attributes = $_POST['NavigationLang']['ru']; $modelLangEs->attributes = $_POST['NavigationLang']['es']; $modelLangEn->attributes = $_POST['NavigationLang']['en']; $model->attributes = $_POST['Navigation']; $model->updatePosition(array('location' => $model->location)); if (!$model->save()) { throw new Exception('Ошибка при сохранении данных.'); } if (!$modelLangRu->save()) { throw new Exception('Ошибка при сохранении данных.'); } if (!$modelLangEs->save()) { throw new Exception('Ошибка при сохранении данных.'); } if (!$modelLangEn->save()) { throw new Exception('Ошибка при сохранении данных.'); } NavigationLang::model()->updateAll(array('langs' => '|ru|es|en|'), 'navigation_id=:navigation_id', array('navigation_id' => $id)); $transaction->commit(); Yii::app()->user->setFlash('success', 'Пункт успешно отредактирован'); if ($model->location == 'footer') { Yii::app()->request->redirect($this->createUrl('footer')); } Yii::app()->request->redirect($this->createUrl('index')); } catch (Exception $e) { $error = $e->getMessage(); $transaction->rollBack(); } } $list = array(1 => 'Первым'); $neighborsItems = Navigation::model()->findAll(); $count = Navigation::model()->count(); for ($i = 0; $i < $count; $i++) { if ($neighborsItems[$i]->sort_order != $model->sort_order) { $list[$neighborsItems[$i]->sort_order + 1] = 'После ' . $neighborsItems[$i]->lang->title; } } $pagesList = $model->getPossiblePages(); $pagesList[0] = '<Отсутствует>'; $this->render('edit', array('model' => $model, 'list' => $list, 'pagesList' => $pagesList, 'modelLangRu' => $modelLangRu, 'modelLangEs' => $modelLangEs, 'modelLangEn' => $modelLangEn)); }
public function getNavigationLangModel($lang) { $navigationLang = NavigationLang::model()->find('navigation_id=:navigation_id AND lang=:lang', array('navigation_id' => $this->id, 'lang' => $lang)); if (!$navigationLang) { $navigationLang = new NavigationLang(); //var_dump($this->lang);die; $navigationLang->attributes = $this->lang->attributes; $navigationLang->lang = $lang; $navigationLang->id = null; return $navigationLang; } return $navigationLang; }