/** * [createUrl description] * @param [type] $params [description] * @return [type] [description] */ public function createUrl($params) { $defaultLang = Lang::getDefaultLang(); if (isset($params[1]) && isset($params[1]['lang_id'])) { // Если указан идентификатор языка, то делаем попытку найти язык в БД, иначе работаем с языком по умолчанию. $lang = Lang::findOne(['url' => $params[1]['lang_id']]); if ($lang === null) { $lang = $defaultLang; } unset($params[1]['lang_id']); } else { // Если не указан параметр языка, то работаем с текущим языком. $lang = Lang::getCurrent(); } // Получаем сформированный URL(без префикса идентификатора языка). $url = parent::createUrl($params); if ($lang->url == $defaultLang->url) { return $url; } // Добавляем к URL префикс - буквенный идентификатор языка. if ($url == '/') { return '/' . $lang->url; } else { return '/' . $lang->url . $url; } }
/** * [getLangUrl description] * @return [type] [description] */ public function getLangUrl() { if ($this->_lang_url === null) { $defaultLang = Lang::getDefaultLang(); $this->_lang_url = $this->getUrl(); $url_list = explode('/', $this->_lang_url); $lang_url = isset($url_list[1]) ? $url_list[1] : null; Lang::setCurrent($lang_url); if ($lang_url !== null && $lang_url === Lang::getCurrent()->url && strpos($this->_lang_url, Lang::getCurrent()->url) === 1) { $this->_lang_url = substr($this->_lang_url, strlen(Lang::getCurrent()->url) + 1); } // Если язык в адресе соотвествует дефолтному то редиректим на урл без языка. if ($defaultLang->url == $lang_url) { if ($this->_lang_url) { $url = $this->_lang_url; } else { $url = '/'; } return Yii::$app->getResponse()->redirect($url, 301); } } return $this->_lang_url; }
public function createUrl($params) { if (is_array($params) && array_key_exists('lang_id', $params)) { //isset($params['lang_id']) $lang = Lang::findOne($params['lang_id']); if ($lang === null) { $lang = Lang::getDefaultLang(); } unset($params['lang_id']); } else { $lang = Lang::getCurrent(); } $url = parent::createUrl($params); $baseUrl = $this->showScriptName || !$this->enablePrettyUrl ? $this->getScriptUrl() : $this->getBaseUrl(); if ($url !== '/') { if ($baseUrl === '') { return '/' . $lang->url . $url; } else { return str_replace($baseUrl, "{$baseUrl}/{$lang->url}", $url); } } else { return '/' . $lang->url; } }