public function actionIndex($slug, $languageSlug = null) { /** * @var Page $page */ $pageClass = Module::getInstance()->pageModelClass; $page = $pageClass::findBySlug($slug); $language = null; if ($languageSlug) { $language = I18N::getLanguageBySlug($languageSlug); } if (!$language) { $language = I18N::getCurrentLanguage(); } Yii::$app->language = $language['locale']; if (!$page) { throw new NotFoundHttpException(Yii::t('maddoger/website', 'Page not found.')); } $page->setLanguage($language['locale']); if (!$page->hasTranslation() && $page->default_language) { $page->setLanguage($page->default_language); } if (!$page->hasTranslation()) { throw new NotFoundHttpException(Yii::t('maddoger/website', 'Page not found.')); } switch ($page->status) { case Page::STATUS_ACTIVE: break; case Page::STATUS_AUTH_ONLY: if (Yii::$app->user->getIsGuest()) { throw new ForbiddenHttpException(Yii::t('maddoger/website', 'You must be authenticated to view this page.')); } break; case Page::STATUS_HIDDEN: if (!Yii::$app->user->getIsGuest() && Yii::$app->user->can('website.page.viewHiddenPages')) { break; } throw new NotFoundHttpException(Yii::t('maddoger/website', 'Page not found.')); default: throw new NotFoundHttpException(Yii::t('maddoger/website', 'Page not found.')); } if ($page->layout !== null && !empty($page->layout)) { $this->layout = $page->layout; } else { /** * @var $this->module Module */ $this->layout = Module::getInstance()->getConfiguration()->defaultLayout ?: null; } return $this->render(Module::getInstance()->pageView, ['model' => $page]); }
/** * @param \yii\web\UrlManager $manager * @param \yii\web\Request $request * @return array|bool */ public function parseRequest($manager, $request) { $res = parent::parseRequest($manager, $request); if (!$res) { return $res; } list($route, $params) = $res; if (isset($params[$this->languageParam])) { $languageSlug = $params[$this->languageParam]; $language = I18N::getLanguageBySlug($languageSlug); if ($language) { Yii::$app->language = $language['locale']; Yii::trace("Change language by URL to: {$language['locale']}", __METHOD__); } elseif ($this->defaultLanguage !== null) { Yii::$app->language = $this->defaultLanguage; } } return $res; }