public function getLangUrl() { if ($this->_lang_url === null) { $this->_lang_url = $this->getUrl(); $homeUrl = explode('/', \Yii::$app->homeUrl); $url_list = explode('/', $this->_lang_url); $lang_url = isset($url_list[count($homeUrl) - 1]) ? $url_list[count($homeUrl) - 1] : null; Lang::setCurrent($lang_url); if ($lang_url !== null && $lang_url === Lang::getCurrent()['url'] && strpos($this->_lang_url, Lang::getCurrent()['url']) !== false) { // $this->_lang_url = substr($this->_lang_url, strlen(Lang::getCurrent()['url']) + 1); $this->_lang_url = str_replace('/' . Lang::getCurrent()['url'], '', $this->_lang_url); } } if (empty($this->_lang_url)) { $this->_lang_url = '/'; } return $this->_lang_url; }
public function createUrl($params) { if (isset($params['lang_id'])) { //Если указан идентификатор языка, то делаем попытку найти язык в БД, //иначе работаем с языком по умолчанию $lang = Lang::getLangByUrl($params['lang_id']); if ($lang === null) { $lang = Lang::getDefaultLang(); } unset($params['lang_id']); } else { //Если не указан параметр языка, то работаем с текущим языком $lang = Lang::getCurrent(); } //Получаем сформированный URL(без префикса идентификатора языка) $url = parent::createUrl($params); $url = preg_replace('#^' . \Yii::$app->homeUrl . '#', '', $url); // var_dump($url); // var_dump(\Yii::$app->homeUrl.$lang['url'].'/'.$url);die; //Добавляем к URL префикс - буквенный идентификатор языка if ($lang != Lang::getDefaultLang()) { // if ($url == '') { // return '/' . $lang['url'] . '/'; // } else { // return '/' . $lang['url'] . $url; // } return \Yii::$app->homeUrl . $lang['url'] . '/' . $url; } else { if ($url == '') { return \Yii::$app->homeUrl; } return \Yii::$app->homeUrl . $url; } }