/** * @param \yupe\components\urlManager\LangUrlManager $manager * @param CHttpRequest $request * @param string $pathInfo * @param string $rawPathInfo * @return bool|string */ public function parseUrl($manager, $request, $pathInfo, $rawPathInfo) { $slugs = Yii::app()->getCache()->get(self::CACHE_KEY); if (false === $slugs) { /* @var $cmd CDbCommand */ $cmd = Yii::app()->getDb()->createCommand(); $slugs = $cmd->setFetchMode(PDO::FETCH_COLUMN, 0)->from('{{page_page}}')->select('slug')->queryAll(); Yii::app()->getCache()->set(self::CACHE_KEY, $slugs, 0); } $parts = explode('/', $manager->removeLangFromUrl($pathInfo)); if (!empty($parts)) { $slug = $parts[0]; if (in_array($slug, $slugs, true)) { return 'page/page/view/slug/' . $slug; } } return false; }
/** * Обработка запроса * * @param mixed $event * @return void */ public function handleLanguageBehavior($event) { $this->setLanguage($this->getLang()); $this->lang = $this->lm->getAppLang() === $this->getLang() ? false : $this->getLang(); // язык передан в url, но он равен дефолтному языку if ($this->getUrlLang() !== null && $this->lang === false) { Yii::app()->getRequest()->redirect(Yii::app()->getHomeUrl() . $this->lm->getCleanUrl(Yii::app()->getRequest()->url)); } }
/** * @param string $language */ protected function setLanguage($language) { Yii::app()->getUser()->setState($this->lm->getCookieKey(), $language); Yii::app()->getRequest()->cookies[$this->lm->getCookieKey()] = new CHttpCookie($this->lm->getCookieKey(), $language); Yii::app()->setLanguage($language); }