Задать вопрос
@Prosspa

Как сделать редирект на текущую страницу с новыми атрибутами?

Нужно сделать так, что когда пользователь попадает на сайт, ему сразу ставилась версия языка та, которая предпочтительная в браузере.
Не могу понять как правильно сделать редирект.
К примеру, есть домен test.ru нужно после того как пользователя попал на страницу отправить его или поставить ссылку типа test.ru/ru (сразу после загрузки).
Но все четно не понимаю как правильно настроить редирект подобного рода, у меня или TO_MENY_REDIRECTS или вообще в браузер уходи в цикилческую перезагрузку...

Кто сталкивался с такой задачей? Подскажите пожалуйста как правильно решить такой момент?
Ибо с подобным я сталкиваюсь не часто, да и гугл не дал ничего вразумительно по этому поводу. Выдавал только переключение через переключатель. Но у меня на сайте переключатель уже есть, нужно только то что я описал выше.
Приложу код метода класса:

public function redirectUrl()
    {
        $lang = $this->getBestMatch();
        $uri = $_SERVER['REQUEST_URI'];
        if( Yii::$app->request->cookies->has('current_language_id')) {
            $lang_id = Yii::$app->request->cookies->get('current_language_id')->value;
            $currentLang = Lang::findOne($lang_id);
            $newLang = Lang::findOne(['url' => $lang]);
            Yii::$app->response->cookies->add(new \yii\web\Cookie([
                'name' => 'current_language_id',
                'value' => $newLang->id
            ]));
            $parseUri = $lang.$uri;
            if(strpos($uri, $lang)) {
                $parseUri = str_replace($currentLang->url,$newLang->url,$uri);
            }
            $url = Yii::$app->urlManager->createAbsoluteUrl('/');
//            Yii::$app->response->redirect($url);
            return 1;
        } else {
            $lang_id = Yii::$app->request->cookies->get('current_language_id')->value;
            $currentLang = Lang::findOne($lang_id);
            $newLang = Lang::findOne(['url' => $lang]);
            Yii::$app->response->cookies->add(new \yii\web\Cookie([
                'name' => 'current_language_id',
                'value' => $newLang->id
            ]));
            $parseUri = $lang.$uri;
            if(strpos($uri, $lang)) {
                $parseUri = str_replace($currentLang->url,$newLang->url,$uri);
            }
            $url = Yii::$app->urlManager->createAbsoluteUrl($parseUri);
//            Yii::$app->response->redirect($url);
        }
        return false;
    }
  • Вопрос задан
  • 213 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Если не хотите пользоваться готовыми расширениями есть статья, которая пошагово рассказывает как организовать мультиязычность на сайте.
Ответ написан
@Prosspa Автор вопроса
$lang = $this->getBestMatch();
        $listsLang = ArrayHelper::map(Yii::$app->params['languages'],'locale','locale');
        $setUrl = '/';

        if(!isset($_COOKIE['current_language'])) {

            if(isset($listsLang[$lang])) {
                $setUrl .= $lang.'/';
                $setLang = $lang;
            } else {
                foreach (Yii::$app->params['languages'] as $language) {
                    if(isset($language['default'])) {
                        $setLang = $language['locale'];
                    }
                }
            }
            Yii::$app->response->redirect($setUrl, 302);
            setcookie('current_language',$setLang,null,'/');
            Yii::$app->end();
        }
        return false;


Переделал вот на такой код, код рабочий, дело было в куке.
После записи куки оно отказывалось редиректить, тут сделал вот так.
Оно редиректит один раз когда пользователь попал на страницу в первый раз, потом перестает редиректить.
Если подумать что у пользователя каждый раз подставлялась предпочтительная версия то можно побаловаться с кукой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
TL;DR
там у вас каша, из за этого и фигня. Проверяйте отдельно - если в урл уже есть язык, тогда нужно только обновить куки и что там еще из переменных, в остальных случаях уже определить нужный язык и редиректить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы