コード例 #1
0
 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]);
 }
コード例 #2
0
 /**
  * @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;
 }