Моментальное изменение ссылки $_GET

93
04 марта 2022, 22:00

Перевожу сайт на мультиязычность. При загрузке страницы инклудится базовая структура html и код if (!isset($_GET['lang'])){ $_GET['lang'] = 'ua'; }, но при этом ссылка не меняется. Как сделать так, чтобы при загрузке страницы к ссылке добавлялись значения из $_GET? JS приветствуется.

Answer 1

Замените это:

if (!isset($_GET['lang'])){ $_GET['lang'] = 'ua'; }

Вот так:

if ( ! isset( $_GET['lang'] ) ) {
    if ( ! isset( $_GET ) ) {
        header( 'Location: ' . $_SERVER['REQUEST_URI'] . '?lang=ua' );
    } else {
        header( 'Location: ' . $_SERVER['REQUEST_URI'] . '&lang=ua' );
    }
}

И получите желаемое.

Объяснение

$_GET - это переменная которая берется из url страницы. Например в https://adudnik.ru/index.php?test=1 указана $_GET['test'] со значением 1

В вашем же случае нужно указать $_GET['lang'] значение ua. Для этого мы делаем редирект пользователя на текущий URL и добавляем к нему ?lang=ua. По сути перезагружаем страницу с этим параметром.

Однако нам нужно дополнительно проверить есть ли другие $_GET переменные. Если их нет - добавляем ?, если есть - &

$_SERVER['REQUEST_URI'] указывает текущий URL, чтобы пользователь остался на этой странице, а не был выброшен на главную.

Обратите внимание, если вы будете использовать $_GET для проверки языка, то у пользователя всё время должен быть lang параметр в юрле. Это очень неудобно. Чтобы этого избежать - используйте куки или сессию.

Решение с $_COOKIE

<?php
if ( isset( $_GET['lang'] ) ) {
    if ( $_GET['lang'] != $_COOKIE['lang'] ) {
        setcookie( "lang", $_GET['lang'] );
        header( 'Location: ' . $_SERVER["REQUEST_URI"] );
    }
}
if ( ! isset( $_COOKIE['lang'] ) ) {
    setcookie( "lang", "ua" );
    header( 'Location: ' . $_SERVER["REQUEST_URI"] );
} 

Обратите внимание - куки требуют передачи себя в самом начале запроса. До вывода <html> или других параметров header, потому этот код должен стоять в самом начале файла.

В случае с куки - вы должны в дальнейшем получать значение языка для своего кода из переменной $_COOKIE['lang'] а не из $_GET['lang'] (т.к. весь смысл этой реализации сводится к тому, чтобы убрать из url значение языка)

Чтобы сменить язык - просто направьте пользователя на нужный ?lang=язык

Файл для тестирования кода на моём сайте: https://adudnik.ru/lang_example.php?lang=ru

READ ALSO
Проблема хранение ссылок на экземпляр в map

Проблема хранение ссылок на экземпляр в map

Пытаюсь хранить ссылки на экземпляры Test в map из stl c++, но компилятор ругается

80
Модульные проекты на C++ [закрыт]

Модульные проекты на C++ [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

183
Как отправить данные через USB?

Как отправить данные через USB?

Я хочу отправить данные через USB на ArduinoСам микроконтроллер запрограммирован ждать сигнал с serial-порта

85
Расшифровка названий C++

Расшифровка названий C++

Есть ли сайт где указаны все расшифровки названий для C++ (например как расшифровывается cout = console output; endl = end line; iostream = input output stream и тд

80