За последние 24 часа нас посетили 39043 программиста и 1285 роботов. Сейчас ищут 1027 программистов ...

Как менять язык сайта с помощью select

Тема в разделе "Прочие вопросы по PHP", создана пользователем textoro, 31 июл 2014.

  1. textoro

    textoro Новичок

    С нами с:
    1 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Здравствуйте. Интирисует такой вопрос:
    есть код:
    Код (Text):
    1.  
    2.  <select>
    3.            <option>rus</option>
    4.            <option>eng</option>
    5.                                                  
    6.   </select>
    Как занести выбраное пользователем значение в $_GET?
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Re: Как выбраное значение из select и занести в $_GET ?

    <form method="#" action='get'>
     
  3. textoro

    textoro Новичок

    С нами с:
    1 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Re: Как выбраное значение из select и занести в $_GET ?

    Оно то так, но мне нужно получать $_GET конкретного option, для того чтоб потом поместить значение из option в $_SESSION

    Чтобы было понятние, вот пример:
    Код (Text):
    1.  
    2. if (isset($_GET['language'])){
    3.     $_SESSION['language'] = $_GET['language']; // выбраное  значение (eng)
    4. }else{
    5.     $_SESSION['language'] = 'ru';
    6. }
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  5. textoro

    textoro Новичок

    С нами с:
    1 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Re: Как выбраное значение из select занести в $_GET ?

    Код (Text):
    1.  
    2. из статьи:
    3. <form action="option1.php">
    4.    <p><select size="3" name="hero">
    5.     <option disabled>Выберите героя</option>
    6.     <option value="t1" selected>Чебурашка</option>
    7.     <option value="t2">Крокодил Гена</option>
    8.     <option value="t3">Шапокляк</option>
    9.     <option value="t4">Крыса Лариса</option>
    10.    </select></p>
    11.    <p><input type="submit" value="Отправить"></p>
    12.   </form>
    вот к примеру мне нужно вытащить value="t4" и занести его в гет но без кнопки "<input type="submit" value="Отправить">"
    а просто при выборе из выпадающего списка.
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Re: Как выбраное значение из select занести в $_GET ?

    Подбираемся к сути проблемы.
    Объясни что такое html что такое php как они работают, что такие гет.
    Я не прикалываюсь, просто ты не понимаешь основы, хочу что ты начал думать рассуждать.
     
  7. textoro

    textoro Новичок

    С нами с:
    1 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Re: Как выбраное значение из select занести в $_GET ?

    думаю html не нуждаеться в ответе, php - серверный язык програмирования , тоесть его запросы выполняються на стороне сервера, ну и гет ето метод запроса отправляемий на сервер открыто через url
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Re: Как выбраное значение из select занести в $_GET ?

    Ну вроде правильно думаешь а вот не вижу логической связи. html это просто разметка страницы. PHP - серверный язык программирования, гет - способ посылки данных на сервер. Следовательно что бы данные оказались в гете надо послать запрос на сервер.Делай через форму либо же можно еще ajax-ом.
    http://api.jquery.com/jquery.get/
     
  9. textoro

    textoro Новичок

    С нами с:
    1 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Re: Как выбраное значение из select занести в $_GET ?

    Переформулирую изначальный вопрос -
    есть поле селект которое сождержит в себе два поля выбора- "Русский" и "Английский"
    нужно сделать так , что бы при выборе "Русский" в переменную $language присваивался индекс "ru" а при выборе "Английский" в в переменную $language присваивался индекс "eng" ето все что мне нужно
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как выбраное значение из select занести в $_GET ?

    у select должен быть атрибут name="ololo", у формы указываешь имя скрипта-обработчика и method="get" (или post)
    тогда при нажатии кнопки (input type="submit) в скрипт обработчик попадут эти параметры. селект как $_GET['ololo'] будет доступен.
     
  11. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Re: Как выбраное значение из select занести в $_GET ?

    Не ну так дело не пойдет, не тормози.
    Прочитай что ты сам написал, то что я написал и подумай немного. Уточню еще немного
     
  12. textoro

    textoro Новичок

    С нами с:
    1 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Re: Как выбраное значение из select занести в $_GET ?

    https://hostmaster.ua/policy/2ld.ua/

    вот простой пример смены языка на сайте, хочу так же сделать, и там select обрабативается без кнопки, и без jquery. Подскажите пожалуйста как такое реализовать?
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    загляни в html этой страницы.
    Код (PHP):
    1. <form method="post" action="/">
    2.     <input type="hidden" name="current_uri" value="https://example.com/policy/2ld.ua/">
    3.     <select name="select_language" onchange="this.form.submit(); return;">
    4.         <option value="en">English</option>
    5.         <option value="ua">Українська</option>
    6.         <option selected="selected" value="ru">Русский</option>
    7.     </select>
    8.     </form>
    давай ты сам расскажешь что здесь есть. если сумеешь объяснить каждый тег, ты выйдешь на следующий уровень.

    если выбрать язык, скажем English, и после перерисовк страницы заглянуть в куки, то увидишь такую хреньку:
    [​IMG]
    понимаешь что это? еще раз $level++
     
  14. textoro

    textoro Новичок

    С нами с:
    1 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Форма передает данные методом "пост"
    в ней есть 1 инпут, заданый тип "невидимый" значение которого - ссылка. (что конкретно он делает я не знаю)
    Дальше есть селект имеющий событие которое имеет в себе функцию javascript
    наверно именно ета функция и определяет какое значение выбрано, но как ее реализовать я не знаю.
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Код (Text):
    1. this.form.submit
    в данном случае отправляет форму на сервер, как если бы юзверь нажал на submit. current_uri - урл текущей страницы (на таком уровне английски обязателен для любого программиста!), видимо, скрипт на сервере, поменяв где надо флаг языка, делает перенаправление на эту страницу
     
  16. textoro

    textoro Новичок

    С нами с:
    1 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    О, то что мне и нужно, спасибо
    О, то что мне и нужно, спасибо
    а что прописать в невидимый инпут, значение value ?

    Добавлено спустя 8 минут 41 секунду:
    Код (Text):
    1. <form method="post" action="/">
    2.     <input type="hidden" name="current_uri" value="https://example.com/policy/2ld.ua/">
    3.     <select name="select_language" onchange="this.form.submit(); return;">
    4.         <option value="en">English</option>
    5.         <option value="ua">Українська</option>
    6.         <option selected="selected" value="ru">Русский</option>
    7.     </select>
    8.     </form>
    Наведите пожалуйста пример php, как ето все работает?
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Я же написал - url текущей страницы. На php будет примерно так:
    Код (PHP):
    1. $_SESSION["lang"] = $_REQUEST["select_language"];
    2. header("Location: $_REQUEST[current_uri]");
    3.  
    И естественно, при любом выводе проверять, что стоит в $_SESSION["lang"], и исходя из этого выводить. Читайте книжки :)
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    textoro, моё видение (наложенное на аналогичный личный опыт):
    в экшене формы прописан адрес обработчика этой формы "/". не знаю как там роутинг организован, но в конце концов скрипт, соответствующий странице с адресом "/" обрабатывает POST-запрос.
    Код (PHP):
    1. if (isset($_POST['select_language']) && isset($_POST['current_uri'])) {
    2.   // _следующая_ отображаемая страница будет использовать язык из селекта
    3.   setcookie('lang', $_POST['select_language'], 0, '/', '.example.com');
    4.   header('Location: '.$_POST['current_uri']);
    5.   exit();
    6. }
    7. //... иначе, просто отобразим страницу '/'
    вот и весь обработчик формы.

    как используется параметр "язык". допустим у нас есть папка, в которой хранятся файлы с массивами всех переводов.
    имена файлов совпадают с названием языка + расширение .php
    Код (PHP):
    1. <?php
    2. // где-то в теле файла, который подключается СО ВСЕХ страниц.
    3. // я бы назвал его "common.php"
    4. $lang = isset($_COOKIE['lang']) && in_array($_COOKIE['lang'], array('en', 'ua', 'ru'))
    5.     ? $_COOKIE['lang']
    6.     : 'ru'; // ru - язык по умолчанию
    7.  
    8. // ... логика контроллера ...
    9. $text = require __DIR__.'/language/'.$lang.'.php'; // файл переводов
    10. // вывод шаблона:
    11. // ...
    12. ?>
    13. <p><?= $text['Hello world!'] ?></p>
     
  19. textoro

    textoro Новичок

    С нами с:
    1 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Большое спасибо за детальное объяснение, ето мне и нужно было.