public function run() { $controller = $this->controller; $modelName = $controller::getModelName(); $contentModelName = $controller::getContentModelName(); $model = new $modelName(); $session = Yii::$app->session; $modelContent = new $contentModelName(); $modelContent->lang_id = Languages::currentLangId(); if ($model->load(Yii::$app->request->post()) && $modelContent->load(Yii::$app->request->post())) { $transaction = Yii::$app->db->beginTransaction(); try { $res = $model->save(); if ($res) { $modelContent->parent_id = $model->id; $modelContent->save(); $transaction->commit(); } else { print_r($model->errors); throw new \Exception('Не удалось сохранить модель - ошибка валидации'); } } catch (\Exception $e) { $transaction->rollBack(); throw $e; } //$session->setFlash('pageCreated', 'Страница оновлена.'); ##!! Edit return $controller->redirect(['update', 'id' => $model->id]); } else { return $controller->render('create', ['model' => $model, 'modelContent' => $modelContent]); } }
/** * Этот метод должен вызываться при инициализации контроллера, он * делает редирект (если нужно) на выбранную языковую версию */ public static function init() { // Определяем текущий язык self::detectClientLangId(); $languageInurl = Yii::$app->request->languageInurl; $inurl = $languageInurl !== null ? Languages::all()->getConfigByParam('url', $languageInurl) : null; $current = Languages::all()->getConfigCurrent(); $default = Languages::all()->getConfigDefault(); $inurl_real_id = $inurl ? $inurl['id'] : $default['id']; if ($current !== null) { if ($inurl_real_id !== $current['id']) { // Префикс в ссылке и текущий язык не совпадают if (Yii::$app->urlManager->multilanguageHideDefaultPrefix && YII_ENV !== 'test' && Yii::$app->getRequest()->getMethod() === 'GET' && !Yii::$app->getRequest()->isAjax) { $url = \yii\helpers\Url::current(['x-language-url' => $current['url']]); Yii::$app->getResponse()->redirect($url)->send(); Yii::$app->end(); } } else { if (Yii::$app->urlManager->multilanguageHideDefaultPrefix && $inurl && $inurl['id'] === $default['id']) { $url = \yii\helpers\Url::current(['x-language-url' => false]); Yii::$app->getResponse()->redirect($url)->send(); Yii::$app->end(); } } } else { Yii::error('Unexpected null in $current language.', 'multilanguage'); } if ($current) { Yii::$app->language = $current['locale']; } }
public function run($id, $lang_id = null) { $controller = $this->controller; $modelName = $controller::getModelName(); $contentModelName = $controller::getContentModelName(); if (!$lang_id) { $lang_id = Languages::currentLangId(); } $model = $controller->findModel($id); $session = Yii::$app->session; $modelContent = $model->getContent($lang_id)->one(); if (!$modelContent) { $modelContent = new $contentModelName(); $modelContent->lang_id = $lang_id; } if ($model->load(Yii::$app->request->post()) && $modelContent->load(Yii::$app->request->post())) { $modelContent->lang_id = $lang_id; $modelContent->parent_id = $model->id; $transaction = Yii::$app->db->beginTransaction(); try { $model->save(); $modelContent->save(); $transaction->commit(); } catch (\Exception $e) { $transaction->rollBack(); throw $e; } //$session->setFlash('pageUpdated', 'Страница оновлена.'); ##!! Edit return $controller->redirect(['update', 'id' => $model->id, 'lang_id' => $lang_id]); } else { return $controller->render('update', ['model' => $model, 'modelContent' => $modelContent]); } }
public function beforeAction($action) { Languages::init(); if (!parent::beforeAction($action)) { return false; } return true; }
public function getDataCellValue($model, $key, $index) { $list = Languages::all()->getConfig(); $items = []; foreach ($list as $id => $lang) { $items[] = Html::a($lang['name'], ['update', 'id' => $model->id, 'lang_id' => $lang['id']], ['class' => $this->issetContent($model, $lang['id']) ? 'btn btn-primary' : 'btn btn-default']); } return implode(' ', $items); }
public function getPathInfo() { // Добавить кэш $pathInfo (не забыть про setPathInfo) $pathInfo = parent::getPathInfo(); $pattern = Languages::all()->pattern(); if (preg_match("/^({$pattern})\\/(.*)/", $pathInfo, $arr)) { $this->lang_url = $arr[1]; $pathInfo = $arr[count($arr) - 1]; } return $pathInfo; }
public function createUrl($params) { $default = Languages::all()->getConfigDefault(); $current = Languages::all()->getConfigCurrent(); $url_prefix = null; if (isset($params['x-language-url']) && !$params['x-language-url']) { $params['x-language-url'] = $default['url']; } if (isset($params['x-language-url']) && Languages::all()->getConfigByParam('url', $params['x-language-url'])) { $url_prefix = $params['x-language-url'] === $default['url'] && $this->multilanguageHideDefaultPrefix ? '' : $params['x-language-url']; unset($params['x-language-url']); } // echo "url_prefix: "; // var_export($url_prefix); // echo "\n"; // // print_r($params); // exit; if ($url_prefix === null) { // Иначе подставляем текущий язык $url_prefix = Yii::$app->request->getLanguageInurl(); } $url = parent::createUrl($params); if ($url_prefix) { $url = '/' . $url_prefix . $url; } return $url; }